public async Task when_password_sign_in_failed_it_should_not_login() { // Arrange var identityManager = new Mock <IIdentityManager>(); identityManager.Setup(x => x.PasswordSignInAsync( It.Is <string>(u => u == "test@username"), It.Is <string>(p => p == "test@password"))) .ReturnsAsync(() => SignInResult.Failed); var sut = new UserAuthorizationServiceBuilder() .With(identityManager.Object) .Build(); // Act var result = await sut.Login(new LoginUserModel { Username = "******", Password = "******" }); // Assert result.Should().BeNull(); }
public async Task when_password_sign_in_succeeded_it_should_return_token_result() { // Arrange var identityManager = new Mock <IIdentityManager>(); var userService = new Mock <IUserService>(); var configuration = new Mock <ISystemConfigurationService>(); var dateTimeProvider = new Mock <IDateTimeProvider>(); var httpContextAccessor = new Mock <IHttpContextAccessor>(); var featureCollection = new Mock <IFeatureCollection>(); var cookiesFeature = new Mock <IResponseCookiesFeature>(); var cookies = new DummyResponseCookies(); // date and time var now = 12.January(2020).At(10, 10, 10).ToUniversalTime(); dateTimeProvider.Setup(x => x.GetUtcNow()).Returns(now); // sign-in identityManager.Setup(x => x.PasswordSignInAsync( It.Is <string>(u => u == "test@username"), It.Is <string>(p => p == "test@password"))) .Returns(() => Task.FromResult(SignInResult.Success)); // user repository User user = new UserBuilder().Build(); userService.Setup(x => x.FindByNameAsync(It.Is <string>(u => u == "test@username"))).ReturnsAsync(user); userService.Setup(x => x.GetOrAddRefreshToken(It.Is <User>(u => u == user))).ReturnsAsync("refresh_token"); // JWT configuration var accessTokenLifeTime = 10; var refreshTokenLifeTime = 100; configuration.Setup(x => x.GetSetting <int>(It.Is <string>(u => u == "Jwt:RefreshTokenExpirationInMinutes"))) .Returns(refreshTokenLifeTime); configuration.Setup(x => x.GetSetting <int>(It.Is <string>(u => u == "Jwt:AccessTokenExpirationInMinutes"))) .Returns(accessTokenLifeTime); configuration.Setup(x => x.GetSetting <string>(It.Is <string>(u => u == "Jwt:Key"))).Returns(Guid.NewGuid().ToString()); configuration.Setup(x => x.GetSetting <string>(It.Is <string>(u => u == "Jwt:Issuer"))).Returns("jwt_issuer"); // http context and cookies cookiesFeature.Setup(cf => cf.Cookies).Returns(() => cookies); featureCollection.Setup(fc => fc.Get <IResponseCookiesFeature>()).Returns(() => cookiesFeature.Object); httpContextAccessor.Setup(x => x.HttpContext).Returns(new DefaultHttpContext(featureCollection.Object)); var sut = new UserAuthorizationServiceBuilder() .With(identityManager.Object) .With(userService.Object) .With(httpContextAccessor.Object) .With(dateTimeProvider.Object) .With(configuration.Object) .Build(); // Act var result = await sut.Login(new LoginUserModel { Username = "******", Password = "******" }); // Assert result.Should().NotBeNull(); result !.Token.Should().NotBeNullOrWhiteSpace(); result.ExpiresInMilliseconds.Should().Be(TimeSpan.FromMinutes(10).TotalMilliseconds); cookies.GetCookie("RefreshTokenCookieKey").Should().BeEquivalentTo(new { Value = @"{""Username"":""*****@*****.**"",""RefreshToken"":""refresh_token""}", Options = new CookieOptions { HttpOnly = true, Secure = true, SameSite = SameSiteMode.None, Expires = now + TimeSpan.FromMinutes(100), } }); }