Skip to content

Commit a047c8a

Browse files
committed
Added overloads for WithNoModel and WithModelOfType (#229)
1 parent 09f4fc0 commit a047c8a

File tree

87 files changed

+24358
-231
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

87 files changed

+24358
-231
lines changed

MyTested.AspNetCore.Mvc.sln

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,10 @@ Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "MyTested.AspNetCore.Mvc.Mod
136136
EndProject
137137
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "MyTested.AspNetCore.Mvc.Helpers", "src\MyTested.AspNetCore.Mvc.Helpers\MyTested.AspNetCore.Mvc.Helpers.xproj", "{776BC96D-F536-4788-808E-F0F25C26FB69}"
138138
EndProject
139+
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "MyTested.AspNetCore.Mvc.Models.Test", "test\MyTested.AspNetCore.Mvc.Models.Test\MyTested.AspNetCore.Mvc.Models.Test.xproj", "{1CF0545A-8800-4ED1-8A89-A95FE557EE57}"
140+
EndProject
141+
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "MyTested.AspNetCore.Mvc.Helpers.Test", "test\MyTested.AspNetCore.Mvc.Helpers.Test\MyTested.AspNetCore.Mvc.Helpers.Test.xproj", "{FE5913FD-CD0A-4ED9-9C43-F2892C72ED6E}"
142+
EndProject
139143
Global
140144
GlobalSection(SolutionConfigurationPlatforms) = preSolution
141145
Debug|Any CPU = Debug|Any CPU
@@ -374,6 +378,14 @@ Global
374378
{776BC96D-F536-4788-808E-F0F25C26FB69}.Debug|Any CPU.Build.0 = Debug|Any CPU
375379
{776BC96D-F536-4788-808E-F0F25C26FB69}.Release|Any CPU.ActiveCfg = Release|Any CPU
376380
{776BC96D-F536-4788-808E-F0F25C26FB69}.Release|Any CPU.Build.0 = Release|Any CPU
381+
{1CF0545A-8800-4ED1-8A89-A95FE557EE57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
382+
{1CF0545A-8800-4ED1-8A89-A95FE557EE57}.Debug|Any CPU.Build.0 = Debug|Any CPU
383+
{1CF0545A-8800-4ED1-8A89-A95FE557EE57}.Release|Any CPU.ActiveCfg = Release|Any CPU
384+
{1CF0545A-8800-4ED1-8A89-A95FE557EE57}.Release|Any CPU.Build.0 = Release|Any CPU
385+
{FE5913FD-CD0A-4ED9-9C43-F2892C72ED6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
386+
{FE5913FD-CD0A-4ED9-9C43-F2892C72ED6E}.Debug|Any CPU.Build.0 = Debug|Any CPU
387+
{FE5913FD-CD0A-4ED9-9C43-F2892C72ED6E}.Release|Any CPU.ActiveCfg = Release|Any CPU
388+
{FE5913FD-CD0A-4ED9-9C43-F2892C72ED6E}.Release|Any CPU.Build.0 = Release|Any CPU
377389
EndGlobalSection
378390
GlobalSection(SolutionProperties) = preSolution
379391
HideSolutionNode = FALSE
@@ -440,5 +452,7 @@ Global
440452
{D28E4019-DC88-452D-8AEF-46799AB32B45} = {45B7B5FC-DF8C-498E-956E-28D56946C7DA}
441453
{A3C86420-DB2E-4103-A4B9-275B6F08C809} = {09353A03-2B0C-496B-8EB1-2CB6A22D758B}
442454
{776BC96D-F536-4788-808E-F0F25C26FB69} = {09353A03-2B0C-496B-8EB1-2CB6A22D758B}
455+
{1CF0545A-8800-4ED1-8A89-A95FE557EE57} = {D140FA14-A6C2-4279-8A41-35BC55279DA8}
456+
{FE5913FD-CD0A-4ED9-9C43-F2892C72ED6E} = {D140FA14-A6C2-4279-8A41-35BC55279DA8}
443457
EndGlobalSection
444458
EndGlobal

samples/MusicStore/MusicStore.Test/project.lock.json

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4411,6 +4411,7 @@
44114411
"framework": ".NETStandard,Version=v1.6",
44124412
"dependencies": {
44134413
"MyTested.AspNetCore.Mvc.Controllers": "1.0.0",
4414+
"MyTested.AspNetCore.Mvc.Models": "1.0.0",
44144415
"MyTested.AspNetCore.Mvc.Routing": "1.0.0"
44154416
},
44164417
"compile": {
@@ -4462,6 +4463,22 @@
44624463
"netstandard1.6/MyTested.AspNetCore.Mvc.EntityFrameworkCore.dll": {}
44634464
}
44644465
},
4466+
"MyTested.AspNetCore.Mvc.Helpers/1.0.0-preview-final": {
4467+
"type": "project",
4468+
"framework": ".NETStandard,Version=v1.6",
4469+
"dependencies": {
4470+
"MyTested.AspNetCore.Mvc.Controllers": "1.0.0",
4471+
"MyTested.AspNetCore.Mvc.Models": "1.0.0",
4472+
"MyTested.AspNetCore.Mvc.ViewActionResults": "1.0.0",
4473+
"MyTested.AspNetCore.Mvc.ViewComponents": "1.0.0"
4474+
},
4475+
"compile": {
4476+
"netstandard1.6/MyTested.AspNetCore.Mvc.Helpers.dll": {}
4477+
},
4478+
"runtime": {
4479+
"netstandard1.6/MyTested.AspNetCore.Mvc.Helpers.dll": {}
4480+
}
4481+
},
44654482
"MyTested.AspNetCore.Mvc.Http/1.0.0-preview-final": {
44664483
"type": "project",
44674484
"framework": ".NETStandard,Version=v1.6",
@@ -4490,6 +4507,19 @@
44904507
"netstandard1.4/MyTested.AspNetCore.Mvc.Licensing.dll": {}
44914508
}
44924509
},
4510+
"MyTested.AspNetCore.Mvc.Models/1.0.0-preview-final": {
4511+
"type": "project",
4512+
"framework": ".NETStandard,Version=v1.6",
4513+
"dependencies": {
4514+
"MyTested.AspNetCore.Mvc.Abstractions": "1.0.0"
4515+
},
4516+
"compile": {
4517+
"netstandard1.6/MyTested.AspNetCore.Mvc.Models.dll": {}
4518+
},
4519+
"runtime": {
4520+
"netstandard1.6/MyTested.AspNetCore.Mvc.Models.dll": {}
4521+
}
4522+
},
44934523
"MyTested.AspNetCore.Mvc.ModelState/1.0.0-preview-final": {
44944524
"type": "project",
44954525
"framework": ".NETStandard,Version=v1.6",
@@ -4624,6 +4654,7 @@
46244654
"dependencies": {
46254655
"Microsoft.AspNetCore.Mvc.ViewFeatures": "1.0.0",
46264656
"MyTested.AspNetCore.Mvc.DataAnnotations": "1.0.0",
4657+
"MyTested.AspNetCore.Mvc.Helpers": "1.0.0",
46274658
"MyTested.AspNetCore.Mvc.TempData": "1.0.0",
46284659
"MyTested.AspNetCore.Mvc.ViewActionResults": "1.0.0",
46294660
"MyTested.AspNetCore.Mvc.ViewComponents": "1.0.0",
@@ -6916,6 +6947,7 @@
69166947
"framework": ".NETFramework,Version=v4.5.1",
69176948
"dependencies": {
69186949
"MyTested.AspNetCore.Mvc.Controllers": "1.0.0",
6950+
"MyTested.AspNetCore.Mvc.Models": "1.0.0",
69196951
"MyTested.AspNetCore.Mvc.Routing": "1.0.0"
69206952
},
69216953
"compile": {
@@ -6967,6 +6999,22 @@
69676999
"net451/MyTested.AspNetCore.Mvc.EntityFrameworkCore.dll": {}
69687000
}
69697001
},
7002+
"MyTested.AspNetCore.Mvc.Helpers/1.0.0-preview-final": {
7003+
"type": "project",
7004+
"framework": ".NETFramework,Version=v4.5.1",
7005+
"dependencies": {
7006+
"MyTested.AspNetCore.Mvc.Controllers": "1.0.0",
7007+
"MyTested.AspNetCore.Mvc.Models": "1.0.0",
7008+
"MyTested.AspNetCore.Mvc.ViewActionResults": "1.0.0",
7009+
"MyTested.AspNetCore.Mvc.ViewComponents": "1.0.0"
7010+
},
7011+
"compile": {
7012+
"net451/MyTested.AspNetCore.Mvc.Helpers.dll": {}
7013+
},
7014+
"runtime": {
7015+
"net451/MyTested.AspNetCore.Mvc.Helpers.dll": {}
7016+
}
7017+
},
69707018
"MyTested.AspNetCore.Mvc.Http/1.0.0-preview-final": {
69717019
"type": "project",
69727020
"framework": ".NETFramework,Version=v4.5.1",
@@ -6991,6 +7039,19 @@
69917039
"net451/MyTested.AspNetCore.Mvc.Licensing.dll": {}
69927040
}
69937041
},
7042+
"MyTested.AspNetCore.Mvc.Models/1.0.0-preview-final": {
7043+
"type": "project",
7044+
"framework": ".NETFramework,Version=v4.5.1",
7045+
"dependencies": {
7046+
"MyTested.AspNetCore.Mvc.Abstractions": "1.0.0"
7047+
},
7048+
"compile": {
7049+
"net451/MyTested.AspNetCore.Mvc.Models.dll": {}
7050+
},
7051+
"runtime": {
7052+
"net451/MyTested.AspNetCore.Mvc.Models.dll": {}
7053+
}
7054+
},
69947055
"MyTested.AspNetCore.Mvc.ModelState/1.0.0-preview-final": {
69957056
"type": "project",
69967057
"framework": ".NETFramework,Version=v4.5.1",
@@ -7125,6 +7186,7 @@
71257186
"dependencies": {
71267187
"Microsoft.AspNetCore.Mvc.ViewFeatures": "1.0.0",
71277188
"MyTested.AspNetCore.Mvc.DataAnnotations": "1.0.0",
7189+
"MyTested.AspNetCore.Mvc.Helpers": "1.0.0",
71287190
"MyTested.AspNetCore.Mvc.TempData": "1.0.0",
71297191
"MyTested.AspNetCore.Mvc.ViewActionResults": "1.0.0",
71307192
"MyTested.AspNetCore.Mvc.ViewComponents": "1.0.0",
@@ -13795,6 +13857,11 @@
1379513857
"path": "../../../src/MyTested.AspNetCore.Mvc.EntityFrameworkCore/project.json",
1379613858
"msbuildProject": "../../../src/MyTested.AspNetCore.Mvc.EntityFrameworkCore/MyTested.AspNetCore.Mvc.EntityFrameworkCore.xproj"
1379713859
},
13860+
"MyTested.AspNetCore.Mvc.Helpers/1.0.0-preview-final": {
13861+
"type": "project",
13862+
"path": "../../../src/MyTested.AspNetCore.Mvc.Helpers/project.json",
13863+
"msbuildProject": "../../../src/MyTested.AspNetCore.Mvc.Helpers/MyTested.AspNetCore.Mvc.Helpers.xproj"
13864+
},
1379813865
"MyTested.AspNetCore.Mvc.Http/1.0.0-preview-final": {
1379913866
"type": "project",
1380013867
"path": "../../../src/MyTested.AspNetCore.Mvc.Http/project.json",
@@ -13805,6 +13872,11 @@
1380513872
"path": "../../../src/MyTested.AspNetCore.Mvc.Licensing/project.json",
1380613873
"msbuildProject": "../../../src/MyTested.AspNetCore.Mvc.Licensing/MyTested.AspNetCore.Mvc.Licensing.xproj"
1380713874
},
13875+
"MyTested.AspNetCore.Mvc.Models/1.0.0-preview-final": {
13876+
"type": "project",
13877+
"path": "../../../src/MyTested.AspNetCore.Mvc.Models/project.json",
13878+
"msbuildProject": "../../../src/MyTested.AspNetCore.Mvc.Models/MyTested.AspNetCore.Mvc.Models.xproj"
13879+
},
1380813880
"MyTested.AspNetCore.Mvc.ModelState/1.0.0-preview-final": {
1380913881
"type": "project",
1381013882
"path": "../../../src/MyTested.AspNetCore.Mvc.ModelState/project.json",

samples/NoStartup/NoStartup.Test/project.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"dotnet-test-mstest": "1.1.1-*",
1414
"MyTested.AspNetCore.Mvc.Controllers": "1.0.0-*",
1515
"MyTested.AspNetCore.Mvc.DependencyInjection": "1.0.0-*",
16+
"MyTested.AspNetCore.Mvc.Models": "1.0.0-*",
1617
"MyTested.AspNetCore.Mvc.Routing": "1.0.0-*",
1718
"MyTested.AspNetCore.Mvc.ViewComponents": "1.0.0-*",
1819
"NoStartup.Controllers": "*",

samples/NoStartup/NoStartup.Test/project.lock.json

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3437,6 +3437,19 @@
34373437
"netstandard1.4/MyTested.AspNetCore.Mvc.Licensing.dll": {}
34383438
}
34393439
},
3440+
"MyTested.AspNetCore.Mvc.Models/1.0.0-preview-final": {
3441+
"type": "project",
3442+
"framework": ".NETStandard,Version=v1.6",
3443+
"dependencies": {
3444+
"MyTested.AspNetCore.Mvc.Abstractions": "1.0.0"
3445+
},
3446+
"compile": {
3447+
"netstandard1.6/MyTested.AspNetCore.Mvc.Models.dll": {}
3448+
},
3449+
"runtime": {
3450+
"netstandard1.6/MyTested.AspNetCore.Mvc.Models.dll": {}
3451+
}
3452+
},
34403453
"MyTested.AspNetCore.Mvc.Routing/1.0.0-preview-final": {
34413454
"type": "project",
34423455
"framework": ".NETStandard,Version=v1.6",
@@ -5023,6 +5036,19 @@
50235036
"net451/MyTested.AspNetCore.Mvc.Licensing.dll": {}
50245037
}
50255038
},
5039+
"MyTested.AspNetCore.Mvc.Models/1.0.0-preview-final": {
5040+
"type": "project",
5041+
"framework": ".NETFramework,Version=v4.5.1",
5042+
"dependencies": {
5043+
"MyTested.AspNetCore.Mvc.Abstractions": "1.0.0"
5044+
},
5045+
"compile": {
5046+
"net451/MyTested.AspNetCore.Mvc.Models.dll": {}
5047+
},
5048+
"runtime": {
5049+
"net451/MyTested.AspNetCore.Mvc.Models.dll": {}
5050+
}
5051+
},
50265052
"MyTested.AspNetCore.Mvc.Routing/1.0.0-preview-final": {
50275053
"type": "project",
50285054
"framework": ".NETFramework,Version=v4.5.1",
@@ -10853,6 +10879,11 @@
1085310879
"path": "../../../src/MyTested.AspNetCore.Mvc.Licensing/project.json",
1085410880
"msbuildProject": "../../../src/MyTested.AspNetCore.Mvc.Licensing/MyTested.AspNetCore.Mvc.Licensing.xproj"
1085510881
},
10882+
"MyTested.AspNetCore.Mvc.Models/1.0.0-preview-final": {
10883+
"type": "project",
10884+
"path": "../../../src/MyTested.AspNetCore.Mvc.Models/project.json",
10885+
"msbuildProject": "../../../src/MyTested.AspNetCore.Mvc.Models/MyTested.AspNetCore.Mvc.Models.xproj"
10886+
},
1085610887
"MyTested.AspNetCore.Mvc.Routing/1.0.0-preview-final": {
1085710888
"type": "project",
1085810889
"path": "../../../src/MyTested.AspNetCore.Mvc.Routing/project.json",
@@ -10884,6 +10915,7 @@
1088410915
"MSTest.TestFramework >= 1.0.1-*",
1088510916
"MyTested.AspNetCore.Mvc.Controllers >= 1.0.0-*",
1088610917
"MyTested.AspNetCore.Mvc.DependencyInjection >= 1.0.0-*",
10918+
"MyTested.AspNetCore.Mvc.Models >= 1.0.0-*",
1088710919
"MyTested.AspNetCore.Mvc.Routing >= 1.0.0-*",
1088810920
"MyTested.AspNetCore.Mvc.ViewComponents >= 1.0.0-*",
1088910921
"NoStartup.Components",

src/MyTested.AspNetCore.Mvc.Abstractions/Builders/Base/BaseTestBuilderWithResponseModel.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ public virtual TModel GetActualModel<TModel>()
4343

4444
public abstract object GetActualModel();
4545

46-
public abstract Type GetReturnType();
46+
public abstract Type GetModelReturnType();
47+
48+
public abstract void ValidateNoModel();
4749
}
4850
}

src/MyTested.AspNetCore.Mvc.Abstractions/Utilities/Validators/InvocationResultValidator.cs

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,63 +11,64 @@ public static void ValidateInvocationResultType(
1111
ComponentTestContext testContext,
1212
Type typeOfExpectedReturnValue,
1313
bool canBeAssignable = false,
14-
bool allowDifferentGenericTypeDefinitions = false)
14+
bool allowDifferentGenericTypeDefinitions = false,
15+
Type typeOfActualReturnValue = null)
1516
{
1617
InvocationValidator.CheckForException(testContext.CaughtException, testContext.ExceptionMessagePrefix);
1718

1819
var typeInfoOfExpectedReturnValue = typeOfExpectedReturnValue.GetTypeInfo();
1920

20-
var typeOfActionResult = testContext.MethodResult?.GetType();
21-
if (typeOfActionResult == null)
21+
var typeOfResult = typeOfActualReturnValue ?? testContext.MethodResult?.GetType();
22+
if (typeOfResult == null)
2223
{
2324
ThrowNewInvocationResultAssertionException(
2425
testContext,
2526
typeOfExpectedReturnValue.ToFriendlyTypeName(),
2627
"null");
2728
}
2829

29-
var typeInfoOfActionResult = typeOfActionResult.GetTypeInfo();
30+
var typeInfoOfResult = typeOfResult.GetTypeInfo();
3031

31-
var isAssignableCheck = canBeAssignable && Reflection.AreNotAssignable(typeOfExpectedReturnValue, typeOfActionResult);
32+
var isAssignableCheck = canBeAssignable && Reflection.AreNotAssignable(typeOfExpectedReturnValue, typeOfResult);
3233
if (isAssignableCheck && allowDifferentGenericTypeDefinitions
3334
&& Reflection.IsGeneric(typeOfExpectedReturnValue) && Reflection.IsGenericTypeDefinition(typeOfExpectedReturnValue))
3435
{
35-
isAssignableCheck = Reflection.AreAssignableByGeneric(typeOfExpectedReturnValue, typeOfActionResult);
36+
isAssignableCheck = Reflection.AreAssignableByGeneric(typeOfExpectedReturnValue, typeOfResult);
3637

37-
if (!isAssignableCheck && !typeInfoOfActionResult.IsGenericType)
38+
if (!isAssignableCheck && !typeInfoOfResult.IsGenericType)
3839
{
3940
isAssignableCheck = true;
4041
}
4142
else
4243
{
4344
isAssignableCheck =
44-
!Reflection.ContainsGenericTypeDefinitionInterface(typeOfExpectedReturnValue, typeOfActionResult);
45+
!Reflection.ContainsGenericTypeDefinitionInterface(typeOfExpectedReturnValue, typeOfResult);
4546
}
4647
}
4748

48-
var strictlyEqualCheck = !canBeAssignable && Reflection.AreDifferentTypes(typeOfExpectedReturnValue, typeOfActionResult);
49+
var strictlyEqualCheck = !canBeAssignable && Reflection.AreDifferentTypes(typeOfExpectedReturnValue, typeOfResult);
4950

5051
var invalid = isAssignableCheck || strictlyEqualCheck;
51-
if (invalid && typeInfoOfExpectedReturnValue.IsGenericTypeDefinition && typeInfoOfActionResult.IsGenericType)
52+
if (invalid && typeInfoOfExpectedReturnValue.IsGenericTypeDefinition && typeInfoOfResult.IsGenericType)
5253
{
53-
var actionResultGenericDefinition = typeInfoOfActionResult.GetGenericTypeDefinition();
54+
var actionResultGenericDefinition = typeInfoOfResult.GetGenericTypeDefinition();
5455
if (actionResultGenericDefinition == typeOfExpectedReturnValue)
5556
{
5657
invalid = false;
5758
}
5859
}
5960

60-
if (invalid && typeInfoOfExpectedReturnValue.IsGenericType && typeInfoOfActionResult.IsGenericType)
61+
if (invalid && typeInfoOfExpectedReturnValue.IsGenericType && typeInfoOfResult.IsGenericType)
6162
{
62-
invalid = !Reflection.AreAssignableByGeneric(typeOfExpectedReturnValue, typeOfActionResult);
63+
invalid = !Reflection.AreAssignableByGeneric(typeOfExpectedReturnValue, typeOfResult);
6364
}
6465

6566
if (invalid)
6667
{
6768
ThrowNewInvocationResultAssertionException(
6869
testContext,
6970
typeOfExpectedReturnValue.ToFriendlyTypeName(),
70-
typeOfActionResult.ToFriendlyTypeName());
71+
typeOfResult.ToFriendlyTypeName());
7172
}
7273
}
7374

src/MyTested.AspNetCore.Mvc.Controllers/Builders/ActionResults/BadRequest/BadRequestTestBuilder.cs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,20 +35,6 @@ public BadRequestTestBuilder(ControllerTestContext testContext)
3535
this.OfTypeErrorMessageFormat = OfTypeErrorMessage;
3636
}
3737

38-
/// <inheritdoc />
39-
public IAndBadRequestTestBuilder WithNoError()
40-
{
41-
var actualResult = this.TestContext.MethodResult as BadRequestResult;
42-
if (actualResult == null)
43-
{
44-
throw new ResponseModelAssertionException(string.Format(
45-
"{0} bad request result to not have error message, but in fact such was found.",
46-
this.TestContext.ExceptionMessagePrefix));
47-
}
48-
49-
return this;
50-
}
51-
5238
/// <inheritdoc />
5339
public IAndBadRequestTestBuilder WithStatusCode(int statusCode)
5440
{
@@ -177,6 +163,20 @@ public IAndBadRequestTestBuilder WithErrorMessage(Func<string, bool> predicate)
177163
return this;
178164
}
179165

166+
/// <inheritdoc />
167+
public IAndBadRequestTestBuilder WithNoError()
168+
{
169+
var actualResult = this.TestContext.MethodResult as BadRequestResult;
170+
if (actualResult == null)
171+
{
172+
throw new ResponseModelAssertionException(string.Format(
173+
"{0} bad request result to not have error message, but in fact such was found.",
174+
this.TestContext.ExceptionMessagePrefix));
175+
}
176+
177+
return this;
178+
}
179+
180180
/// <inheritdoc />
181181
public IBadRequestTestBuilder AndAlso() => this;
182182

0 commit comments

Comments
 (0)