Skip to content

Commit 8aec784

Browse files
Remove unnecessary normalization in RoleExistsAsync method and update unit test with custom normalizer (#36050)
Co-authored-by: Fares Amr <[email protected]>
1 parent 68cdbe7 commit 8aec784

File tree

4 files changed

+64
-35
lines changed

4 files changed

+64
-35
lines changed

src/Identity/Extensions.Core/src/RoleManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ public virtual async Task<bool> RoleExistsAsync(string roleName)
234234
throw new ArgumentNullException(nameof(roleName));
235235
}
236236

237-
return await FindByNameAsync(NormalizeKey(roleName)) != null;
237+
return await FindByNameAsync(roleName) != null;
238238
}
239239

240240
/// <summary>

src/Identity/test/Identity.Test/RoleManagerTest.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,12 @@ public class RoleManagerTest
1717
public async Task CreateCallsStore()
1818
{
1919
// Setup
20+
var normalizer = MockHelpers.MockLookupNormalizer();
2021
var store = new Mock<IRoleStore<PocoRole>>();
2122
var role = new PocoRole { Name = "Foo" };
2223
store.Setup(s => s.CreateAsync(role, CancellationToken.None)).ReturnsAsync(IdentityResult.Success).Verifiable();
2324
store.Setup(s => s.GetRoleNameAsync(role, CancellationToken.None)).Returns(Task.FromResult(role.Name)).Verifiable();
24-
store.Setup(s => s.SetNormalizedRoleNameAsync(role, role.Name.ToUpperInvariant(), CancellationToken.None)).Returns(Task.FromResult(0)).Verifiable();
25+
store.Setup(s => s.SetNormalizedRoleNameAsync(role, normalizer.NormalizeName(role.Name), CancellationToken.None)).Returns(Task.FromResult(0)).Verifiable();
2526
var roleManager = MockHelpers.TestRoleManager(store.Object);
2627

2728
// Act
@@ -36,11 +37,12 @@ public async Task CreateCallsStore()
3637
public async Task UpdateCallsStore()
3738
{
3839
// Setup
40+
var normalizer = MockHelpers.MockLookupNormalizer();
3941
var store = new Mock<IRoleStore<PocoRole>>();
4042
var role = new PocoRole { Name = "Foo" };
4143
store.Setup(s => s.UpdateAsync(role, CancellationToken.None)).ReturnsAsync(IdentityResult.Success).Verifiable();
4244
store.Setup(s => s.GetRoleNameAsync(role, CancellationToken.None)).Returns(Task.FromResult(role.Name)).Verifiable();
43-
store.Setup(s => s.SetNormalizedRoleNameAsync(role, role.Name.ToUpperInvariant(), CancellationToken.None)).Returns(Task.FromResult(0)).Verifiable();
45+
store.Setup(s => s.SetNormalizedRoleNameAsync(role, normalizer.NormalizeName(role.Name), CancellationToken.None)).Returns(Task.FromResult(0)).Verifiable();
4446
var roleManager = MockHelpers.TestRoleManager(store.Object);
4547

4648
// Act
@@ -63,9 +65,10 @@ public void RolesQueryableFailWhenStoreNotImplemented()
6365
public async Task FindByNameCallsStoreWithNormalizedName()
6466
{
6567
// Setup
68+
var normalizer = MockHelpers.MockLookupNormalizer();
6669
var store = new Mock<IRoleStore<PocoRole>>();
6770
var role = new PocoRole { Name = "Foo" };
68-
store.Setup(s => s.FindByNameAsync("FOO", CancellationToken.None)).Returns(Task.FromResult(role)).Verifiable();
71+
store.Setup(s => s.FindByNameAsync(normalizer.NormalizeName("Foo"), CancellationToken.None)).Returns(Task.FromResult(role)).Verifiable();
6972
var manager = MockHelpers.TestRoleManager(store.Object);
7073

7174
// Act
@@ -98,9 +101,10 @@ public async Task CanFindByNameCallsStoreWithoutNormalizedName()
98101
public async Task RoleExistsCallsStoreWithNormalizedName()
99102
{
100103
// Setup
104+
var normalizer = MockHelpers.MockLookupNormalizer();
101105
var store = new Mock<IRoleStore<PocoRole>>();
102106
var role = new PocoRole { Name = "Foo" };
103-
store.Setup(s => s.FindByNameAsync("FOO", CancellationToken.None)).Returns(Task.FromResult(role)).Verifiable();
107+
store.Setup(s => s.FindByNameAsync(normalizer.NormalizeName("Foo"), CancellationToken.None)).Returns(Task.FromResult(role)).Verifiable();
104108
var manager = MockHelpers.TestRoleManager(store.Object);
105109

106110
// Act

src/Identity/test/Identity.Test/UserManagerTest.cs

Lines changed: 38 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,12 @@ public CustomRoleManager() : base(new Mock<IRoleStore<PocoRole>>().Object, null,
7070
public async Task CreateCallsStore()
7171
{
7272
// Setup
73+
var normalizer = MockHelpers.MockLookupNormalizer();
7374
var store = new Mock<IUserStore<PocoUser>>();
7475
var user = new PocoUser { UserName = "Foo" };
7576
store.Setup(s => s.CreateAsync(user, CancellationToken.None)).ReturnsAsync(IdentityResult.Success).Verifiable();
7677
store.Setup(s => s.GetUserNameAsync(user, CancellationToken.None)).Returns(Task.FromResult(user.UserName)).Verifiable();
77-
store.Setup(s => s.SetNormalizedUserNameAsync(user, user.UserName.ToUpperInvariant(), CancellationToken.None)).Returns(Task.FromResult(0)).Verifiable();
78+
store.Setup(s => s.SetNormalizedUserNameAsync(user, normalizer.NormalizeName(user.UserName), CancellationToken.None)).Returns(Task.FromResult(0)).Verifiable();
7879
var userManager = MockHelpers.TestUserManager<PocoUser>(store.Object);
7980

8081
// Act
@@ -108,13 +109,14 @@ public async Task CreateUpdatesSecurityStampStore()
108109
public async Task CreateCallsUpdateEmailStore()
109110
{
110111
// Setup
112+
var normalizer = MockHelpers.MockLookupNormalizer();
111113
var store = new Mock<IUserEmailStore<PocoUser>>();
112114
var user = new PocoUser { UserName = "Foo", Email = "[email protected]" };
113115
store.Setup(s => s.CreateAsync(user, CancellationToken.None)).ReturnsAsync(IdentityResult.Success).Verifiable();
114116
store.Setup(s => s.GetUserNameAsync(user, CancellationToken.None)).Returns(Task.FromResult(user.UserName)).Verifiable();
115117
store.Setup(s => s.GetEmailAsync(user, CancellationToken.None)).Returns(Task.FromResult(user.Email)).Verifiable();
116-
store.Setup(s => s.SetNormalizedEmailAsync(user, user.Email.ToUpperInvariant(), CancellationToken.None)).Returns(Task.FromResult(0)).Verifiable();
117-
store.Setup(s => s.SetNormalizedUserNameAsync(user, user.UserName.ToUpperInvariant(), CancellationToken.None)).Returns(Task.FromResult(0)).Verifiable();
118+
store.Setup(s => s.SetNormalizedEmailAsync(user, normalizer.NormalizeEmail(user.Email), CancellationToken.None)).Returns(Task.FromResult(0)).Verifiable();
119+
store.Setup(s => s.SetNormalizedUserNameAsync(user, normalizer.NormalizeName(user.UserName), CancellationToken.None)).Returns(Task.FromResult(0)).Verifiable();
118120
var userManager = MockHelpers.TestUserManager<PocoUser>(store.Object);
119121

120122
// Act
@@ -146,10 +148,11 @@ public async Task DeleteCallsStore()
146148
public async Task UpdateCallsStore()
147149
{
148150
// Setup
151+
var normalizer = MockHelpers.MockLookupNormalizer();
149152
var store = new Mock<IUserStore<PocoUser>>();
150153
var user = new PocoUser { UserName = "Foo" };
151154
store.Setup(s => s.GetUserNameAsync(user, CancellationToken.None)).Returns(Task.FromResult(user.UserName)).Verifiable();
152-
store.Setup(s => s.SetNormalizedUserNameAsync(user, user.UserName.ToUpperInvariant(), CancellationToken.None)).Returns(Task.FromResult(0)).Verifiable();
155+
store.Setup(s => s.SetNormalizedUserNameAsync(user, normalizer.NormalizeName(user.UserName), CancellationToken.None)).Returns(Task.FromResult(0)).Verifiable();
153156
store.Setup(s => s.UpdateAsync(user, CancellationToken.None)).ReturnsAsync(IdentityResult.Success).Verifiable();
154157
var userManager = MockHelpers.TestUserManager(store.Object);
155158

@@ -165,12 +168,13 @@ public async Task UpdateCallsStore()
165168
public async Task UpdateWillUpdateNormalizedEmail()
166169
{
167170
// Setup
171+
var normalizer = MockHelpers.MockLookupNormalizer();
168172
var store = new Mock<IUserEmailStore<PocoUser>>();
169173
var user = new PocoUser { UserName = "Foo", Email = "email" };
170174
store.Setup(s => s.GetUserNameAsync(user, CancellationToken.None)).Returns(Task.FromResult(user.UserName)).Verifiable();
171175
store.Setup(s => s.GetEmailAsync(user, CancellationToken.None)).Returns(Task.FromResult(user.Email)).Verifiable();
172-
store.Setup(s => s.SetNormalizedUserNameAsync(user, user.UserName.ToUpperInvariant(), CancellationToken.None)).Returns(Task.FromResult(0)).Verifiable();
173-
store.Setup(s => s.SetNormalizedEmailAsync(user, user.Email.ToUpperInvariant(), CancellationToken.None)).Returns(Task.FromResult(0)).Verifiable();
176+
store.Setup(s => s.SetNormalizedUserNameAsync(user, normalizer.NormalizeName(user.UserName), CancellationToken.None)).Returns(Task.FromResult(0)).Verifiable();
177+
store.Setup(s => s.SetNormalizedEmailAsync(user, normalizer.NormalizeEmail(user.Email), CancellationToken.None)).Returns(Task.FromResult(0)).Verifiable();
174178
store.Setup(s => s.UpdateAsync(user, CancellationToken.None)).ReturnsAsync(IdentityResult.Success).Verifiable();
175179
var userManager = MockHelpers.TestUserManager(store.Object);
176180

@@ -186,11 +190,12 @@ public async Task UpdateWillUpdateNormalizedEmail()
186190
public async Task SetUserNameCallsStore()
187191
{
188192
// Setup
193+
var normalizer = MockHelpers.MockLookupNormalizer();
189194
var store = new Mock<IUserStore<PocoUser>>();
190195
var user = new PocoUser();
191196
store.Setup(s => s.SetUserNameAsync(user, "foo", CancellationToken.None)).Returns(Task.FromResult(0)).Verifiable();
192197
store.Setup(s => s.GetUserNameAsync(user, CancellationToken.None)).Returns(Task.FromResult("foo")).Verifiable();
193-
store.Setup(s => s.SetNormalizedUserNameAsync(user, "FOO", CancellationToken.None)).Returns(Task.FromResult(0)).Verifiable();
198+
store.Setup(s => s.SetNormalizedUserNameAsync(user, normalizer.NormalizeName("foo"), CancellationToken.None)).Returns(Task.FromResult(0)).Verifiable();
194199
store.Setup(s => s.UpdateAsync(user, CancellationToken.None)).Returns(Task.FromResult(IdentityResult.Success)).Verifiable();
195200
var userManager = MockHelpers.TestUserManager(store.Object);
196201

@@ -223,9 +228,10 @@ public async Task FindByIdCallsStore()
223228
public async Task FindByNameCallsStoreWithNormalizedName()
224229
{
225230
// Setup
231+
var normalizer = MockHelpers.MockLookupNormalizer();
226232
var store = new Mock<IUserStore<PocoUser>>();
227233
var user = new PocoUser { UserName = "Foo" };
228-
store.Setup(s => s.FindByNameAsync(user.UserName.ToUpperInvariant(), CancellationToken.None)).Returns(Task.FromResult(user)).Verifiable();
234+
store.Setup(s => s.FindByNameAsync(normalizer.NormalizeName(user.UserName), CancellationToken.None)).Returns(Task.FromResult(user)).Verifiable();
229235
var userManager = MockHelpers.TestUserManager<PocoUser>(store.Object);
230236

231237
// Act
@@ -258,9 +264,10 @@ public async Task CanFindByNameCallsStoreWithoutNormalizedName()
258264
public async Task FindByEmailCallsStoreWithNormalizedEmail()
259265
{
260266
// Setup
267+
var normalizer = MockHelpers.MockLookupNormalizer();
261268
var store = new Mock<IUserEmailStore<PocoUser>>();
262269
var user = new PocoUser { Email = "Foo" };
263-
store.Setup(s => s.FindByEmailAsync(user.Email.ToUpperInvariant(), CancellationToken.None)).Returns(Task.FromResult(user)).Verifiable();
270+
store.Setup(s => s.FindByEmailAsync(normalizer.NormalizeEmail(user.Email), CancellationToken.None)).Returns(Task.FromResult(user)).Verifiable();
264271
var userManager = MockHelpers.TestUserManager(store.Object);
265272

266273
// Act
@@ -335,27 +342,28 @@ public async Task FindByNameCallsStoreWithCustomNormalizedName()
335342
public async Task AddToRolesCallsStore()
336343
{
337344
// Setup
345+
var normalizer = MockHelpers.MockLookupNormalizer();
338346
var store = new Mock<IUserRoleStore<PocoUser>>();
339347
var user = new PocoUser { UserName = "Foo" };
340348
var roles = new string[] { "A", "B", "C", "C" };
341-
store.Setup(s => s.AddToRoleAsync(user, "A", CancellationToken.None))
349+
store.Setup(s => s.AddToRoleAsync(user, normalizer.NormalizeName("A"), CancellationToken.None))
342350
.Returns(Task.FromResult(0))
343351
.Verifiable();
344-
store.Setup(s => s.AddToRoleAsync(user, "B", CancellationToken.None))
352+
store.Setup(s => s.AddToRoleAsync(user, normalizer.NormalizeName("B"), CancellationToken.None))
345353
.Returns(Task.FromResult(0))
346354
.Verifiable();
347-
store.Setup(s => s.AddToRoleAsync(user, "C", CancellationToken.None))
355+
store.Setup(s => s.AddToRoleAsync(user, normalizer.NormalizeName("C"), CancellationToken.None))
348356
.Returns(Task.FromResult(0))
349357
.Verifiable();
350358

351359
store.Setup(s => s.UpdateAsync(user, CancellationToken.None)).ReturnsAsync(IdentityResult.Success).Verifiable();
352-
store.Setup(s => s.IsInRoleAsync(user, "A", CancellationToken.None))
360+
store.Setup(s => s.IsInRoleAsync(user, normalizer.NormalizeName("A"), CancellationToken.None))
353361
.Returns(Task.FromResult(false))
354362
.Verifiable();
355-
store.Setup(s => s.IsInRoleAsync(user, "B", CancellationToken.None))
363+
store.Setup(s => s.IsInRoleAsync(user, normalizer.NormalizeName("B"), CancellationToken.None))
356364
.Returns(Task.FromResult(false))
357365
.Verifiable();
358-
store.Setup(s => s.IsInRoleAsync(user, "C", CancellationToken.None))
366+
store.Setup(s => s.IsInRoleAsync(user, normalizer.NormalizeName("C"), CancellationToken.None))
359367
.Returns(Task.FromResult(false))
360368
.Verifiable();
361369
var userManager = MockHelpers.TestUserManager<PocoUser>(store.Object);
@@ -366,7 +374,7 @@ public async Task AddToRolesCallsStore()
366374
// Assert
367375
Assert.True(result.Succeeded);
368376
store.VerifyAll();
369-
store.Verify(s => s.AddToRoleAsync(user, "C", CancellationToken.None), Times.Once());
377+
store.Verify(s => s.AddToRoleAsync(user, normalizer.NormalizeName("C"), CancellationToken.None), Times.Once());
370378
}
371379

372380
[Fact]
@@ -412,13 +420,14 @@ public async Task AddToRolesCallsStoreWithCustomNameNormalizer()
412420
public async Task AddToRolesFailsIfUserInRole()
413421
{
414422
// Setup
423+
var normalizer = MockHelpers.MockLookupNormalizer();
415424
var store = new Mock<IUserRoleStore<PocoUser>>();
416425
var user = new PocoUser { UserName = "Foo" };
417426
var roles = new[] { "A", "B", "C" };
418-
store.Setup(s => s.AddToRoleAsync(user, "A", CancellationToken.None))
427+
store.Setup(s => s.AddToRoleAsync(user, normalizer.NormalizeName("A"), CancellationToken.None))
419428
.Returns(Task.FromResult(0))
420429
.Verifiable();
421-
store.Setup(s => s.IsInRoleAsync(user, "B", CancellationToken.None))
430+
store.Setup(s => s.IsInRoleAsync(user, normalizer.NormalizeName("B"), CancellationToken.None))
422431
.Returns(Task.FromResult(true))
423432
.Verifiable();
424433
var userManager = MockHelpers.TestUserManager(store.Object);
@@ -435,26 +444,27 @@ public async Task AddToRolesFailsIfUserInRole()
435444
public async Task RemoveFromRolesCallsStore()
436445
{
437446
// Setup
447+
var normalizer = MockHelpers.MockLookupNormalizer();
438448
var store = new Mock<IUserRoleStore<PocoUser>>();
439449
var user = new PocoUser { UserName = "Foo" };
440450
var roles = new[] { "A", "B", "C" };
441-
store.Setup(s => s.RemoveFromRoleAsync(user, "A", CancellationToken.None))
451+
store.Setup(s => s.RemoveFromRoleAsync(user, normalizer.NormalizeName("A"), CancellationToken.None))
442452
.Returns(Task.FromResult(0))
443453
.Verifiable();
444-
store.Setup(s => s.RemoveFromRoleAsync(user, "B", CancellationToken.None))
454+
store.Setup(s => s.RemoveFromRoleAsync(user, normalizer.NormalizeName("B"), CancellationToken.None))
445455
.Returns(Task.FromResult(0))
446456
.Verifiable();
447-
store.Setup(s => s.RemoveFromRoleAsync(user, "C", CancellationToken.None))
457+
store.Setup(s => s.RemoveFromRoleAsync(user, normalizer.NormalizeName("C"), CancellationToken.None))
448458
.Returns(Task.FromResult(0))
449459
.Verifiable();
450460
store.Setup(s => s.UpdateAsync(user, CancellationToken.None)).ReturnsAsync(IdentityResult.Success).Verifiable();
451-
store.Setup(s => s.IsInRoleAsync(user, "A", CancellationToken.None))
461+
store.Setup(s => s.IsInRoleAsync(user, normalizer.NormalizeName("A"), CancellationToken.None))
452462
.Returns(Task.FromResult(true))
453463
.Verifiable();
454-
store.Setup(s => s.IsInRoleAsync(user, "B", CancellationToken.None))
464+
store.Setup(s => s.IsInRoleAsync(user, normalizer.NormalizeName("B"), CancellationToken.None))
455465
.Returns(Task.FromResult(true))
456466
.Verifiable();
457-
store.Setup(s => s.IsInRoleAsync(user, "C", CancellationToken.None))
467+
store.Setup(s => s.IsInRoleAsync(user, normalizer.NormalizeName("C"), CancellationToken.None))
458468
.Returns(Task.FromResult(true))
459469
.Verifiable();
460470
var userManager = MockHelpers.TestUserManager<PocoUser>(store.Object);
@@ -471,16 +481,17 @@ public async Task RemoveFromRolesCallsStore()
471481
public async Task RemoveFromRolesFailsIfNotInRole()
472482
{
473483
// Setup
484+
var normalizer = MockHelpers.MockLookupNormalizer();
474485
var store = new Mock<IUserRoleStore<PocoUser>>();
475486
var user = new PocoUser { UserName = "Foo" };
476487
var roles = new string[] { "A", "B", "C" };
477-
store.Setup(s => s.RemoveFromRoleAsync(user, "A", CancellationToken.None))
488+
store.Setup(s => s.RemoveFromRoleAsync(user, normalizer.NormalizeName("A"), CancellationToken.None))
478489
.Returns(Task.FromResult(0))
479490
.Verifiable();
480-
store.Setup(s => s.IsInRoleAsync(user, "A", CancellationToken.None))
491+
store.Setup(s => s.IsInRoleAsync(user, normalizer.NormalizeName("A"), CancellationToken.None))
481492
.Returns(Task.FromResult(true))
482493
.Verifiable();
483-
store.Setup(s => s.IsInRoleAsync(user, "B", CancellationToken.None))
494+
store.Setup(s => s.IsInRoleAsync(user, normalizer.NormalizeName("B"), CancellationToken.None))
484495
.Returns(Task.FromResult(false))
485496
.Verifiable();
486497
var userManager = MockHelpers.TestUserManager<PocoUser>(store.Object);

0 commit comments

Comments
 (0)