From bb22b2908231a95a3ac34fc9bcb634e7dbad591a Mon Sep 17 00:00:00 2001 From: StevesBro <63659507+StevesBro@users.noreply.github.com> Date: Thu, 3 Sep 2020 16:43:05 -0400 Subject: [PATCH] Case insensitive tests (#683) * Make user email and username lowercase whenever they are sent to a controller * Change ToLower to ToLowerInvariant * Move toLowerInvariant to database queries only * Play with tests * More test playing * Remove commented test Co-authored-by: Jason Naylor --- Backend.Tests/UserControllerTests.cs | 61 +++++++++++++++++++++++- Backend.Tests/UserServiceMock.cs | 2 +- Backend.Tests/Util.cs | 5 +- Backend/Services/PasswordResetService.cs | 3 +- 4 files changed, 67 insertions(+), 4 deletions(-) diff --git a/Backend.Tests/UserControllerTests.cs b/Backend.Tests/UserControllerTests.cs index 1ec327fa49..31b63efb2e 100644 --- a/Backend.Tests/UserControllerTests.cs +++ b/Backend.Tests/UserControllerTests.cs @@ -23,10 +23,21 @@ public void Setup() private static User RandomUser() { - var user = new User { Username = Util.RandString(), Password = Util.RandString() }; + var user = new User { Username = Util.RandString(10), Password = Util.RandString(10) }; return user; } + [Test] + public void TestRandString() + { + var randomString = Util.RandString(10); + Assert.IsTrue(char.IsUpper(randomString[0])); + Assert.IsTrue(char.IsLower(randomString[1])); + Assert.IsTrue(char.IsLower(randomString[2])); + Assert.IsTrue(char.IsLower(randomString[3])); + Assert.IsTrue(char.IsUpper(randomString[4])); + } + [Test] public void TestGetAllUsers() { @@ -112,5 +123,53 @@ public void TestDeleteAllUsers() _ = _controller.Delete().Result; Assert.That(_userService.GetAllUsers().Result, Has.Count.EqualTo(0)); } + + [Test] + public void TestCheckUsername() + { + var user1 = RandomUser(); + var user2 = RandomUser(); + var username1 = user1.Username; + var username2 = user2.Username; + + _userService.Create(user1); + _userService.Create(user2); + + var result1 = (_controller.CheckUsername(username1.ToLowerInvariant())).Result as StatusCodeResult; + Assert.AreEqual(result1.StatusCode, 400); + + var result2 = (_controller.CheckUsername(username2.ToUpperInvariant())).Result as StatusCodeResult; + Assert.AreEqual(result2.StatusCode, 400); + + var result3 = (_controller.CheckUsername(username1)).Result as StatusCodeResult; + Assert.AreEqual(result3.StatusCode, 400); + + var result4 = (_controller.CheckUsername("NewUsername")).Result as StatusCodeResult; + Assert.AreEqual(result4.StatusCode, 200); + } + + [Test] + public void TestCheckEmail() + { + var user1 = RandomUser(); + var user2 = RandomUser(); + var email1 = user1.Email; + var email2 = user2.Email; + + _userService.Create(user1); + _userService.Create(user2); + + var result1 = (_controller.CheckEmail(email1.ToLowerInvariant())).Result as StatusCodeResult; + Assert.AreEqual(result1.StatusCode, 400); + + var result2 = (_controller.CheckEmail(email2.ToUpperInvariant())).Result as StatusCodeResult; + Assert.AreEqual(result2.StatusCode, 400); + + var result3 = (_controller.CheckEmail(email1)).Result as StatusCodeResult; + Assert.AreEqual(result3.StatusCode, 400); + + var result4 = (_controller.CheckEmail("NewEmail")).Result as StatusCodeResult; + Assert.AreEqual(result4.StatusCode, 200); + } } } diff --git a/Backend.Tests/UserServiceMock.cs b/Backend.Tests/UserServiceMock.cs index c57e44fb4b..e175794023 100644 --- a/Backend.Tests/UserServiceMock.cs +++ b/Backend.Tests/UserServiceMock.cs @@ -76,7 +76,7 @@ public Task Authenticate(string username, string password) { try { - var foundUser = _users.Single(u => u.Username == username && u.Password == password); + var foundUser = _users.Single(u => u.Username.ToLowerInvariant() == username.ToLowerInvariant() && u.Password == password); if (foundUser == null) { return null; diff --git a/Backend.Tests/Util.cs b/Backend.Tests/Util.cs index 84adc7d3af..462495e1cb 100644 --- a/Backend.Tests/Util.cs +++ b/Backend.Tests/Util.cs @@ -11,7 +11,10 @@ public static string RandString(int length) var sb = new StringBuilder(); for (var i = 0; i < length; i++) { - sb.Append((char)rnd.Next('a', 'z')); + if (i % 4 == 0) + sb.Append((char)rnd.Next('A', 'Z')); + else + sb.Append((char)rnd.Next('a', 'z')); } return sb.ToString(); } diff --git a/Backend/Services/PasswordResetService.cs b/Backend/Services/PasswordResetService.cs index 3d8452ab0d..1f4dc3f624 100644 --- a/Backend/Services/PasswordResetService.cs +++ b/Backend/Services/PasswordResetService.cs @@ -39,7 +39,8 @@ async Task IPasswordResetService.ResetPassword(string token, string passwo var request = await _passwordResets.FindByToken(token); if (request != null && DateTime.Now < request.ExpireTime) { - var user = (await _userService.GetAllUsers()).Single(u => u.Email == request.Email); + var user = (await _userService.GetAllUsers()).Single(u => + u.Email.ToLowerInvariant() == request.Email.ToLowerInvariant()); await _userService.ChangePassword(user.Id, password); await ExpirePasswordReset(request.Email); return true;