Skip to content

Commit 6dbdb6c

Browse files
committed
Added WithAuthenticatedUser to the HttpRequestBuilder
1 parent f80837d commit 6dbdb6c

File tree

10 files changed

+58
-20
lines changed

10 files changed

+58
-20
lines changed

samples/MusicStore/MusicStore.Test/Controllers/ShoppingCartControllerTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
namespace MusicStore.Test.Controllers
22
{
33
using System.Linq;
4-
using System.Threading.Tasks;
4+
using System.Threading;
55
using Models;
66
using MusicStore.Controllers;
77
using MyTested.AspNetCore.Mvc;
88
using ViewModels;
99
using Xunit;
10-
using System.Threading;
10+
1111
public class ShoppingCartControllerTest
1212
{
1313
[Fact]

samples/MusicStore/MusicStore.Test/Routes/CheckoutRouteTest.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ public void GetAddressAndPaymentShouldBeRoutedCorrectly()
1313
{
1414
MyMvc
1515
.Routes()
16-
.ShouldMap("/Checkout/AddressAndPayment")
16+
.ShouldMap(request => request
17+
.WithLocation("/Checkout/AddressAndPayment")
18+
.WithAuthenticatedUser())
1719
.To<CheckoutController>(c => c.AddressAndPayment());
1820
}
1921

@@ -47,6 +49,7 @@ public void PostAddressAndPaymentShouldBeRoutedCorrectly()
4749
Phone = phone,
4850
Email = email,
4951
})
52+
.WithAuthenticatedUser()
5053
.WithAntiForgeryToken())
5154
.To<CheckoutController>(c => c.AddressAndPayment(
5255
With.Any<MusicStoreContext>(),
@@ -72,7 +75,9 @@ public void GetCompleteShouldBeRoutedCorrectly()
7275
{
7376
MyMvc
7477
.Routes()
75-
.ShouldMap("/Checkout/Complete/1")
78+
.ShouldMap(request => request
79+
.WithLocation("/Checkout/Complete/1")
80+
.WithAuthenticatedUser())
7681
.To<CheckoutController>(c => c.Complete(With.Any<MusicStoreContext>(), 1));
7782
}
7883
}

samples/MusicStore/MusicStore.Test/TestStartup.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@
22
{
33
using Microsoft.AspNetCore.Hosting;
44
using Microsoft.AspNetCore.Identity;
5-
using Microsoft.EntityFrameworkCore;
6-
using Microsoft.EntityFrameworkCore.Infrastructure;
7-
using Microsoft.EntityFrameworkCore.Infrastructure.Internal;
8-
using Microsoft.EntityFrameworkCore.Storage.Internal;
95
using Microsoft.Extensions.DependencyInjection;
106
using Mocks;
117
using Models;

src/MyTested.AspNetCore.Mvc.Core/Builders/Contracts/Http/IHttpRequestBuilder.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
using Microsoft.AspNetCore.Http;
88
using Microsoft.Extensions.Primitives;
99
using Uris;
10-
10+
using Authentication;
1111
/// <summary>
1212
/// Used for building <see cref="HttpRequest"/>.
1313
/// </summary>
@@ -456,5 +456,18 @@ public interface IHttpRequestBuilder
456456
/// <param name="uriBuilder">Builder for the URI.</param>
457457
/// <returns>The same <see cref="IAndHttpRequestBuilder"/>.</returns>
458458
IAndHttpRequestBuilder WithLocation(Action<IUriTestBuilder> uriBuilder);
459+
460+
/// <summary>
461+
/// Sets default authenticated <see cref="HttpContext.User"/> to the built request with "TestId" identifier and "TestUser" username.
462+
/// </summary>
463+
/// <returns>The same <see cref="IAndHttpRequestBuilder"/>.</returns>
464+
IAndHttpRequestBuilder WithAuthenticatedUser();
465+
466+
/// <summary>
467+
/// Sets custom authenticated <see cref="HttpContext.User"/> to the built request using the provided user builder.
468+
/// </summary>
469+
/// <param name="userBuilder">Action setting the <see cref="HttpContext.User"/> by using <see cref="IClaimsPrincipalBuilder"/>.</param>
470+
/// <returns>The same <see cref="IAndHttpRequestBuilder"/>.</returns>
471+
IAndHttpRequestBuilder WithAuthenticatedUser(Action<IClaimsPrincipalBuilder> userBuilder);
459472
}
460473
}

src/MyTested.AspNetCore.Mvc.Core/Builders/Http/HttpRequestBuilder.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
using System.IO;
66
using System.Linq;
77
using System.Text;
8+
using Authentication;
9+
using Contracts.Authentication;
810
using Contracts.Http;
911
using Contracts.Uris;
1012
using Exceptions;
@@ -425,6 +427,22 @@ public IAndHttpRequestBuilder WithLocation(Action<IUriTestBuilder> uriBuilder)
425427
return this.WithLocation(uri);
426428
}
427429

430+
/// <inheritdoc />
431+
public IAndHttpRequestBuilder WithAuthenticatedUser()
432+
{
433+
this.HttpContext.User = ClaimsPrincipalBuilder.DefaultAuthenticated;
434+
return this;
435+
}
436+
437+
/// <inheritdoc />
438+
public IAndHttpRequestBuilder WithAuthenticatedUser(Action<IClaimsPrincipalBuilder> userBuilder)
439+
{
440+
var newUserBuilder = new ClaimsPrincipalBuilder();
441+
userBuilder(newUserBuilder);
442+
this.HttpContext.User = newUserBuilder.GetClaimsPrincipal();
443+
return this;
444+
}
445+
428446
/// <inheritdoc />
429447
public IHttpRequestBuilder AndAlso() => this;
430448

src/MyTested.AspNetCore.Mvc.Core/IControllerBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ IAndControllerBuilder<TController> WithServiceFor<TService>(TService service)
148148
IAndControllerBuilder<TController> WithAuthenticatedUser();
149149

150150
/// <summary>
151-
/// Sets custom authenticated <see cref="HttpContext.User"/> using the provided user builder.
151+
/// Sets custom authenticated <see cref="HttpContext.User"/> to the built controller using the provided user builder.
152152
/// </summary>
153153
/// <param name="userBuilder">Action setting the <see cref="HttpContext.User"/> by using <see cref="IClaimsPrincipalBuilder"/>.</param>
154154
/// <returns>The same <see cref="IControllerBuilder{TController}"/>.</returns>

src/MyTested.AspNetCore.Mvc.Core/Internal/Routes/InternalRouteResolver.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public static ResolvedRouteContext Resolve(IServiceProvider services, IRouter ro
8080

8181
if (modelBindingActionInvoker.BoundActionArguments == null)
8282
{
83-
return new ResolvedRouteContext("action could not be invoked because of the declared filters");
83+
return new ResolvedRouteContext("action could not be invoked because of the declared filters. You must set the request properties so that they will pass through the pipeline");
8484
}
8585

8686
return new ResolvedRouteContext(

src/MyTested.AspNetCore.Mvc.Core/Internal/Http/MockedAuthenticationHandler.cs renamed to src/MyTested.AspNetCore.Mvc.Core/Internal/Routes/RouteAuthenticationHandler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
namespace MyTested.AspNetCore.Mvc.Internal.Http
1+
namespace MyTested.AspNetCore.Mvc.Internal.Routes
22
{
33
using System.Collections.Generic;
44
using System.Threading.Tasks;
55
using Builders.Authentication;
66
using Microsoft.AspNetCore.Http.Features.Authentication;
77
using Microsoft.AspNetCore.Mvc.Internal;
88

9-
public class MockedAuthenticationHandler : IAuthenticationHandler
9+
public class RouteAuthenticationHandler : IAuthenticationHandler
1010
{
1111
public Task AuthenticateAsync(AuthenticateContext context)
1212
{

src/MyTested.AspNetCore.Mvc.Core/Internal/TestContexts/RouteTestContext.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
namespace MyTested.AspNetCore.Mvc.Internal.TestContexts
22
{
33
using System;
4-
using Builders.Authentication;
5-
using Http;
64
using Microsoft.AspNetCore.Routing;
75
using Microsoft.AspNetCore.Http.Features.Authentication;
6+
using Routes;
87

98
public class RouteTestContext : HttpTestContext
109
{
@@ -40,11 +39,9 @@ private void SetAuthentication()
4039
this.HttpContext.Features.Get<IHttpAuthenticationFeature>()
4140
?? new HttpAuthenticationFeature();
4241

43-
httpAuthenticationFeature.Handler = new MockedAuthenticationHandler();
42+
httpAuthenticationFeature.Handler = new RouteAuthenticationHandler();
4443

4544
this.HttpContext.Features.Set(httpAuthenticationFeature);
46-
47-
this.HttpContext.User = ClaimsPrincipalBuilder.DefaultAuthenticated;
4845
}
4946
}
5047
}

src/MyTested.AspNetCore.Mvc.ViewFeatures/HttpRequestBuilderViewFeaturesExtensions.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,27 @@
44
using Builders.Http;
55
using Microsoft.AspNetCore.Antiforgery;
66
using Microsoft.AspNetCore.Antiforgery.Internal;
7+
using Microsoft.Extensions.DependencyInjection;
78
using Microsoft.Extensions.Options;
89

10+
/// <summary>
11+
/// Contains <see cref="IAntiforgery"/> extension methods for <see cref="IHttpRequestBuilder"/>.
12+
/// </summary>
913
public static class HttpRequestBuilderViewFeaturesExtensions
1014
{
15+
/// <summary>
16+
/// Adds anti-forgery token to the <see cref="Microsoft.AspNetCore.Http.HttpRequest"/>.
17+
/// </summary>
18+
/// <param name="httpRequestBuilder">Instance of <see cref="IHttpRequestBuilder"/> type.</param>
19+
/// <returns>The same <see cref="IHttpRequestBuilder"/>.</returns>
1120
public static IAndHttpRequestBuilder WithAntiForgeryToken(this IHttpRequestBuilder httpRequestBuilder)
1221
{
1322
var actualHttpRequestBuilder = (HttpRequestBuilder)httpRequestBuilder;
1423

1524
var httpContext = actualHttpRequestBuilder.HttpContext;
1625

17-
var antiForgery = From.Services<IAntiforgery>();
18-
var antiForgeryOptions = From.Services<IOptions<AntiforgeryOptions>>().Value;
26+
var antiForgery = httpContext.RequestServices.GetRequiredService<IAntiforgery>();
27+
var antiForgeryOptions = httpContext.RequestServices.GetRequiredService<IOptions<AntiforgeryOptions>>().Value;
1928

2029
var tokens = antiForgery.GetTokens(httpContext);
2130

0 commit comments

Comments
 (0)