Skip to content

Commit 53a4899

Browse files
committed
#283 Sets comments where such are missing.
- Fixing ignored test, added one more.
1 parent 6eb3e51 commit 53a4899

File tree

7 files changed

+139
-13
lines changed

7 files changed

+139
-13
lines changed

src/MyTested.AspNetCore.Mvc.Abstractions/Builders/Authentication/BaseClaimsPrincipalUserBuilder.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
using System.Linq;
66
using System.Security.Claims;
77

8+
/// <summary>
9+
/// Base class for creating mocked authenticated <see cref="ClaimsPrincipal"/>.
10+
/// </summary>
811
public class BaseClaimsPrincipalUserBuilder : BaseUserBuilder
912
{
1013
private readonly ICollection<ClaimsIdentity> _identities;
@@ -15,6 +18,10 @@ public class BaseClaimsPrincipalUserBuilder : BaseUserBuilder
1518
public BaseClaimsPrincipalUserBuilder()
1619
=> this._identities = new List<ClaimsIdentity>();
1720

21+
/// <summary>
22+
/// Returns the principle based on provided identities and claims.
23+
/// </summary>
24+
/// <returns>This <see cref="ClaimsPrincipal"/>.</returns>
1825
public ClaimsPrincipal GetClaimsPrincipal()
1926
{
2027
var claimIdentities = this._identities.Reverse().ToList();
@@ -25,6 +32,10 @@ public ClaimsPrincipal GetClaimsPrincipal()
2532
return claimsPrincipal;
2633
}
2734

35+
/// <summary>
36+
/// Returns the principle based on provided claims only.
37+
/// </summary>
38+
/// <returns>This <see cref="ClaimsPrincipal"/>.</returns>
2839
public ClaimsPrincipal GetClaimsPrincipalBasedOnClaimsOnly()
2940
{
3041
var claimsPrincipal = new ClaimsPrincipal(this.GetAuthenticatedClaimsIdentity());

src/MyTested.AspNetCore.Mvc.Abstractions/Builders/Authentication/BaseUserBuilder.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,12 +142,21 @@ protected void AddRole(string role)
142142
protected void AddRoles(IEnumerable<string> roles)
143143
=> roles.ForEach(this.AddRole);
144144

145+
/// <summary>
146+
/// Removes provided <see cref="Claim"/> from the list of claims.
147+
/// </summary>
148+
/// <param name="claim">Claim to be removed.</param>
145149
protected void RemoveClaim(Claim claim)
146150
{
147151
if (this.claims.Contains(claim))
148152
this.claims.Remove(claim);
149153
}
150154

155+
/// <summary>
156+
/// Removes provided claim by its type and value from the list of claims.
157+
/// </summary>
158+
/// <param name="type">Claim's type.</param>
159+
/// <param name="value">Claim's value.</param>
151160
protected void RemoveClaim(string type, string value)
152161
{
153162
var claimsToRemove =
@@ -156,9 +165,17 @@ protected void RemoveClaim(string type, string value)
156165
claimsToRemove.ForEach(claim => this.claims.Remove(claim));
157166
}
158167

168+
/// <summary>
169+
/// Remove claim by providing its role.
170+
/// </summary>
171+
/// <param name="role">Claim's role.</param>
159172
protected void RemoveRole(string role)
160173
=> this.RemoveClaim(this.roleType, role);
161174

175+
/// <summary>
176+
/// Remove claim by providing its username.
177+
/// </summary>
178+
/// <param name="username">Claim's username.</param>
162179
protected void RemoveUsername(string username)
163180
=> this.RemoveClaim(this.nameType, username);
164181

src/MyTested.AspNetCore.Mvc.Abstractions/Builders/Authentication/WithoutClaimsPrincipalBuilder.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,41 +3,52 @@
33
using System.Security.Claims;
44
using MyTested.AspNetCore.Mvc.Builders.Contracts.Authentication;
55

6+
/// <summary>
7+
/// Used for building mocked <see cref="ClaimsPrincipal"/>.
8+
/// </summary>
69
public class WithoutClaimsPrincipalBuilder : BaseClaimsPrincipalUserBuilder, IAndWithoutClaimsPrincipalBuilder
710
{
11+
/// <summary>
12+
/// Initializes a new instance of the <see cref="WithoutClaimsPrincipalBuilder"/> class.
13+
/// </summary>
814
public WithoutClaimsPrincipalBuilder(ClaimsPrincipal principal)
915
{
1016
base.AddClaims(principal.Claims);
1117
}
1218

19+
/// <inheritdoc />
1320
public IAndWithoutClaimsPrincipalBuilder WithoutClaim(string type, string value)
1421
{
1522
base.RemoveClaim(type, value);
1623

1724
return this;
1825
}
1926

27+
/// <inheritdoc />
2028
public IAndWithoutClaimsPrincipalBuilder WithoutClaim(Claim claim)
2129
{
2230
base.RemoveClaim(claim);
2331

2432
return this;
2533
}
2634

35+
/// <inheritdoc />
2736
public IAndWithoutClaimsPrincipalBuilder WithoutRole(string role)
2837
{
2938
base.RemoveRole(role);
3039

3140
return this;
3241
}
3342

43+
/// <inheritdoc />
3444
public IAndWithoutClaimsPrincipalBuilder WithoutUsername(string username)
3545
{
3646
base.RemoveUsername(username);
3747

3848
return this;
3949
}
4050

51+
/// <inheritdoc />
4152
public IWithoutClaimsPrincipalBuilder AndAlso()
4253
=> this;
4354
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
namespace MyTested.AspNetCore.Mvc.Builders.Contracts.Authentication
22
{
3+
/// <summary>
4+
/// Used for adding AndAlso() method to the <see cref="System.Security.Claims.ClaimsPrincipal"/> builder.
5+
/// </summary>
36
public interface IAndWithoutClaimsPrincipalBuilder : IWithoutClaimsPrincipalBuilder
47
{
8+
/// <summary>
9+
/// AndAlso method for better readability when building <see cref="System.Security.Claims.ClaimsPrincipal"/>.
10+
/// </summary>
11+
/// <returns>The same <see cref="IAndWithoutClaimsPrincipalBuilder"/>.</returns>
512
IWithoutClaimsPrincipalBuilder AndAlso();
613
}
714
}

src/MyTested.AspNetCore.Mvc.Abstractions/Builders/Contracts/Authentication/IWithoutClaimsPrincipalBuilder.cs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,38 @@
22
{
33
using System.Security.Claims;
44

5+
/// <summary>
6+
/// Used for building mocked <see cref="ClaimsPrincipal"/>.
7+
/// </summary>
58
public interface IWithoutClaimsPrincipalBuilder
69
{
10+
/// <summary>
11+
/// Remove Claim with the provided role.
12+
/// </summary>
13+
/// <param name="role">The claim's role.</param>
14+
/// <returns>The same <see cref="IAndWithoutClaimsPrincipalBuilder"/>.</returns>
715
IAndWithoutClaimsPrincipalBuilder WithoutRole(string role);
8-
16+
17+
/// <summary>
18+
/// Remove Claim with the provided username.
19+
/// </summary>
20+
/// <param name="username">The claim's username.</param>
21+
/// <returns>The same <see cref="IAndWithoutClaimsPrincipalBuilder"/>.</returns>
922
IAndWithoutClaimsPrincipalBuilder WithoutUsername(string username);
1023

24+
/// <summary>
25+
/// Remove Claim with the provided type and value.
26+
/// </summary>
27+
/// <param name="type">The claim's type.</param>
28+
/// <param name="value">The claim's value.</param>
29+
/// <returns>The same <see cref="IAndWithoutClaimsPrincipalBuilder"/>.</returns>
1130
IAndWithoutClaimsPrincipalBuilder WithoutClaim(string type, string value);
1231

32+
/// <summary>
33+
/// Removes the provided claim.
34+
/// </summary>
35+
/// <param name="claim">The claim.</param>
36+
/// <returns>The same <see cref="IAndWithoutClaimsPrincipalBuilder"/>.</returns>
1337
IAndWithoutClaimsPrincipalBuilder WithoutClaim(Claim claim);
1438
}
1539
}

src/MyTested.AspNetCore.Mvc.Authentication/ComponentBuilderAuthenticationWithoutExtensions.cs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,60 @@
77
using MyTested.AspNetCore.Mvc.Builders.Contracts.Authentication;
88
using MyTested.AspNetCore.Mvc.Builders.Contracts.Base;
99

10+
/// <summary>
11+
/// Contains authentication extension methods for <see cref="IBaseTestBuilderWithComponentBuilder{TBuilder}"/>.
12+
/// </summary>
1013
public static class ComponentBuilderAuthenticationWithoutExtensions
1114
{
15+
/// <summary>
16+
/// Removes the <see cref="Claim"/> that have the provided claimType and value from <see cref="ClaimsPrincipal"/>
17+
/// </summary>
18+
/// <typeparam name="TBuilder">Class representing ASP.NET Core MVC test builder.</typeparam>
19+
/// <param name="builder">Instance of <see cref="IBaseTestBuilderWithComponentBuilder{TBuilder}"/> type.</param>
20+
/// <param name="claimType">The type of the claim that will be removed.</param>
21+
/// <param name="value">The value of the claim that will be removed.</param>
22+
/// <returns>The same component builder.</returns>
1223
public static TBuilder WithoutUser<TBuilder>(
1324
this IBaseTestBuilderWithComponentBuilder<TBuilder> builder,
1425
string claimType, string value)
1526
where TBuilder : IBaseTestBuilder
1627
=> builder.WithoutUser(user => user.WithoutClaim(claimType, value));
1728

29+
/// <summary>
30+
/// Removes the provided <see cref="Claim"/> from <see cref="ClaimsPrincipal"/>
31+
/// </summary>
32+
/// <typeparam name="TBuilder">Class representing ASP.NET Core MVC test builder.</typeparam>
33+
/// <param name="builder">Instance of <see cref="IBaseTestBuilderWithComponentBuilder{TBuilder}"/> type.</param>
34+
/// <param name="claim">The claim that will be removed.</param>
35+
/// <returns>The same component builder.</returns>
1836
public static TBuilder WithoutUser<TBuilder>(
1937
this IBaseTestBuilderWithComponentBuilder<TBuilder> builder,
2038
Claim claim)
2139
where TBuilder : IBaseTestBuilder
2240
=> builder.WithoutUser(user => user.WithoutClaim(claim));
2341

42+
/// <summary>
43+
/// Removes the <see cref="Claim"/> that have the provided role from <see cref="ClaimsPrincipal"/>
44+
/// </summary>
45+
/// <typeparam name="TBuilder">Class representing ASP.NET Core MVC test builder.</typeparam>
46+
/// <param name="builder">Instance of <see cref="IBaseTestBuilderWithComponentBuilder{TBuilder}"/> type.</param>
47+
/// <param name="role">The role of the claim that will be removed.</param>
48+
/// <returns>The same component builder.</returns>
2449
public static TBuilder WithoutUser<TBuilder>(
2550
this IBaseTestBuilderWithComponentBuilder<TBuilder> builder,
2651
string role)
2752
where TBuilder : IBaseTestBuilder
2853
=> builder.WithoutUser(user => user.WithoutRole(role));
2954

55+
/// <summary>
56+
/// Sets custom authenticated <see cref="Microsoft.AspNetCore.Http.HttpContext.User"/> to the
57+
/// built component using the provided user builder.
58+
/// </summary>
59+
/// <param name="builder">Instance of <see cref="IBaseTestBuilderWithComponentBuilder{TBuilder}"/> type.</param>
60+
/// <param name="userBuilder">
61+
/// Action setting the <see cref="Microsoft.AspNetCore.Http.HttpContext.User"/> by using <see cref="IWithoutClaimsPrincipalBuilder"/>.
62+
/// </param>
63+
/// <returns>The same component builder.</returns>
3064
public static TBuilder WithoutUser<TBuilder>(
3165
this IBaseTestBuilderWithComponentBuilder<TBuilder> builder,
3266
Action<IWithoutClaimsPrincipalBuilder> userBuilder)
@@ -41,6 +75,11 @@ public static TBuilder WithoutUser<TBuilder>(
4175
return actualBuilder.Builder;
4276
}
4377

78+
/// <summary>
79+
/// Sets the default authenticated claims principal with "TestId" identifier and "TestUser" username.
80+
/// </summary>
81+
/// <param name="builder">Instance of <see cref="IBaseTestBuilderWithComponentBuilder{TBuilder}"/> type.</param>
82+
/// <returns>The same component builder.</returns>
4483
public static TBuilder WithoutUser<TBuilder>(
4584
this IBaseTestBuilderWithComponentBuilder<TBuilder> builder)
4685
where TBuilder : IBaseTestBuilder

test/MyTested.AspNetCore.Mvc.Authentication.Test/BuildersTests/AuthenticationTests/ClaimsPrincipalBuilderTests.cs

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Setups.Controllers;
99
using Microsoft.AspNetCore.Mvc;
1010
using Xunit;
11+
using MyTested.AspNetCore.Mvc.Builders.Authentication;
1112

1213
public class ClaimsPrincipalBuilderTests
1314
{
@@ -287,7 +288,7 @@ public void WithoutClaimShouldRemoveTheCorrectClaimOnly()
287288
.Instance()
288289
.WithUser(user => user
289290
.WithNameType("CustomUsername"))
290-
.WithoutUser(user => user.WithoutClaim("CustomUsername", "TestUser"))
291+
.WithoutUser("CustomUsername", "TestUser")
291292
.ShouldPassForThe<MvcController>(controller =>
292293
{
293294
var claimToBeDeleted = controller.User.Claims.FirstOrDefault(c => c.Type == "CustomUsername");
@@ -296,22 +297,23 @@ public void WithoutClaimShouldRemoveTheCorrectClaimOnly()
296297
});
297298
}
298299

299-
[Fact(Skip = "Trying to find out why certain property is set.")]
300+
[Fact]
300301
public void WithoutClaimByProvidingClaimsDirectlyShouldRemoveTheCorrectClaimOnly()
301-
{
302-
var claim =
303-
new Claim("CustomUsername", "TestUser", "string", "issuer","OGissuer",
302+
{
303+
var claim =
304+
new Claim("CustomUsername", "TestUser", "string", "issuer", "OGissuer",
304305
new ClaimsIdentity("Password", "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name", "http://schemas.microsoft.com/ws/2008/06/identity/claims/role"));
305306

306-
MyController<MvcController>
307+
var builder = MyController<MvcController>
307308
.Instance()
308-
.WithUser(user => user.WithClaim(claim))
309-
.WithoutUser(user => user.WithoutClaim(claim))
309+
.WithUser(u => u.WithClaim(claim));
310+
311+
var claimToDelete = ((MyController<MvcController>)builder).HttpContext.User.Claims.First(x => x.Value.Equals("TestUser"));
312+
builder.WithoutUser(claimToDelete)
310313
.ShouldPassForThe<MvcController>(controller =>
311314
{
312-
var claimToBeDeleted = controller.User.Claims.FirstOrDefault(c => c.Type == claim.Type);
313-
314-
Assert.Null(claimToBeDeleted);
315+
var deletedClaim = controller.User.Claims.FirstOrDefault(c => c.Type.Equals("CustomUsername"));
316+
Assert.Null(deletedClaim);
315317
});
316318
}
317319

@@ -321,13 +323,28 @@ public void WithoutRoleShouldRemoveTheCorrectRole()
321323
MyController<MvcController>
322324
.Instance()
323325
.WithUser(user => user.InRole("randomRole"))
324-
.WithoutUser(user => user.WithoutRole("randomRole"))
326+
.WithoutUser("randomRole")
325327
.ShouldPassForThe<MvcController>(controller =>
326328
{
327329
var claimToBeDeleted = controller.User.Claims.FirstOrDefault(c => c.Type == "randomRole");
328330

329331
Assert.Null(claimToBeDeleted);
330332
});
331333
}
334+
335+
[Fact]
336+
public void WithoutUserShouldReturnTheDefaultSetUser()
337+
{
338+
MyController<MvcController>
339+
.Instance()
340+
.WithUser(user => user.InRole("randomRole"))
341+
.WithoutUser()
342+
.ShouldPassForThe<MvcController>(controller =>
343+
{
344+
var user = controller.User;
345+
346+
Assert.Equal(BaseClaimsPrincipalUserBuilder.DefaultAuthenticated, user);
347+
});
348+
}
332349
}
333350
}

0 commit comments

Comments
 (0)