示例#1
0
        public void Registering_delegate_should_send_SupervisorDelegate_email_for_matching_id_record_only()
        {
            // Given
            const int supervisorDelegateId  = 2;
            var       supervisorDelegateIds = new List <int> {
                1, 2, 3, 4, 5
            };
            var model = RegistrationModelTestHelper.GetDefaultDelegateRegistrationModel();

            GivenPendingSupervisorDelegateIdsForEmailAre(supervisorDelegateIds);

            // When
            registrationService.RegisterDelegate(
                model,
                string.Empty,
                false,
                supervisorDelegateId
                );

            // Then
            A.CallTo(() => frameworkNotificationService.SendSupervisorDelegateAcceptance(supervisorDelegateId, 0))
            .MustHaveHappened();
            A.CallTo(
                () => frameworkNotificationService.SendSupervisorDelegateAcceptance(
                    A <int> .That.Matches(id => id != supervisorDelegateId), A <int> ._
                    )
                ).MustNotHaveHappened();
        }
        public async Task RegisterAdmin_Sets_tc_agreed_to_null_when_registerJourneyContainsTermsAndConditions_is_false()
        {
            using var transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled);

            // Given
            var registrationModel = RegistrationModelTestHelper.GetDefaultCentreManagerRegistrationModel();
            var currentTime       = new DateTime(2022, 6, 17, 14, 05, 30);

            A.CallTo(() => clockService.UtcNow).Returns(currentTime);

            // When
            service.RegisterAdmin(registrationModel, false);

            // Then
            var user     = userDataService.GetAdminUserByEmailAddress(registrationModel.Email) !;
            var tcAgreed = await connection.GetTCAgreedByAdminIdAsync(user.Id);

            user.FirstName.Should().Be(registrationModel.FirstName);
            user.LastName.Should().Be(registrationModel.LastName);
            user.CentreId.Should().Be(registrationModel.Centre);
            user.Password.Should().Be(registrationModel.PasswordHash);
            user.IsCentreAdmin.Should().BeTrue();
            user.IsCentreManager.Should().BeTrue();
            tcAgreed.Should().BeNull();
        }
示例#3
0
        public void RegisterDelegateByCentre_schedules_welcome_email_if_notify_date_set()
        {
            // Given
            const string baseUrl = "base.com";
            var          model   = RegistrationModelTestHelper.GetDefaultDelegateRegistrationModel(
                passwordHash: null,
                notifyDate: new DateTime(2200, 1, 1)
                );

            A.CallTo(() => registrationDataService.RegisterDelegate(model)).Returns(NewCandidateNumber);

            // When
            registrationService.RegisterDelegateByCentre(model, baseUrl);

            // Then
            A.CallTo(
                () => passwordResetService.GenerateAndScheduleDelegateWelcomeEmail(
                    model.Email,
                    NewCandidateNumber,
                    baseUrl,
                    model.NotifyDate.Value,
                    "RegisterDelegateByCentre_Refactor"
                    )
                ).MustHaveHappened(1, Times.Exactly);
        }
        public async Task RegisterAdmin_sets_all_fields_correctly_on_centre_manager_admin_registration()
        {
            using var transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled);

            // Given
            var registrationModel = RegistrationModelTestHelper.GetDefaultCentreManagerRegistrationModel();
            var currentTime       = new DateTime(2022, 6, 17, 14, 05, 30);

            A.CallTo(() => clockService.UtcNow).Returns(currentTime);

            // When
            service.RegisterAdmin(registrationModel, true);

            // Then
            var user     = userDataService.GetAdminUserByEmailAddress(registrationModel.Email) !;
            var tcAgreed = await connection.GetTCAgreedByAdminIdAsync(user.Id);

            using (new AssertionScope())
            {
                user.FirstName.Should().Be(registrationModel.FirstName);
                user.LastName.Should().Be(registrationModel.LastName);
                user.CentreId.Should().Be(registrationModel.Centre);
                user.Password.Should().Be(registrationModel.PasswordHash);
                user.IsCentreAdmin.Should().BeTrue();
                user.IsCentreManager.Should().BeTrue();
                tcAgreed.Should().Be(currentTime);
            }
        }
示例#5
0
        public void RegisterDelegateByCentre_should_add_CandidateId_to_all_SupervisorDelegate_records_found_by_email()
        {
            // Given
            const string baseUrl = "base.com";
            var          supervisorDelegateIds = new List <int> {
                1, 2, 3, 4, 5
            };
            var model = RegistrationModelTestHelper.GetDefaultDelegateRegistrationModel();

            GivenPendingSupervisorDelegateIdsForEmailAre(supervisorDelegateIds);
            A.CallTo(() => registrationDataService.RegisterDelegate(model))
            .Returns(NewCandidateNumber);
            A.CallTo(
                () => userDataService.GetDelegateUserByCandidateNumber(
                    NewCandidateNumber,
                    RegistrationModelTestHelper.Centre
                    )
                )
            .Returns(new DelegateUser {
                Id = 777
            });

            // When
            registrationService.RegisterDelegateByCentre(model, baseUrl);

            // Then
            A.CallTo(
                () => supervisorDelegateService.AddDelegateIdToSupervisorDelegateRecords(
                    A <IEnumerable <int> > .That.IsSameSequenceAs(supervisorDelegateIds),
                    777
                    )
                ).MustHaveHappened();
        }
示例#6
0
        public void Registering_delegate_calls_data_service_to_set_prn()
        {
            // Given
            const string clientIp = ApprovedIpPrefix + ".100";
            var          model    = RegistrationModelTestHelper.GetDefaultDelegateRegistrationModel();

            // When
            var(_, approved) = registrationService.RegisterDelegate(
                model,
                clientIp,
                false
                );

            // Then
            A.CallTo(
                () =>
                userDataService.UpdateDelegateProfessionalRegistrationNumber(
                    A <int> ._,
                    model.ProfessionalRegistrationNumber,
                    true
                    )
                )
            .MustHaveHappenedOnceExactly();
            approved.Should().BeTrue();
        }
示例#7
0
        public void Registering_delegate_should_add_Confirmed_only_to_SupervisorDelegate_record_with_matching_id()
        {
            // Given
            const int matchingSupervisorDelegateId = 2;
            var       supervisorDelegateIds        = new List <int> {
                1, 2, 3, 4, 5
            };
            var model = RegistrationModelTestHelper.GetDefaultDelegateRegistrationModel();

            GivenPendingSupervisorDelegateIdsForEmailAre(supervisorDelegateIds);

            // When
            registrationService.RegisterDelegate(
                model,
                string.Empty,
                false,
                matchingSupervisorDelegateId
                );

            // Then
            A.CallTo(
                () => supervisorDelegateService.ConfirmSupervisorDelegateRecord(matchingSupervisorDelegateId)
                ).MustHaveHappened();
            A.CallTo(
                () => supervisorDelegateService.ConfirmSupervisorDelegateRecord(
                    A <int> .That.Matches(id => id != matchingSupervisorDelegateId)
                    )
                ).MustNotHaveHappened();
        }
        public void AdminRegistrationModel_without_isCmsManager_or_isCmsAdmin_populates_expected_fields()
        {
            // Given
            var adminRegistrationModel =
                RegistrationModelTestHelper.GetDefaultAdminRegistrationModel(isCmsAdmin: false, isCmsManager: false);

            // Then
            adminRegistrationModel.IsContentManager.Should().BeFalse();
            adminRegistrationModel.ImportOnly.Should().BeFalse();
        }
示例#9
0
        public void Registering_delegate_returns_candidate_number()
        {
            // Given
            var model = RegistrationModelTestHelper.GetDefaultDelegateRegistrationModel();

            // When
            var candidateNumber =
                registrationService.RegisterDelegate(model, string.Empty, false)
                .candidateNumber;

            // Then
            candidateNumber.Should().Be(NewCandidateNumber);
        }
示例#10
0
        public void Error_in_RegisterCentreManager_throws_exception()
        {
            // Given
            var model = RegistrationModelTestHelper.GetDefaultCentreManagerRegistrationModel();

            A.CallTo(() => registrationDataService.RegisterDelegate(A <DelegateRegistrationModel> ._)).Returns("-1");

            // When
            Action act = () => registrationService.RegisterCentreManager(model, 1);

            // Then
            act.Should().Throw <Exception>();
        }
示例#11
0
        public void Error_when_registering_delegate_returns_error_code()
        {
            // Given
            var model = RegistrationModelTestHelper.GetDefaultDelegateRegistrationModel();

            A.CallTo(() => registrationDataService.RegisterDelegate(model)).Returns("-1");

            // When
            Action act = () => registrationService.RegisterDelegate(model, string.Empty, false);

            // Then
            act.Should().Throw <DelegateCreationFailedException>();
        }
示例#12
0
        public void Registering_automatically_approved_does_not_send_email()
        {
            // Given
            var model = RegistrationModelTestHelper.GetDefaultDelegateRegistrationModel();

            // When
            registrationService.RegisterDelegate(model, "123.456.789.100", false);

            // Then
            A.CallTo(
                () =>
                emailService.SendEmail(A <Email> ._)
                ).MustNotHaveHappened();
        }
示例#13
0
        public void Registering_admin_delegate_does_not_send_email()
        {
            // Given
            var model = RegistrationModelTestHelper.GetDefaultCentreManagerRegistrationModel();

            // When
            registrationService.RegisterCentreManager(model, 1);

            // Then
            A.CallTo(
                () =>
                emailService.SendEmail(A <Email> ._)
                ).MustNotHaveHappened();
        }
        public void GetNotifcationRoles_returns_1_2_for_new_centre_manager()
        {
            // Given
            var expectedRoles = new List <int> {
                1, 2
            };
            var adminRegistrationModel = RegistrationModelTestHelper.GetDefaultCentreManagerRegistrationModel();

            // When
            var result = adminRegistrationModel.GetNotificationRoles();

            // Then
            result.Should().BeEquivalentTo(expectedRoles);
        }
示例#15
0
        public void RegisterDelegateByCentre_does_not_set_password_if_passwordHash_is_null()
        {
            // Given
            var model = RegistrationModelTestHelper.GetDefaultDelegateRegistrationModel();

            model.PasswordHash = null;
            A.CallTo(() => registrationDataService.RegisterDelegate(model)).Returns(NewCandidateNumber);

            // When
            registrationService.RegisterDelegateByCentre(model, "");

            // Then
            A.CallTo(() => registrationDataService.RegisterDelegate(model)).MustHaveHappened(1, Times.Exactly);
            A.CallTo(() => passwordDataService.SetPasswordByCandidateNumber(A <string> ._, A <string> ._))
            .MustNotHaveHappened();
        }
示例#16
0
        public void Registering_admin_delegate_registers_delegate_as_approved()
        {
            // Given
            var model = RegistrationModelTestHelper.GetDefaultCentreManagerRegistrationModel();

            // When
            registrationService.RegisterCentreManager(model, 1);

            // Then
            A.CallTo(
                () =>
                registrationDataService.RegisterDelegate(
                    A <DelegateRegistrationModel> .That.Matches(d => d.Approved)
                    )
                )
            .MustHaveHappened();
        }
示例#17
0
        public void Registering_delegate_on_localhost_registers_delegate_as_approved()
        {
            // Given
            var model = RegistrationModelTestHelper.GetDefaultDelegateRegistrationModel();

            // When
            registrationService.RegisterDelegate(model, "::1", false);

            // Then
            A.CallTo(
                () =>
                registrationDataService.RegisterDelegate(
                    A <DelegateRegistrationModel> .That.Matches(d => d.Approved)
                    )
                )
            .MustHaveHappened();
        }
示例#18
0
        public void Registering_delegate_with_unapproved_IP_registers_delegate_as_unapproved()
        {
            // Given
            var model = RegistrationModelTestHelper.GetDefaultDelegateRegistrationModel();

            // When
            registrationService.RegisterDelegate(model, "987.654.321.100", false);

            // Then
            A.CallTo(
                () =>
                registrationDataService.RegisterDelegate(
                    A <DelegateRegistrationModel> .That.Matches(d => !d.Approved)
                    )
                )
            .MustHaveHappened();
        }
示例#19
0
        public void Registering_delegate_should_set_password()
        {
            // Given
            var model = RegistrationModelTestHelper.GetDefaultDelegateRegistrationModel();

            // When
            registrationService.RegisterDelegate(model, string.Empty, false);

            // Then
            A.CallTo(
                () =>
                passwordDataService.SetPasswordByCandidateNumber(
                    NewCandidateNumber,
                    RegistrationModelTestHelper.PasswordHash
                    )
                ).MustHaveHappened();
        }
示例#20
0
        public void Registering_delegate_sends_approval_email_with_refactored_tracking_system_link()
        {
            // Given
            var model = RegistrationModelTestHelper.GetDefaultDelegateRegistrationModel();

            // When
            registrationService.RegisterDelegate(model, string.Empty, true);

            // Then
            A.CallTo(
                () =>
                notificationDataService.GetAdminRecipientsForCentreNotification(
                    model.Centre,
                    4
                    )
                ).MustHaveHappened();
        }
示例#21
0
        public void Registering_admin_delegate_should_set_password()
        {
            // Given
            var model = RegistrationModelTestHelper.GetDefaultCentreManagerRegistrationModel();

            // When
            registrationService.RegisterCentreManager(model, 1);

            // Then
            A.CallTo(
                () =>
                passwordDataService.SetPasswordByCandidateNumber(
                    NewCandidateNumber,
                    RegistrationModelTestHelper.PasswordHash
                    )
                ).MustHaveHappened();
        }
示例#22
0
        public void RegisterDelegateByCentre_should_not_send_SupervisorDelegate_email()
        {
            // Given
            const string baseUrl = "base.com";
            var          supervisorDelegateIds = new List <int> {
                1, 2, 3, 4, 5
            };
            var model = RegistrationModelTestHelper.GetDefaultDelegateRegistrationModel();

            GivenPendingSupervisorDelegateIdsForEmailAre(supervisorDelegateIds);

            // When
            registrationService.RegisterDelegateByCentre(model, baseUrl);

            // Then
            A.CallTo(() => frameworkNotificationService.SendSupervisorDelegateAcceptance(A <int> ._, A <int> ._))
            .MustNotHaveHappened();
        }
示例#23
0
        public void RegisterDelegateByCentre_should_not_add_Confirmed_to_any_SupervisorDelegate_record()
        {
            // Given
            const string baseUrl = "base.com";
            var          supervisorDelegateIds = new List <int> {
                1, 2, 3, 4, 5
            };
            var model = RegistrationModelTestHelper.GetDefaultDelegateRegistrationModel();

            GivenPendingSupervisorDelegateIdsForEmailAre(supervisorDelegateIds);

            // When
            registrationService.RegisterDelegateByCentre(model, baseUrl);

            // Then
            A.CallTo(() => supervisorDelegateService.ConfirmSupervisorDelegateRecord(A <int> ._))
            .MustNotHaveHappened();
        }
示例#24
0
        public void Registering_delegate_should_not_update_any_SupervisorDelegate_records_if_none_found()
        {
            // Given
            var model = RegistrationModelTestHelper.GetDefaultDelegateRegistrationModel();

            GivenNoPendingSupervisorDelegateRecordsForEmail();

            // When
            registrationService.RegisterDelegate(model, string.Empty, false, 999);

            // Then
            A.CallTo(
                () => supervisorDelegateService.AddDelegateIdToSupervisorDelegateRecords(
                    A <IEnumerable <int> > ._,
                    A <int> ._
                    )
                ).MustNotHaveHappened();
        }
示例#25
0
        public void RegisterCentreManager_calls_data_service_to_set_prn()
        {
            // Given
            var model = RegistrationModelTestHelper.GetDefaultCentreManagerRegistrationModel();

            // When
            registrationService.RegisterCentreManager(model, 1, true);

            // Then
            A.CallTo(
                () =>
                userDataService.UpdateDelegateProfessionalRegistrationNumber(
                    A <int> ._,
                    model.ProfessionalRegistrationNumber,
                    true
                    )
                )
            .MustHaveHappenedOnceExactly();
        }
示例#26
0
        public void Sets_all_fields_correctly_on_centre_manager_admin_registration()
        {
            using var transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled);

            // Given
            var registrationModel = RegistrationModelTestHelper.GetDefaultCentreManagerRegistrationModel();

            // When
            service.RegisterAdmin(registrationModel);

            // Then
            var user = userDataService.GetAdminUserByEmailAddress(registrationModel.Email) !;

            user.FirstName.Should().Be(registrationModel.FirstName);
            user.LastName.Should().Be(registrationModel.LastName);
            user.CentreId.Should().Be(registrationModel.Centre);
            user.Password.Should().Be(registrationModel.PasswordHash);
            user.IsCentreAdmin.Should().BeTrue();
            user.IsCentreManager.Should().BeTrue();
        }
示例#27
0
        public void RegisterCentreManager_calls_all_relevant_registration_methods()
        {
            // Given
            var model = RegistrationModelTestHelper.GetDefaultCentreManagerRegistrationModel();

            // When
            registrationService.RegisterCentreManager(model, 1);

            // Then
            A.CallTo(() => registrationDataService.RegisterDelegate(A <DelegateRegistrationModel> ._))
            .MustHaveHappened(1, Times.Exactly);
            A.CallTo(
                () =>
                passwordDataService.SetPasswordByCandidateNumber(A <string> ._, A <string> ._)
                ).MustHaveHappened(1, Times.Exactly);
            A.CallTo(() => registrationDataService.RegisterAdmin(model))
            .MustHaveHappened(1, Times.Exactly);
            A.CallTo(() => centresDataService.SetCentreAutoRegistered(RegistrationModelTestHelper.Centre))
            .MustHaveHappened(1, Times.Exactly);
        }
示例#28
0
        public void RegisterDelegateByCentre_calls_data_service_to_set_prn()
        {
            // Given
            var model = RegistrationModelTestHelper.GetDefaultDelegateRegistrationModel();

            A.CallTo(() => registrationDataService.RegisterDelegate(model)).Returns(NewCandidateNumber);

            // When
            registrationService.RegisterDelegateByCentre(model, "");

            // Then
            A.CallTo(
                () =>
                userDataService.UpdateDelegateProfessionalRegistrationNumber(
                    A <int> ._,
                    model.ProfessionalRegistrationNumber,
                    true
                    )
                )
            .MustHaveHappenedOnceExactly();
        }
示例#29
0
        public void Error_when_registering_delegate_fails_fast()
        {
            // Given
            var model = RegistrationModelTestHelper.GetDefaultDelegateRegistrationModel();

            A.CallTo(() => registrationDataService.RegisterDelegate(model)).Returns("-1");

            // When
            Action act = () => registrationService.RegisterDelegate(model, string.Empty, false);

            // Then
            act.Should().Throw <DelegateCreationFailedException>();
            A.CallTo(
                () =>
                emailService.SendEmail(A <Email> ._)
                ).MustNotHaveHappened();
            A.CallTo(
                () =>
                passwordDataService.SetPasswordByCandidateNumber(A <string> ._, A <string> ._)
                ).MustNotHaveHappened();
        }
示例#30
0
        public void RegisterDelegateByCentre_does_not_schedule_welcome_email_if_notify_date_not_set()
        {
            // Given
            const string baseUrl = "base.com";
            var          model   = RegistrationModelTestHelper.GetDefaultDelegateRegistrationModel();

            A.CallTo(() => registrationDataService.RegisterDelegate(model)).Returns(NewCandidateNumber);

            // When
            registrationService.RegisterDelegateByCentre(model, baseUrl);

            // Then
            A.CallTo(
                () => passwordResetService.GenerateAndScheduleDelegateWelcomeEmail(
                    A <string> ._,
                    NewCandidateNumber,
                    A <string> ._,
                    A <DateTime> ._,
                    A <string> ._
                    )
                ).MustNotHaveHappened();
        }