Beispiel #1
0
        public async Task Handle_ValidAccount_HappyFlow()
        {
            // Arrange

            LoginCommand request = new LoginCommand
            {
                Email    = ConstantsAccountsCQTest.Email,
                Password = ConstantsAccountsCQTest.Password
            };

            _accountRepositoryMock.Setup(x => x.ExistsAccount(request.Email, request.Password)).Returns(true);
            _accountRepositoryMock.Setup(x => x.GetAccount(request.Email, request.Password)).Returns(ConstantsAccountsCQTest.AccountTest);
            _userStatusVerificationMock.Setup(x => x.UserIsActive(ConstantsAccountsCQTest.AccountTest.Id)).Returns(Results.Ok());
            _tokenCreatorMock.Setup(x => x.CreateToken(ConstantsAccountsCQTest.AccountTest)).Returns(ConstantsAccountsCQTest.Token2);
            _accountRepositoryMock.Setup(x => x.SaveModifications()).Returns(Results.Ok());

            // Act

            Result <PortalAccount> result = await _handler.Handle(request, CancellationToken.None);

            // Assert
            result.IsSuccess.Should().BeTrue();
            result.Value.Should().BeEquivalentTo(new PortalAccount {
                Token = ConstantsAccountsCQTest.Token2, Username = ConstantsAccountsCQTest.AccountTest.Username
            });
            _accountRepositoryMock.Verify(x => x.SaveModifications(), Times.Once());
            ConstantsAccountsCQTest.AccountTest.Token.Should().Be(ConstantsAccountsCQTest.Token2);
            ConstantsAccountsCQTest.AccountTest.LastLogintime.Should().BeAfter(DateTime.MinValue);
            ConstantsAccountsCQTest.AccountTest.LastLogintime.Should().BeAfter(DateTime.UtcNow.AddMinutes(-1));
            ConstantsAccountsCQTest.AccountTest.LastLogintime.Should().BeBefore(DateTime.UtcNow);
        }
Beispiel #2
0
        public void ShouldReturnToken()
        {
            var command = new LoginCommand()
            {
                Email    = "*****@*****.**",
                Password = "******"
            };

            _loginCommandHandler.Handle(command);

            Assert.IsFalse(string.IsNullOrEmpty(command.Token));
        }
        public async Task Handle_Should_ReturnErrorIfUserNotFound()
        {
            _emailValidatorMock.Setup(m => m.Validate(It.IsAny <string>()))
            .Returns(true);

            var command = new LoginCommand("*****@*****.**", "password");

            var result = await _handler.Handle(command, GetCancellationToken());

            result.Should().NotBeNull();
            result.Value.Should().BeNull();
            result.ErrorMessages.Should().Contain(LoginCommandHandler.Email_Or_Password_Not_Correct);
        }
Beispiel #4
0
        public async Task SuccessfulLogin()
        {
            // Arrange
            _command.Email    = "*****@*****.**";
            _command.Password = "******";

            var fakeStaff = Mock.Of <Staff>();

            fakeStaff.Id   = 123;
            fakeStaff.Name = "FakeName";
            fakeStaff.Role = Role.LIBRARYASSISTANT;

            _staffRepo.Setup(x => x.GetByEmail(It.IsAny <string>())).Returns(fakeStaff);
            _passwordHelper.Setup(x => x.ValidatePassword(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>()))
            .Returns(true);

            _signInManager.Setup(x => x.SignInAsync(It.IsAny <ClaimsPrincipal>(), It.IsAny <bool>())).Returns(Task.FromResult(0));

            var cacheEntry = Mock.Of <ICacheEntry>();

            _memoryCache
            .Setup(m => m.CreateEntry(It.IsAny <object>()))
            .Returns(cacheEntry);

            var sut = new LoginCommandHandler(_signInManager.Object, _passwordHelper.Object, _memoryCache.Object, _staffRepo.Object);

            // Act
            var result = await sut.Handle(_command, default);

            // Assert
            Assert.True(result);
        }
Beispiel #5
0
        public async Task Handle_ValidCommand_ShouldLoginSuccessfully(LoginOutput loginOutput)
        {
            // Arrange
            _mapperMock.Setup(m => m.Map <LoginOutput>(It.IsAny <User>())).Returns(loginOutput); // AutoMapper setup

            _appsettingMock.SetReturnsDefault(new AppSettings
            {
                Issuer = "key1",
                Secret = "kesdfaaaaaasffffffffy1"
            });

            var sut = new LoginCommandHandler(_context, _mapperMock.Object, _appsettingMock.Object); // creating system under test

            var temUser = _fixture.Create <User>();

            temUser.PasswordHash = "3pRTT3NlZJrki0wrSlmOjA==";

            // Act
            await ContextOperation.CreateEntity(_context, temUser);

            var password = SecurityHelper.Decrypt(temUser.PasswordHash);

            var output = await sut.Handle(new LoginCommand { Email = temUser.Email, Password = password }, CancellationToken.None);

            // Assert
            Assert.True(!string.IsNullOrEmpty(output.Token));
        }
Beispiel #6
0
        // Command Handling
        #region Command Handling
        public CommandStatus Handle(LoginCommand command)
        {
            ICollectionRead <Usuario> cmdData    = new UsuarioData();
            LoginCommandHandler       cmdHandler = new LoginCommandHandler(cmdData);

            return(cmdHandler.Handle(command));
        }
Beispiel #7
0
        public async Task Login_User_ShouldReturnBadRequestException(string exceptionMessage)
        {
            // Arrange
            var expectedUsers = new UserModel[] { new UserModel {
                                                      Username = "******", Password = "******"
                                                  } };
            var mock = expectedUsers.AsQueryable().BuildMock();
            Mock <IRepository <UserModel> > userRepo = new Mock <IRepository <UserModel> >();

            userRepo.Setup(repo => repo.FindAll()).Returns(mock.Object);
            userRepo.Setup(repo => repo.Find(It.IsAny <Expression <Func <UserModel, bool> > >()))
            .Returns(new UserModel[] { }.AsQueryable().BuildMock().Object);
            Mock <IOptions <JwtOptions> > config = new Mock <IOptions <JwtOptions> >();

            config.Setup(x => x.Value).Returns(new JwtOptions {
                Key    = "testKey12312_woeifo23423",
                Issuer = "http://localhost:5000"
            });

            var handler = new LoginCommandHandler(config.Object, userRepo.Object);

            // Act
            var ex = await Assert.ThrowsAsync <BadRequestException>(() => handler.Handle(new LoginCommand {
                Username = "******",
                Password = "******"
            }, It.IsAny <CancellationToken>()));

            // Assert
            ex.Message.Should().Be(string.Format(exceptionMessage, "testUsername"));
        }
Beispiel #8
0
        public async Task Login_User_ShouldReturnToken()
        {
            // Arrange
            var expectedUsers = new UserModel[] { new UserModel {
                                                      Username = "******", Password = "******"
                                                  } };
            var mock = expectedUsers.AsQueryable().BuildMock();
            Mock <IRepository <UserModel> > userRepo = new Mock <IRepository <UserModel> >();

            userRepo.Setup(repo => repo.FindAll()).Returns(mock.Object);
            userRepo.Setup(repo => repo.Find(It.IsAny <Expression <Func <UserModel, bool> > >()))
            .Returns(mock.Object);
            Mock <IOptions <JwtOptions> > config = new Mock <IOptions <JwtOptions> >();

            config.Setup(x => x.Value).Returns(new JwtOptions {
                Key    = "testKey12312_woeifo23423",
                Issuer = "http://localhost:5000"
            });

            var handler = new LoginCommandHandler(config.Object, userRepo.Object);

            // Act
            await handler.Handle(new LoginCommand {
                Username = "******",
                Password = "******"
            }, It.IsAny <CancellationToken>());

            // Assert
            userRepo.Verify(x => x.Find(It.IsAny <Expression <Func <UserModel, bool> > >()), Times.Once);
        }
Beispiel #9
0
        public async Task RejectsOnNOnExistingEmail()
        {
            _command.Email    = "*****@*****.**";
            _command.Password = "******";

            var sut = new LoginCommandHandler(_signInManager.Object, _passwordHelper.Object, _memoryCache.Object, _staffRepo.Object);

            var result = await sut.Handle(_command, default);

            Assert.False(result);
        }
        public async Task LoginCommandHandler_ShouldReturn_LoginCommandResult()
        {
            // var mockIHttpClientFactory = Substitute.For<IHttpClientFactory>();
            var messageHandler = new MockHttpMessageHandler("As per our requirement we mock string!", HttpStatusCode.OK);
            var httpClient     = new HttpClient(messageHandler);

            httpClient.BaseAddress = new Uri("https://www.google.com");
            var handler = new LoginCommandHandler(httpClient);
            var result  = await handler.Handle(new LoginCommand(), new CancellationToken());

            Assert.NotNull(result);
        }
Beispiel #11
0
        // Command Handling
        public void In_LoginCommand(LoginCommand command)
        {
            try
            {
                ICollectionRead <Usuario> cmdData    = new UsuarioData();
                LoginCommandHandler       cmdHandler = new LoginCommandHandler(cmdData);

                Out_LoginCommandResult(cmdHandler.Handle(command));
            }
            catch (Exception)
            {
                throw;
            }
        }
Beispiel #12
0
        public async void LoginCommand_CanLoginWithValidCredentials(string username, string password)
        {
            var expectedId = 1;

            Context.Shops.Add(new Shop()
            {
                Id = expectedId,
                MemberAreaUsername = username,
                MemberAreaPassword = HasherServiceMock.GetHash(password),
                Administrator      = true,
            });
            Context.SaveChanges();

            var command = new LoginCommand()
            {
                UserName = username,
                Password = password,
            };

            var actualId = await _handler.Handle(command, CancellationToken.None);

            Assert.Equal(expectedId, actualId);
        }
Beispiel #13
0
        public async Task RejectsOnWrongPassword()
        {
            _command.Email    = "*****@*****.**";
            _command.Password = "******";

            _staffRepo.Setup(x => x.GetByEmail(It.IsAny <string>())).Returns(new Staff());
            _passwordHelper.Setup(x => x.ValidatePassword(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>()))
            .Returns(false);

            var sut = new LoginCommandHandler(_signInManager.Object, _passwordHelper.Object, _memoryCache.Object, _staffRepo.Object);

            var result = await sut.Handle(_command, default);

            Assert.False(result);
        }
Beispiel #14
0
        public async Task Should_ThrowException_When_InputIsNull()
        {
            // Arrange
            var userStore = new Mock <IUserStore <User> >();

            userStore.Setup(x => x.FindByIdAsync("123", CancellationToken.None))
            .ReturnsAsync(new User()
            {
                UserName = "******",
                Id       = 123
            });

            var userManager = new UserManager <User>(userStore.Object, null, null, null, null, null, null, null, null);
            var jwtService  = new Mock <IJwtService>();

            // Act
            var commandHandler = new LoginCommandHandler(userManager, jwtService.Object);

            // Assert
            await Assert.ThrowsAsync <InvalidNullInputException>(() => commandHandler.Handle(null, CancellationToken.None));
        }
Beispiel #15
0
        public async Task Handle_InValidCommand_ShouldLoginWithError(LoginOutput loginOutput)
        {
            // Arrange
            _mapperMock.Setup(m => m.Map <LoginOutput>(It.IsAny <User>())).Returns(loginOutput); // AutoMapper setup

            _appsettingMock.SetReturnsDefault(new AppSettings
            {
                Issuer = "key1",
                Secret = "kesdfaaaaaasffffffffy1"
            });

            var sut = new LoginCommandHandler(_context, _mapperMock.Object, _appsettingMock.Object); // creating system under test

            var temUser = _fixture.Create <User>();

            // Act

            // Assert
            await Assert.ThrowsAsync <NotFoundException>(() => sut.Handle(new LoginCommand {
                Email = _fixture.Create <string>(), Password = _fixture.Create <string>()
            }, CancellationToken.None));
        }
Beispiel #16
0
 async Task WhenHandlerHandlesTheCommand()
 {
     _result = await _sut.Handle(_command);
 }