예제 #1
0
        public async Task Login_LoginViewModel_InvalidViewModelWithValues_ReturnsExpectedView()
        {
            const string loginHint = "LoginHint";

            var uri = new Uri("http://www.foobar.com/");

            var inputModel = LoginViewModelBuilder
                             .Create()
                             .WithEmailAddress("NotLoginHint")
                             .WithReturnUrl(uri)
                             .WithPassword("Password")
                             .Build();

            using var controller = AccountControllerBuilder
                                   .Create()
                                   .WithSignInResult(new Result <SignInResponse>(false, null, new SignInResponse(false, loginHint: loginHint)))
                                   .Build();

            controller.ModelState.AddModelError(string.Empty, "Fake error!");

            var result = await controller.Login(inputModel) as ViewResult;

            Assert.NotNull(result);

            var viewModel = result.Model as LoginViewModel;

            Assert.NotNull(viewModel);
            viewModel.ReturnUrl.Should().BeEquivalentTo(uri);
            viewModel.Password.Should().BeNull();
            viewModel.EmailAddress.Should().BeEquivalentTo(loginHint);
        }
예제 #2
0
 public LoginController(
     LoginService loginService,
     LoginViewModelBuilder loginViewModelBuilder,
     ForgotPasswordViewModelBuilder forgotPasswordViewModelBuilder,
     OrganizationService organizationService,
     MyPagesViewModelService myPagesViewModelService,
     RequestModelAccessor requestModelAccessor,
     AddressTypeService addressTypeService,
     CountryService countryService,
     SecurityContextService securityContextService,
     PersonStorage personStorage,
     PersonService personService)
 {
     _loginService                   = loginService;
     _loginViewModelBuilder          = loginViewModelBuilder;
     _forgotPasswordViewModelBuilder = forgotPasswordViewModelBuilder;
     _organizationService            = organizationService;
     _myPagesViewModelService        = myPagesViewModelService;
     _requestModelAccessor           = requestModelAccessor;
     _addressTypeService             = addressTypeService;
     _personStorage                  = personStorage;
     _personService                  = personService;
     _countryService                 = countryService;
     _securityContextService         = securityContextService;
 }
예제 #3
0
        protected override Task <bool> GetJsonAsync(IOwinEnvironment context, IClient client, CancellationToken cancellationToken)
        {
            var viewModelBuilder = new LoginViewModelBuilder(_configuration.Web.Login, _configuration.Providers);
            var loginViewModel   = viewModelBuilder.Build();

            return(JsonResponse.Ok(context, loginViewModel));
        }
예제 #4
0
        public void SavedAndDraftCountIsSet()
        {
            var viewModel = new LoginViewModelBuilder().WithValidCredentials().Build();

            var candidateServiceProvider = new Mock <ICandidateServiceProvider>();

            var applicationStatusSummaries = new Fixture().CreateMany <ApprenticeshipApplicationSummary>(25);

            candidateServiceProvider.Setup(x => x.GetApprenticeshipApplications(It.IsAny <Guid>(), It.IsAny <bool>())).Returns(applicationStatusSummaries);
            candidateServiceProvider.Setup(x => x.GetCandidate(It.IsAny <string>())).Returns(new Candidate {
                EntityId = Guid.Empty
            });
            candidateServiceProvider.Setup(p => p.Login(viewModel)).Returns(new LoginResultViewModelBuilder().Build);

            var userDataProvider = new Mock <IUserDataProvider>();

            userDataProvider.Setup(x => x.Push(UserDataItemNames.SavedAndDraftCount, It.IsAny <string>()));

            var mediator = new LoginMediatorBuilder().With(candidateServiceProvider).With(userDataProvider).Build();

            var response = mediator.Index(viewModel);

            response.AssertCodeAndMessage(LoginMediatorCodes.Index.Ok);
            var count = applicationStatusSummaries.Count(a => a.Status == ApplicationStatuses.Draft || a.Status == ApplicationStatuses.Saved);

            userDataProvider.Verify(x => x.Push(UserDataItemNames.SavedAndDraftCount, count.ToString(CultureInfo.InvariantCulture)), Times.Once);
        }
예제 #5
0
        public async Task Login_LoginViewModel_FailedSignIn_AddsDisabledValidationError()
        {
            const string email       = "*****@*****.**";
            const string phoneNumber = "012345678901";

            var disabledSetting = new DisabledErrorMessageSettings()
            {
                EmailAddress = email,
                PhoneNumber  = phoneNumber
            };

            using var controller = AccountControllerBuilder
                                   .Create()
                                   .WithSignInResult(Result.Failure <SignInResponse>(new List <ErrorDetails> { LoginUserErrors.UserIsDisabled() }))
                                   .WithDisabledErrorMessageSetting(disabledSetting)
                                   .Build();

            await controller.Login(LoginViewModelBuilder.Create().Build());

            var modelState = controller.ModelState;

            modelState.IsValid.Should().BeFalse();
            modelState.Count.Should().Be(1);

            (string key, ModelStateEntry entry) = modelState.First();
            key.Should().Be(nameof(LoginViewModel.DisabledError));
            entry.Errors.Count.Should().Be(1);
            var expected = string.Format(CultureInfo.CurrentCulture, AccountController.UserDisabledErrorMessageTemplate, email,
                                         phoneNumber);

            entry.Errors.First().ErrorMessage.Should().Be(expected);
        }
예제 #6
0
        public void ShouldNotAllowLoginIfPendingDeletion()
        {
            // Arrange.
            var candidateId        = Guid.NewGuid();
            var userAccountService = new Mock <IUserAccountService>();

            userAccountService
            .Setup(s => s.GetUser(LoginViewModelBuilder.ValidEmailAddress, false))
            .Returns(new User
            {
                Status = UserStatuses.PendingDeletion
            });

            var provider  = new CandidateServiceProviderBuilder().With(userAccountService).Build();
            var viewModel = new LoginViewModelBuilder().WithValidCredentials().Build();

            // Act.
            var resultViewModel = provider.Login(viewModel);

            /*return new LoginResultViewModel(LoginPageMessages.InvalidUsernameOrPasswordErrorText)
             * {
             *  EmailAddress = model.EmailAddress,
             *  UserStatus = userStatus
             * };*/

            // Assert.
            resultViewModel.ViewModelMessage.Should().Be(LoginPageMessages.InvalidUsernameAndOrPasswordErrorText);
        }
예제 #7
0
        public void ShouldSetPendingUsernameVerificationRequired(string pendingUsername, bool expectedResult)
        {
            // Arrange.
            var candidateId        = Guid.NewGuid();
            var userAccountService = new Mock <IUserAccountService>();

            userAccountService
            .Setup(s => s.GetUser(LoginViewModelBuilder.ValidEmailAddress, false))
            .Returns(new User
            {
                Status          = UserStatuses.Active,
                PendingUsername = pendingUsername
            });

            var candidateService = new Mock <ICandidateService>();

            candidateService
            .Setup(cs => cs.Authenticate(LoginViewModelBuilder.ValidEmailAddress, LoginViewModelBuilder.ValidPassword))
            .Returns(new CandidateBuilder(candidateId).EnableApplicationStatusChangeAlertsViaText(true).Build);

            var provider  = new CandidateServiceProviderBuilder().With(candidateService).With(userAccountService).Build();
            var viewModel = new LoginViewModelBuilder().WithValidCredentials().Build();

            // Act.
            var resultViewModel = provider.Login(viewModel);

            // Assert.
            resultViewModel.PendingUsernameVerificationRequired.Should().Be(expectedResult);
        }
예제 #8
0
        public void ValidationError()
        {
            var viewModel = new LoginViewModelBuilder().Build();

            var mediator = new LoginMediatorBuilder().Build();
            var response = mediator.Index(viewModel);

            response.AssertValidationResult(LoginMediatorCodes.Index.ValidationError);
        }
예제 #9
0
        public MainWindow BuildWindow()
        {
            // build modules

            var adornerControl = new AdornerControl();

            // build viewModels

            var mainViewModelBuilder = new MainViewModelBuilder(medicalPracticeRepository,
                                                                readModelRepository,
                                                                patientRepository,
                                                                therapyPlaceTypeRepository,
                                                                labelRepository,
                                                                commandService,
                                                                localSettingsRepository,
                                                                viewModelCommunication,
                                                                session,
                                                                adornerControl);

            var loginViewModelBuilder = new LoginViewModelBuilder(session,
                                                                  localSettingsRepository);

            var notificationServiceContainerViewModel = new NotificationServiceContainerViewModel(viewModelCommunication);

            var connectionStatusViewModel = new ConnectionStatusViewModel(session);

            var dialogBuilder = new AboutDialogWindowBuilder(versionNumber, errorCallback);

            var actionBarViewModel = new ActionBarViewModel(session,
                                                            connectionStatusViewModel,
                                                            viewModelCommunication,
                                                            dialogBuilder);

            var mainWindowViewModel = new MainWindowViewModel(mainViewModelBuilder,
                                                              loginViewModelBuilder,
                                                              notificationServiceContainerViewModel,
                                                              actionBarViewModel,
                                                              session,
                                                              errorCallback);

            // build mainWindow

            var mainWindow = new MainWindow
            {
                DataContext = mainWindowViewModel
            };

            // set GridContainer as ReferenceElement of AdornerControl

            adornerControl.ReferenceElement = mainWindow.MainView.OverviewPage.GridContainer;

            viewModelCommunication.RegisterViewModelMessageHandler <ShowDisabledOverlay>(mainWindowViewModel);
            viewModelCommunication.RegisterViewModelMessageHandler <HideDisabledOverlay>(mainWindowViewModel);

            return(mainWindow);
        }
예제 #10
0
        public void AccountLocked()
        {
            var viewModel = new LoginViewModelBuilder().WithValidCredentials().Build();

            var candidateServiceProvider = new Mock <ICandidateServiceProvider>();

            candidateServiceProvider.Setup(p => p.Login(viewModel)).Returns(new LoginResultViewModelBuilder(UserStatuses.Locked).Build);
            var mediator = new LoginMediatorBuilder().With(candidateServiceProvider).Build();

            var response = mediator.Index(viewModel);

            response.AssertCode(LoginMediatorCodes.Index.AccountLocked);
        }
예제 #11
0
        public void PendingActivation()
        {
            var viewModel = new LoginViewModelBuilder().WithValidCredentials().Build();

            var loginResultViewModel     = new LoginResultViewModelBuilder(UserStatuses.PendingActivation).Build();
            var candidateServiceProvider = new Mock <ICandidateServiceProvider>();

            candidateServiceProvider.Setup(p => p.Login(viewModel)).Returns(loginResultViewModel);
            var mediator = new LoginMediatorBuilder().With(candidateServiceProvider).Build();

            var response = mediator.Index(viewModel);

            response.AssertCodeAndMessage(LoginMediatorCodes.Index.PendingActivation);
        }
예제 #12
0
        public void LoginFailed()
        {
            var viewModel = new LoginViewModelBuilder().WithEmailAddress(LoginViewModelBuilder.ValidEmailAddress).WithPassword(LoginViewModelBuilder.InvalidPassword).Build();

            const string viewModelMessage         = "Invalid Email Address or Password";
            var          candidateServiceProvider = new Mock <ICandidateServiceProvider>();

            candidateServiceProvider.Setup(p => p.Login(viewModel)).Returns(new LoginResultViewModelBuilder(UserStatuses.Unknown, false).WithViewModelMessage(viewModelMessage).Build);
            var mediator = new LoginMediatorBuilder().With(candidateServiceProvider).Build();

            var response = mediator.Index(viewModel);

            response.AssertCode(LoginMediatorCodes.Index.LoginFailed, true, true);
            response.Parameters.Should().Be(viewModelMessage);
        }
예제 #13
0
        public void MobileVerificationRequired()
        {
            var viewModel = new LoginViewModelBuilder().WithValidCredentials().Build();

            var loginResultViewModel     = new LoginResultViewModelBuilder().MobileVerificationRequired().Build();
            var candidateServiceProvider = new Mock <ICandidateServiceProvider>();

            candidateServiceProvider.Setup(p => p.Login(viewModel)).Returns(loginResultViewModel);
            var mediator = new LoginMediatorBuilder().With(candidateServiceProvider).Build();

            var response = mediator.Index(viewModel);

            response.AssertCode(LoginMediatorCodes.Index.Ok);
            response.ViewModel.MobileVerificationRequired.Should().BeTrue();
        }
예제 #14
0
        public async Task Login_LoginViewModel_FailedSignIn_ReturnsExpectedView()
        {
            using var controller = AccountControllerBuilder
                                   .Create()
                                   .WithSignInResult(Result.Failure <SignInResponse>(new List <ErrorDetails>()))
                                   .Build();

            var result = await controller.Login(LoginViewModelBuilder.Create().Build()) as ViewResult;

            Assert.NotNull(result);

            var viewModel = result.Model as LoginViewModel;

            Assert.NotNull(viewModel);
        }
예제 #15
0
        public void Us616_Ac7_MobileVerificationRequiredLogin()
        {
            var candidateId        = Guid.NewGuid();
            var userAccountService = new Mock <IUserAccountService>();

            userAccountService.Setup(s => s.GetUserStatus(LoginViewModelBuilder.ValidEmailAddress)).Returns(UserStatuses.Active);
            var candidateService = new Mock <ICandidateService>();

            candidateService.Setup(cs => cs.Authenticate(LoginViewModelBuilder.ValidEmailAddress, LoginViewModelBuilder.ValidPassword)).Returns(new CandidateBuilder(candidateId).AllowMobile(true).VerifiedMobile(false).Build);
            var provider  = new CandidateServiceProviderBuilder().With(candidateService).With(userAccountService).Build();
            var viewModel = new LoginViewModelBuilder().WithValidCredentials().Build();

            var resultViewModel = provider.Login(viewModel);

            resultViewModel.MobileVerificationRequired.Should().BeTrue();
        }
예제 #16
0
        public void ReturnUrl()
        {
            var viewModel = new LoginViewModelBuilder().WithValidCredentials().Build();

            const string returnUrl        = "http://return.url.com";
            var          userDataProvider = new Mock <IUserDataProvider>();

            userDataProvider.Setup(p => p.Pop(UserDataItemNames.ReturnUrl)).Returns(returnUrl);
            var candidateServiceProvider = new Mock <ICandidateServiceProvider>();

            candidateServiceProvider.Setup(p => p.Login(viewModel)).Returns(new LoginResultViewModelBuilder().Build);
            var mediator = new LoginMediatorBuilder().With(candidateServiceProvider).With(userDataProvider).Build();

            var response = mediator.Index(viewModel);

            response.AssertCode(LoginMediatorCodes.Index.ReturnUrl, true, true);
            response.Parameters.Should().Be(returnUrl);
        }
예제 #17
0
        public void Ok()
        {
            var viewModel = new LoginViewModelBuilder().WithValidCredentials().Build();

            var candidateServiceProvider = new Mock <ICandidateServiceProvider>();

            candidateServiceProvider.Setup(p => p.Login(viewModel)).Returns(new LoginResultViewModelBuilder().Build);
            candidateServiceProvider.Setup(x => x.GetApprenticeshipApplications(It.IsAny <Guid>(), It.IsAny <bool>())).Returns(new List <ApprenticeshipApplicationSummary>());
            candidateServiceProvider.Setup(x => x.GetCandidate(It.IsAny <string>())).Returns(new Candidate {
                EntityId = Guid.Empty
            });

            var mediator = new LoginMediatorBuilder().With(candidateServiceProvider).Build();

            var response = mediator.Index(viewModel);

            response.AssertCodeAndMessage(LoginMediatorCodes.Index.Ok);
        }
예제 #18
0
        public async Task Login_LoginViewModel_FailedSignIn_AddsUsernameOrPasswordValidationError()
        {
            using var controller = AccountControllerBuilder
                                   .Create()
                                   .WithSignInResult(Result.Failure <SignInResponse>(new List <ErrorDetails> { LoginUserErrors.UserNameOrPasswordIncorrect() }))
                                   .Build();

            await controller.Login(LoginViewModelBuilder.Create().Build());

            var modelState = controller.ModelState;

            modelState.IsValid.Should().BeFalse();
            modelState.Count.Should().Be(2);

            foreach ((string key, ModelStateEntry entry) in modelState)
            {
                entry.Errors.Count.Should().Be(1);
                entry.Errors.First().ErrorMessage.Should().Be(AccountController.SignInErrorMessage);
            }
        }
예제 #19
0
        public void TermsAndConditionsVersion()
        {
            var viewModel = new LoginViewModelBuilder().WithValidCredentials().Build();

            const string returnUrl            = "http://return.url.com";
            var          configurationManager = new Mock <IConfigurationManager>();

            configurationManager.Setup(x => x.GetAppSetting <string>(It.IsAny <string>())).Returns("2");
            var userDataProvider = new Mock <IUserDataProvider>();

            userDataProvider.Setup(p => p.Pop(UserDataItemNames.ReturnUrl)).Returns(returnUrl);
            var candidateServiceProvider = new Mock <ICandidateServiceProvider>();

            candidateServiceProvider.Setup(p => p.Login(viewModel)).Returns(new LoginResultViewModelBuilder().WithAcceptedTermsAndConditionsVersion("1").Build);
            var mediator = new LoginMediatorBuilder().With(candidateServiceProvider).With(userDataProvider).With(configurationManager).Build();

            var response = mediator.Index(viewModel);

            response.AssertCode(LoginMediatorCodes.Index.TermsAndConditionsNeedAccepted, true, true);
            response.Parameters.Should().Be(returnUrl);
        }
예제 #20
0
        public void ReturnUrl()
        {
            var viewModel = new LoginViewModelBuilder().WithValidCredentials().Build();

            const string returnUrl        = "/localUrl/";
            var          userDataProvider = new Mock <IUserDataProvider>();

            userDataProvider.Setup(p => p.Pop(UserDataItemNames.ReturnUrl)).Returns(returnUrl);
            var candidateServiceProvider = new Mock <ICandidateServiceProvider>();

            candidateServiceProvider.Setup(p => p.Login(viewModel)).Returns(new LoginResultViewModelBuilder().Build);
            candidateServiceProvider.Setup(x => x.GetApprenticeshipApplications(It.IsAny <Guid>(), It.IsAny <bool>())).Returns(new List <ApprenticeshipApplicationSummary>());
            candidateServiceProvider.Setup(x => x.GetCandidate(It.IsAny <string>())).Returns(new Candidate {
                EntityId = Guid.Empty
            });
            var mediator = new LoginMediatorBuilder().With(candidateServiceProvider).With(userDataProvider).Build();

            var response = mediator.Index(viewModel);

            response.AssertCode(LoginMediatorCodes.Index.ReturnUrl, true, true);
            response.Parameters.Should().Be(returnUrl);
        }
예제 #21
0
        public void PendingUsernameVerificationRequired(bool expectedValue)
        {
            // Arrange.
            var viewModel = new LoginViewModelBuilder().WithValidCredentials().Build();

            var loginResultViewModel     = new LoginResultViewModelBuilder().PendingUsernameVerificationRequired(expectedValue).Build();
            var candidateServiceProvider = new Mock <ICandidateServiceProvider>();

            candidateServiceProvider.Setup(p => p.Login(viewModel)).Returns(loginResultViewModel);
            candidateServiceProvider.Setup(x => x.GetApprenticeshipApplications(It.IsAny <Guid>(), It.IsAny <bool>())).Returns(new List <ApprenticeshipApplicationSummary>());
            candidateServiceProvider.Setup(x => x.GetCandidate(It.IsAny <string>())).Returns(new Candidate {
                EntityId = Guid.Empty
            });

            var mediator = new LoginMediatorBuilder().With(candidateServiceProvider).Build();

            // Act.
            var response = mediator.Index(viewModel);

            // Assert.
            response.AssertCodeAndMessage(LoginMediatorCodes.Index.Ok);
            response.ViewModel.PendingUsernameVerificationRequired.Should().Be(expectedValue);
        }
예제 #22
0
        public void ApprenticeshipDetails()
        {
            var viewModel = new LoginViewModelBuilder().WithValidCredentials().Build();

            const string vacancyId        = "1";
            var          userDataProvider = new Mock <IUserDataProvider>();

            userDataProvider.Setup(p => p.Pop(CandidateDataItemNames.LastViewedVacancyId)).Returns(vacancyId);
            var candidateServiceProvider = new Mock <ICandidateServiceProvider>();

            candidateServiceProvider.Setup(p => p.Login(viewModel)).Returns(new LoginResultViewModelBuilder().WithEmailAddress(LoginViewModelBuilder.ValidEmailAddress).Build);
            var entityId = Guid.NewGuid();

            candidateServiceProvider.Setup(p => p.GetCandidate(LoginViewModelBuilder.ValidEmailAddress)).Returns(new Candidate {
                EntityId = entityId
            });
            var mediator = new LoginMediatorBuilder().With(candidateServiceProvider).With(userDataProvider).Build();

            var response = mediator.Index(viewModel);

            response.AssertCode(LoginMediatorCodes.Index.ApprenticeshipDetails, true, true);
            response.Parameters.Should().Be(vacancyId);
        }
예제 #23
0
        public void TermsAndConditionsVersion()
        {
            var viewModel = new LoginViewModelBuilder().WithValidCredentials().Build();

            const string returnUrl            = "/allowedasolutoepath";
            var          configurationService = new Mock <IConfigurationService>();

            configurationService.Setup(x => x.Get <CommonWebConfiguration>())
            .Returns(new CommonWebConfiguration {
                TermsAndConditionsVersion = "2", VacancyResultsPerPage = 5
            });
            var userDataProvider = new Mock <IUserDataProvider>();

            userDataProvider.Setup(p => p.Pop(UserDataItemNames.ReturnUrl)).Returns(returnUrl);
            var candidateServiceProvider = new Mock <ICandidateServiceProvider>();

            candidateServiceProvider.Setup(p => p.Login(viewModel))
            .Returns(new LoginResultViewModelBuilder().WithAcceptedTermsAndConditionsVersion("1").Build);
            candidateServiceProvider.Setup(x => x.GetApprenticeshipApplications(It.IsAny <Guid>(), It.IsAny <bool>()))
            .Returns(new List <ApprenticeshipApplicationSummary>());
            candidateServiceProvider.Setup(x => x.GetCandidate(It.IsAny <string>()))
            .Returns(new Candidate {
                EntityId = Guid.Empty
            });

            var mediator =
                new LoginMediatorBuilder().With(candidateServiceProvider)
                .With(userDataProvider)
                .With(configurationService)
                .Build();

            var response = mediator.Index(viewModel);

            response.AssertCode(LoginMediatorCodes.Index.TermsAndConditionsNeedAccepted, true, true);
            response.Parameters.Should().Be(returnUrl);
        }
예제 #24
0
        public async Task Login_LoginViewModel_InvalidViewModel_WithoutEmailAddressAndPassword__ReturnsExpectedView()
        {
            using var controller = AccountControllerBuilder
                                   .Create()
                                   .WithSignInResult(Result.Failure <SignInResponse>(new List <ErrorDetails>()))
                                   .Build();

            controller.ModelState.AddModelError(string.Empty, "Fake error!");

            var inputModel = LoginViewModelBuilder
                             .Create()
                             .Build();

            var result = await controller.Login(inputModel) as ViewResult;

            Assert.NotNull(result);

            var viewModel = result.Model as LoginViewModel;

            Assert.NotNull(viewModel);
            viewModel.ReturnUrl.Should().Be(inputModel.ReturnUrl);
            viewModel.Password.Should().BeNull();
            viewModel.EmailAddress.Should().BeNull();
        }