Skip to content

Commit 27cd04e

Browse files
committed
ShouldPassForThe now recognizes the model objects earlier in the assertion chain (#359)
1 parent ce02414 commit 27cd04e

22 files changed

Lines changed: 220 additions & 123 deletions

File tree

src/MyTested.AspNetCore.Mvc.Controllers.Views/Builders/ActionResults/View/BaseTestBuilderWithViewFeatureResult.cs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Exceptions;
99
using Internal;
1010
using Internal.Contracts.ActionResults;
11+
using Utilities.Extensions;
1112

1213
/// <summary>
1314
/// Base class for all test builders with view features.
@@ -48,13 +49,7 @@ protected BaseTestBuilderWithViewFeatureResult(
4849
public abstract TViewFeatureResultTestBuilder ResultTestBuilder { get; }
4950

5051
public override object GetActualModel()
51-
=> this.ActionResult switch
52-
{
53-
ViewResult viewResult => viewResult.Model,
54-
PartialViewResult partialViewResult => partialViewResult.ViewData?.Model,
55-
ViewComponentResult viewComponentResult => viewComponentResult.ViewData?.Model,
56-
_ => this.ActionResult
57-
};
52+
=> this.ActionResult.AsDynamic().Model;
5853

5954
public override void ValidateNoModel()
6055
{

src/MyTested.AspNetCore.Mvc.Controllers/Builders/Actions/ShouldReturn/ShouldReturnStatusCode.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@
55
using And;
66
using Contracts.ActionResults.StatusCode;
77
using Contracts.And;
8-
using Exceptions;
98
using Microsoft.AspNetCore.Mvc;
10-
using Utilities.Extensions;
119
using Utilities.Validators;
1210

1311
/// <content>

src/MyTested.AspNetCore.Mvc.Controllers/Plugins/ControllersTestPlugin.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System;
44
using Microsoft.Extensions.DependencyInjection;
55
using Internal.TestContexts;
6+
using Microsoft.AspNetCore.Mvc;
67
using Utilities;
78

89
public class ControllersTestPlugin : BaseTestPlugin, IDefaultRegistrationPlugin, IServiceRegistrationPlugin, IShouldPassForPlugin
@@ -22,7 +23,10 @@ public object TryGetValue(Type type, ComponentTestContext testContext)
2223
=> Reflection.AreAssignable(this.controllerAttributesType, type) // ControllerAttributes
2324
? new ControllerAttributes(testContext.ComponentAttributes)
2425
: Reflection.AreAssignable(this.actionAttributesType, type) // ActionAttributes
25-
? (object)new ActionAttributes(testContext.MethodAttributes)
26+
? new ActionAttributes(testContext.MethodAttributes)
27+
: testContext.MethodResult is ObjectResult objectResult // ObjectResult Model
28+
&& Reflection.AreAssignable(type, objectResult.Value?.GetType())
29+
? objectResult.Value
2630
: null;
2731
}
2832
}

test/MyTested.AspNetCore.Mvc.Controllers.ActionResults.Test/BuildersTests/ActionResultsTests/BadRequestTests/BadRequestTestBuilderTests.cs

Lines changed: 43 additions & 43 deletions
Large diffs are not rendered by default.

test/MyTested.AspNetCore.Mvc.Controllers.ActionResults.Test/BuildersTests/ActionResultsTests/NotFoundTests/NotFoundTestBuilderTests.cs

Lines changed: 43 additions & 43 deletions
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
namespace MyTested.AspNetCore.Mvc.Test.BuildersTests.ActionResultsTests.BadRequestTests
22
{
3+
using System.Collections.Generic;
34
using Microsoft.AspNetCore.Mvc;
45
using Setups.Controllers;
6+
using Setups.Models;
57
using Xunit;
68

79
public class BadRequestTestBuilderTests
810
{
911
[Fact]
10-
public void AndProvideTheActionResultShouldWorkCorrectly()
12+
public void ShouldPassForTheShouldWorkCorrectlyWithActionResult()
1113
{
1214
MyController<MvcController>
1315
.Instance()
14-
.Calling(c => c.FullHttpBadRequestAction())
16+
.Calling(c => c.FullBadRequestAction())
1517
.ShouldReturn()
1618
.BadRequest()
1719
.AndAlso()
@@ -21,5 +23,17 @@ public void AndProvideTheActionResultShouldWorkCorrectly()
2123
Assert.IsAssignableFrom<BadRequestObjectResult>(actionResult);
2224
});
2325
}
26+
27+
[Fact]
28+
public void ShouldPassForTheShouldWorkCorrectlyWithModel()
29+
{
30+
MyController<MvcController>
31+
.Instance()
32+
.Calling(c => c.FullBadRequestAction())
33+
.ShouldReturn()
34+
.BadRequest()
35+
.AndAlso()
36+
.ShouldPassForThe<ICollection<ResponseModel>>(model => model.Count == 2);
37+
}
2438
}
2539
}

test/MyTested.AspNetCore.Mvc.Controllers.Test/BuildersTests/ActionResultsTests/ChallengeTests/ChallengeTestBuilderTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
public class ChallengeTestBuilderTests
88
{
99
[Fact]
10-
public void AndProvideTheActionResultShouldWorkCorrectly()
10+
public void ShouldPassForTheShouldWorkCorrectly()
1111
{
1212
MyController<MvcController>
1313
.Instance()

test/MyTested.AspNetCore.Mvc.Controllers.Test/BuildersTests/ActionResultsTests/ContentTests/ContentTestBuilderTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
public class ContentTestBuilderTests
88
{
99
[Fact]
10-
public void AndProvideTheActionResultShouldWorkCorrectly()
10+
public void ShouldPassForTheShouldWorkCorrectly()
1111
{
1212
MyController<MvcController>
1313
.Instance()

test/MyTested.AspNetCore.Mvc.Controllers.Test/BuildersTests/ActionResultsTests/CreatedTests/CreatedTestBuilderTests.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
namespace MyTested.AspNetCore.Mvc.Test.BuildersTests.ActionResultsTests.CreatedTests
22
{
3+
using System.Collections.Generic;
34
using Microsoft.AspNetCore.Mvc;
45
using Setups.Controllers;
6+
using Setups.Models;
57
using Xunit;
68

79
public class CreatedTestBuilderTests
810
{
911
[Fact]
10-
public void AndProvideTheActionResultShouldWorkCorrectly()
12+
public void ShouldPassForTheShouldWorkCorrectlyWithActionResult()
1113
{
1214
MyController<MvcController>
1315
.Instance()
@@ -20,5 +22,16 @@ public void AndProvideTheActionResultShouldWorkCorrectly()
2022
Assert.IsAssignableFrom<CreatedResult>(actionResult);
2123
});
2224
}
25+
26+
[Fact]
27+
public void ShouldPassForTheShouldWorkCorrectlyWithModel()
28+
{
29+
MyController<MvcController>
30+
.Instance()
31+
.Calling(c => c.CreatedAction())
32+
.ShouldReturn()
33+
.Created()
34+
.ShouldPassForThe<ICollection<ResponseModel>>(model => model.Count == 2);
35+
}
2336
}
2437
}

test/MyTested.AspNetCore.Mvc.Controllers.Test/BuildersTests/ActionResultsTests/FileTests/FileTestBuilderTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
public class FileTestBuilderTests
88
{
99
[Fact]
10-
public void AndProvideTheActionResultShouldWorkCorrectly()
10+
public void ShouldPassForTheShouldWorkCorrectly()
1111
{
1212
MyController<MvcController>
1313
.Instance()

0 commit comments

Comments
 (0)