Skip to content

Commit 690ef19

Browse files
committed
#283 Adding couple of tests for WithoutUser
1 parent 16f28fe commit 690ef19

6 files changed

Lines changed: 96 additions & 23 deletions

File tree

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,13 @@ public ClaimsPrincipal GetClaimsPrincipal()
2525
return claimsPrincipal;
2626
}
2727

28+
public ClaimsPrincipal GetClaimsPrincipalBasedOnClaimsOnly()
29+
{
30+
var claimsPrincipal = new ClaimsPrincipal(this.GetAuthenticatedClaimsIdentity());
31+
32+
return claimsPrincipal;
33+
}
34+
2835
/// <summary>
2936
/// Static constructor for creating default authenticated claims principal with "TestId" identifier and "TestUser" username.
3037
/// </summary>
@@ -37,5 +44,13 @@ protected void AddIdentity(ClaimsIdentity identity)
3744
{
3845
this._identities.Add(identity);
3946
}
47+
48+
protected void AddIdentities(IEnumerable<ClaimsIdentity> identities)
49+
{
50+
foreach (var identity in identities)
51+
{
52+
this.AddIdentity(identity);
53+
}
54+
}
4055
}
4156
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ protected void RemoveClaim(Claim claim)
151151
protected void RemoveClaim(string type, string value)
152152
{
153153
var claimsToRemove =
154-
this.claims.Where(x => x.Type.Equals(type) && x.Value.Equals(value));
154+
this.claims.Where(x => x.Type.Equals(type) && x.Value.Equals(value)).ToList();
155155

156156
claimsToRemove.ForEach(claim => this.claims.Remove(claim));
157157
}

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

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55

66
public class WithoutClaimsPrincipalBuilder : BaseClaimsPrincipalUserBuilder, IAndWithoutClaimsPrincipalBuilder
77
{
8+
public WithoutClaimsPrincipalBuilder(ClaimsPrincipal principal)
9+
{
10+
base.AddClaims(principal.Claims);
11+
}
12+
813
public IAndWithoutClaimsPrincipalBuilder WithoutClaim(string type, string value)
914
{
1015
base.RemoveClaim(type, value);
@@ -26,18 +31,6 @@ public IAndWithoutClaimsPrincipalBuilder WithoutRole(string role)
2631
return this;
2732
}
2833

29-
public IAndWithoutClaimsPrincipalBuilder WithoutUser()
30-
{
31-
return this;
32-
}
33-
34-
public IAndWithoutClaimsPrincipalBuilder WithoutUsername(string username)
35-
{
36-
base.RemoveUsername(username);
37-
38-
return this;
39-
}
40-
4134
public IWithoutClaimsPrincipalBuilder AndAlso()
4235
=> this;
4336
}

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,8 @@
44

55
public interface IWithoutClaimsPrincipalBuilder
66
{
7-
IAndWithoutClaimsPrincipalBuilder WithoutUser();
8-
97
IAndWithoutClaimsPrincipalBuilder WithoutRole(string role);
108

11-
IAndWithoutClaimsPrincipalBuilder WithoutUsername(string username);
12-
139
IAndWithoutClaimsPrincipalBuilder WithoutClaim(string type, string value);
1410

1511
IAndWithoutClaimsPrincipalBuilder WithoutClaim(Claim claim);

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

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,42 @@
11
namespace MyTested.AspNetCore.Mvc
22
{
3+
using System;
4+
using System.Security.Claims;
35
using MyTested.AspNetCore.Mvc.Builders.Authentication;
46
using MyTested.AspNetCore.Mvc.Builders.Base;
57
using MyTested.AspNetCore.Mvc.Builders.Contracts.Authentication;
68
using MyTested.AspNetCore.Mvc.Builders.Contracts.Base;
7-
using System;
89

910
public static class ComponentBuilderAuthenticationWithoutExtensions
1011
{
12+
public static TBuilder WithoutUser<TBuilder>(
13+
this IBaseTestBuilderWithComponentBuilder<TBuilder> builder,
14+
string claimType, string value)
15+
where TBuilder : IBaseTestBuilder
16+
=> builder.WithoutUser(user => user.WithoutClaim(claimType, value));
17+
18+
public static TBuilder WithoutUser<TBuilder>(
19+
this IBaseTestBuilderWithComponentBuilder<TBuilder> builder,
20+
Claim claim)
21+
where TBuilder : IBaseTestBuilder
22+
=> builder.WithoutUser(user => user.WithoutClaim(claim));
23+
24+
public static TBuilder WithoutUser<TBuilder>(
25+
this IBaseTestBuilderWithComponentBuilder<TBuilder> builder,
26+
string role)
27+
where TBuilder : IBaseTestBuilder
28+
=> builder.WithoutUser(user => user.WithoutRole(role));
29+
1130
public static TBuilder WithoutUser<TBuilder>(
1231
this IBaseTestBuilderWithComponentBuilder<TBuilder> builder,
1332
Action<IWithoutClaimsPrincipalBuilder> userBuilder)
1433
where TBuilder : IBaseTestBuilder
1534
{
1635
var actualBuilder = (BaseTestBuilderWithComponentBuilder<TBuilder>)builder;
1736

18-
var newUserBuilder = new WithoutClaimsPrincipalBuilder();
37+
var newUserBuilder = new WithoutClaimsPrincipalBuilder(actualBuilder.HttpContext.User);
1938
userBuilder(newUserBuilder);
20-
actualBuilder.HttpContext.User = newUserBuilder.GetClaimsPrincipal();
39+
actualBuilder.HttpContext.User = newUserBuilder.GetClaimsPrincipalBasedOnClaimsOnly();
2140

2241
return actualBuilder.Builder;
2342
}

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

Lines changed: 53 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public void WithNameTypeShouldOverrideDefaultClaimType()
2727
Assert.Equal("MyUsername", claim.Value);
2828
});
2929
}
30-
30+
3131
[Fact]
3232
public void WithRoleTypeShouldOverrideDefaultClaimType()
3333
{
@@ -69,7 +69,7 @@ public void WithIdentifierShouldSetCorrectIdentifier()
6969
.WithIdentifier("TestingId"))
7070
.ShouldPassForThe<MvcController>(controller =>
7171
{
72-
var claim = controller.User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier);
72+
var claim = controller.User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier);
7373

7474
Assert.NotNull(claim);
7575
Assert.Equal("TestingId", claim.Value);
@@ -126,7 +126,7 @@ public void WithClaimsShouldSetCorrectClaim()
126126
Assert.Equal("MySecondValue", secondClaim.Value);
127127
});
128128
}
129-
129+
130130
[Fact]
131131
public void WithClaimsAsEnumerableShouldSetCorrectClaim()
132132
{
@@ -279,5 +279,55 @@ public void WithFullIdentityBuilderShouldSetProperClaims()
279279
Assert.Contains("AnotherListRole", userRoleClaims);
280280
});
281281
}
282+
283+
[Fact]
284+
public void WithoutClaimShouldRemoveTheCorrectClaimOnly()
285+
{
286+
MyController<MvcController>
287+
.Instance()
288+
.WithUser(user => user
289+
.WithNameType("CustomUsername"))
290+
.WithoutUser(user => user.WithoutClaim("CustomUsername", "TestUser"))
291+
.ShouldPassForThe<MvcController>(controller =>
292+
{
293+
var claimToBeDeleted = controller.User.Claims.FirstOrDefault(c => c.Type == "CustomUsername");
294+
295+
Assert.Null(claimToBeDeleted);
296+
});
297+
}
298+
299+
[Fact(Skip = "Trying to find out why certain property is set.")]
300+
public void WithoutClaimByProvidingClaimsDirectlyShouldRemoveTheCorrectClaimOnly()
301+
{
302+
var claim =
303+
new Claim("CustomUsername", "TestUser", "string", "issuer","OGissuer",
304+
new ClaimsIdentity("Password", "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name", "http://schemas.microsoft.com/ws/2008/06/identity/claims/role"));
305+
306+
MyController<MvcController>
307+
.Instance()
308+
.WithUser(user => user.WithClaim(claim))
309+
.WithoutUser(user => user.WithoutClaim(claim))
310+
.ShouldPassForThe<MvcController>(controller =>
311+
{
312+
var claimToBeDeleted = controller.User.Claims.FirstOrDefault(c => c.Type == claim.Type);
313+
314+
Assert.Null(claimToBeDeleted);
315+
});
316+
}
317+
318+
[Fact]
319+
public void WithoutRoleShouldRemoveTheCorrectRole()
320+
{
321+
MyController<MvcController>
322+
.Instance()
323+
.WithUser(user => user.InRole("randomRole"))
324+
.WithoutUser(user => user.WithoutRole("randomRole"))
325+
.ShouldPassForThe<MvcController>(controller =>
326+
{
327+
var claimToBeDeleted = controller.User.Claims.FirstOrDefault(c => c.Type == "randomRole");
328+
329+
Assert.Null(claimToBeDeleted);
330+
});
331+
}
282332
}
283333
}

0 commit comments

Comments
 (0)