77 using Builders . Base ;
88 using Builders . Contracts . Results ;
99 using Builders . Results ;
10- using Exceptions ;
1110 using Internal . TestContexts ;
1211 using Microsoft . AspNetCore . Mvc ;
12+ using Utilities ;
1313 using Utilities . Validators ;
1414
1515 /// <summary>
1616 /// Contains model extension methods for <see cref="IBaseShouldReturnTestBuilder"/>.
1717 /// </summary>
1818 public static class BaseShouldReturnTestBuilderExtensions
1919 {
20+ private static readonly Type ActionResultGenericType = typeof ( ActionResult < > ) ;
21+ private static readonly Type ObjectResultType = typeof ( ObjectResult ) ;
22+
2023 /// <summary>
2124 /// Tests whether the result is of the provided type.
2225 /// </summary>
@@ -45,7 +48,7 @@ public static IAndTestBuilder ResultOfType<TResult>(
4548 var actualBuilder = ( BaseTestBuilderWithActionContext ) builder ;
4649
4750 InvocationResultValidator . ValidateInvocationResultType (
48- actualBuilder . TestContext ,
51+ ConvertMethodResult ( actualBuilder . TestContext ) ,
4952 resultType ,
5053 canBeAssignable : true ,
5154 allowDifferentGenericTypeDefinitions : true ) ;
@@ -79,7 +82,7 @@ public static IAndTestBuilder ResultOfType<TResult>(
7982 var actualBuilder = ( BaseTestBuilderWithActionContext ) builder ;
8083
8184 InvocationResultValidator . ValidateInvocationResultType < TResult > (
82- actualBuilder . TestContext ,
85+ ConvertMethodResult ( actualBuilder . TestContext ) ,
8386 canBeAssignable : true ) ;
8487
8588 resultTestBuilder ? . Invoke ( new ResultDetailsTestBuilder < TResult > ( actualBuilder . TestContext ) ) ;
@@ -99,7 +102,9 @@ public static IAndTestBuilder Result(
99102 {
100103 var actualBuilder = ( BaseTestBuilderWithActionContext ) builder ;
101104
102- resultTestBuilder ? . Invoke ( new ResultDetailsTestBuilder ( actualBuilder . TestContext ) ) ;
105+ var convertedTestContext = ConvertMethodResult ( actualBuilder . TestContext ) ;
106+
107+ resultTestBuilder ? . Invoke ( new ResultDetailsTestBuilder ( convertedTestContext ) ) ;
103108
104109 return new AndTestBuilder ( actualBuilder . TestContext ) ;
105110 }
@@ -120,20 +125,18 @@ public static IAndTestBuilder Result<TResult>(
120125
121126 private static ActionTestContext ConvertMethodResult ( ActionTestContext testContext )
122127 {
123- var methodResult = testContext . MethodResult ;
128+ var methodReturnType = testContext . Method . ReturnType ;
124129
125- if ( methodResult is IActionResult )
130+ if ( Reflection . AreAssignableByGeneric ( ActionResultGenericType , methodReturnType ) )
126131 {
127- if ( methodResult is ObjectResult objectResult )
128- {
129- testContext . MethodResult = objectResult . Value ;
130- }
131- else
132+ var methodResultType = testContext . MethodResult . GetType ( ) ;
133+
134+ if ( Reflection . AreSameTypes ( ObjectResultType , methodResultType ) )
132135 {
133- throw new InvocationResultAssertionException ( "Test" ) ;
134- }
136+ var objectResult = testContext . MethodResult as ObjectResult ;
135137
136- return testContext ;
138+ testContext . MethodResult = objectResult ? . Value ;
139+ }
137140 }
138141
139142 return testContext ;
0 commit comments