예제 #1
0
        public void Changed_answer_maps_to_linked_field_correctly(
            CentreAnswersData oldAnswers,
            CentreAnswersData newAnswers,
            string expectedLinkedFieldName,
            int expectedLinkedFieldNumber,
            string expectedOldValue,
            string expectedNewValue
            )
        {
            // Given
            A.CallTo(() => centreCustomPromptsService.GetPromptNameForCentreAndPromptNumber(A <int> ._, A <int> ._))
            .Returns(expectedLinkedFieldName);

            var expectedResult = new List <LinkedFieldChange>
            {
                new LinkedFieldChange(
                    expectedLinkedFieldNumber,
                    expectedLinkedFieldName,
                    expectedOldValue,
                    expectedNewValue
                    )
            };

            // When
            var result = LinkedFieldHelper.GetLinkedFieldChanges(
                oldAnswers,
                newAnswers,
                jobGroupsDataService,
                centreCustomPromptsService
                );

            // Then
            result.Should().BeEquivalentTo(expectedResult);
        }
예제 #2
0
        public void UpdateUserAccountDetailsForAllVerifiedUsers_with_incorrect_password_doesnt_update()
        {
            // Given
            var    adminUser          = UserTestHelper.GetDefaultAdminUser();
            var    delegateUser       = UserTestHelper.GetDefaultDelegateUser();
            string signedInEmail      = "*****@*****.**";
            string password           = "******";
            var    firstName          = "TestFirstName";
            var    lastName           = "TestLastName";
            var    email              = "*****@*****.**";
            var    accountDetailsData =
                new MyAccountDetailsData(adminUser.Id, delegateUser.Id, password, firstName, lastName, email, null);
            var centreAnswersData = new CentreAnswersData(2, 1, null, null, null, null, null, null);

            A.CallTo(() => userDataService.GetAdminUserById(adminUser.Id)).Returns(adminUser);
            A.CallTo(() => userDataService.GetDelegateUserById(delegateUser.Id)).Returns(delegateUser);
            A.CallTo(() => userDataService.GetAdminUserByEmailAddress(signedInEmail)).Returns(null);
            A.CallTo(() => userDataService.GetDelegateUsersByEmailAddress(signedInEmail))
            .Returns(new List <DelegateUser>());
            A.CallTo(() => userVerificationService.VerifyUsers(password, A <AdminUser?> ._, A <List <DelegateUser> > ._))
            .Returns(new UserAccountSet());
            A.CallTo(
                () => groupsService.SynchroniseUserChangesWithGroups(
                    A <DelegateUser> ._,
                    A <MyAccountDetailsData> ._,
                    A <CentreAnswersData> ._
                    )
                ).DoesNothing();

            // When
            userService.UpdateUserAccountDetailsForAllVerifiedUsers(accountDetailsData, centreAnswersData);

            // Then
            A.CallTo(() => userDataService.UpdateDelegateUsers(A <string> ._, A <string> ._, A <string> ._, null, A <int[]> ._))
            .MustNotHaveHappened();
            A.CallTo(() => userDataService.UpdateAdminUser(A <string> ._, A <string> ._, A <string> ._, null, A <int> ._))
            .MustNotHaveHappened();
            A.CallTo(
                () => userDataService.UpdateDelegateUserCentrePrompts(
                    A <int> ._,
                    A <int> ._,
                    A <string?> ._,
                    A <string?> ._,
                    A <string?> ._,
                    A <string?> ._,
                    A <string?> ._,
                    A <string?> ._
                    )
                )
            .MustNotHaveHappened();
            A.CallTo(
                () => groupsService.SynchroniseUserChangesWithGroups(
                    A <DelegateUser> ._,
                    A <MyAccountDetailsData> ._,
                    A <CentreAnswersData> ._
                    )
                ).MustNotHaveHappened();
        }
예제 #3
0
        public void SynchroniseUserChangesWithGroups(
            DelegateUser delegateAccountWithOldDetails,
            AccountDetailsData newDelegateDetails,
            CentreAnswersData newCentreAnswers
            )
        {
            var changedLinkedFields = LinkedFieldHelper.GetLinkedFieldChanges(
                delegateAccountWithOldDetails.GetCentreAnswersData(),
                newCentreAnswers,
                jobGroupsDataService,
                centreCustomPromptsService
                );

            var allSynchronisedGroupsAtCentre =
                GetSynchronisedGroupsForCentre(delegateAccountWithOldDetails.CentreId).ToList();

            foreach (var changedAnswer in changedLinkedFields)
            {
                var groupToRemoveDelegateFrom = allSynchronisedGroupsAtCentre.SingleOrDefault(
                    g => g.LinkedToField == changedAnswer.LinkedFieldNumber &&
                    GroupLabelMatchesAnswer(g.GroupLabel, changedAnswer.OldValue, changedAnswer.LinkedFieldName)
                    );

                var groupToAddDelegateTo = allSynchronisedGroupsAtCentre.SingleOrDefault(
                    g => g.LinkedToField == changedAnswer.LinkedFieldNumber &&
                    GroupLabelMatchesAnswer(g.GroupLabel, changedAnswer.NewValue, changedAnswer.LinkedFieldName)
                    );

                using var transaction = new TransactionScope();
                if (groupToRemoveDelegateFrom != null)
                {
                    RemoveDelegateFromGroup(delegateAccountWithOldDetails.Id, groupToRemoveDelegateFrom.GroupId);
                }

                if (groupToAddDelegateTo != null)
                {
                    groupsDataService.AddDelegateToGroup(
                        delegateAccountWithOldDetails.Id,
                        groupToAddDelegateTo.GroupId,
                        clockService.UtcNow,
                        1
                        );

                    EnrolDelegateOnGroupCourses(
                        delegateAccountWithOldDetails,
                        newDelegateDetails,
                        groupToAddDelegateTo.GroupId
                        );
                }

                transaction.Complete();
            }
        }
예제 #4
0
        public void UpdateUserAccountDetailsViaDelegateAccount_updates_admin_user_if_found_by_email()
        {
            // Given
            const string email        = "*****@*****.**";
            var          delegateUser = UserTestHelper.GetDefaultDelegateUser(emailAddress: email);
            var          adminUser    = UserTestHelper.GetDefaultAdminUser(emailAddress: email);

            A.CallTo(() => userDataService.GetDelegateUserById(delegateUser.Id)).Returns(delegateUser);
            A.CallTo(() => userDataService.GetDelegateUsersByEmailAddress(email))
            .Returns(new List <DelegateUser> {
                delegateUser
            });
            A.CallTo(() => userDataService.GetAdminUserByEmailAddress(email)).Returns(adminUser);
            var editDelegateDetailsData = new EditDelegateDetailsData(
                delegateUser.Id,
                delegateUser.FirstName !,
                delegateUser.LastName,
                delegateUser.EmailAddress !,
                delegateUser.AliasId
                );
            var centreAnswersData = new CentreAnswersData(
                delegateUser.CentreId,
                delegateUser.JobGroupId,
                delegateUser.Answer1,
                delegateUser.Answer2,
                delegateUser.Answer3,
                delegateUser.Answer4,
                delegateUser.Answer5,
                delegateUser.Answer6
                );

            // When
            userService.UpdateUserAccountDetailsViaDelegateAccount(editDelegateDetailsData, centreAnswersData);

            // Then
            A.CallTo(
                () => userDataService.UpdateAdminUser(
                    editDelegateDetailsData.FirstName,
                    editDelegateDetailsData.Surname,
                    editDelegateDetailsData.Email,
                    adminUser.ProfileImage,
                    adminUser.Id
                    )
                ).MustHaveHappened();
        }
예제 #5
0
        public void UpdateUserAccountDetailsViaDelegateAccount_updates_name_and_email_on_all_found_delegates()
        {
            // Given
            const string email              = "*****@*****.**";
            var          delegateUser       = UserTestHelper.GetDefaultDelegateUser(emailAddress: email);
            var          secondDelegateUser = UserTestHelper.GetDefaultDelegateUser(id: 3, emailAddress: email);

            A.CallTo(() => userDataService.GetDelegateUserById(delegateUser.Id)).Returns(delegateUser);
            A.CallTo(() => userDataService.GetDelegateUsersByEmailAddress(email))
            .Returns(new List <DelegateUser> {
                delegateUser, secondDelegateUser
            });
            A.CallTo(() => userDataService.GetAdminUserByEmailAddress(email)).Returns(null);
            var editDelegateDetailsData = new EditDelegateDetailsData(
                delegateUser.Id,
                delegateUser.FirstName !,
                delegateUser.LastName,
                delegateUser.EmailAddress !,
                delegateUser.AliasId
                );
            var centreAnswersData = new CentreAnswersData(
                delegateUser.CentreId,
                delegateUser.JobGroupId,
                delegateUser.Answer1,
                delegateUser.Answer2,
                delegateUser.Answer3,
                delegateUser.Answer4,
                delegateUser.Answer5,
                delegateUser.Answer6
                );

            // When
            userService.UpdateUserAccountDetailsViaDelegateAccount(editDelegateDetailsData, centreAnswersData);

            // Then
            A.CallTo(
                () => userDataService.UpdateDelegateAccountDetails(
                    editDelegateDetailsData.FirstName,
                    editDelegateDetailsData.Surname,
                    editDelegateDetailsData.Email,
                    A <int[]> .That.Matches(x => x.First() == 2 && x.Last() == 3)
                    )
                ).MustHaveHappened();
        }
예제 #6
0
        public static List <LinkedFieldChange> GetLinkedFieldChanges(
            CentreAnswersData oldAnswers,
            CentreAnswersData newAnswers,
            IJobGroupsDataService jobGroupsDataService,
            ICentreCustomPromptsService centreCustomPromptsService
            )
        {
            var changedLinkedFieldsWithAnswers = new List <LinkedFieldChange>();

            if (newAnswers.Answer1 != oldAnswers.Answer1)
            {
                var prompt1Name =
                    centreCustomPromptsService.GetPromptNameForCentreAndPromptNumber(oldAnswers.CentreId, 1);
                changedLinkedFieldsWithAnswers.Add(
                    new LinkedFieldChange(1, prompt1Name, oldAnswers.Answer1, newAnswers.Answer1)
                    );
            }

            if (newAnswers.Answer2 != oldAnswers.Answer2)
            {
                var prompt2Name =
                    centreCustomPromptsService.GetPromptNameForCentreAndPromptNumber(oldAnswers.CentreId, 2);
                changedLinkedFieldsWithAnswers.Add(
                    new LinkedFieldChange(2, prompt2Name, oldAnswers.Answer2, newAnswers.Answer2)
                    );
            }

            if (newAnswers.Answer3 != oldAnswers.Answer3)
            {
                var prompt3Name =
                    centreCustomPromptsService.GetPromptNameForCentreAndPromptNumber(oldAnswers.CentreId, 3);
                changedLinkedFieldsWithAnswers.Add(
                    new LinkedFieldChange(3, prompt3Name, oldAnswers.Answer3, newAnswers.Answer3)
                    );
            }

            if (newAnswers.JobGroupId != oldAnswers.JobGroupId)
            {
                var oldJobGroup = jobGroupsDataService.GetJobGroupName(oldAnswers.JobGroupId);
                var newJobGroup = jobGroupsDataService.GetJobGroupName(newAnswers.JobGroupId);
                changedLinkedFieldsWithAnswers.Add(new LinkedFieldChange(4, "Job Group", oldJobGroup, newJobGroup));
            }

            if (newAnswers.Answer4 != oldAnswers.Answer4)
            {
                var prompt4Name =
                    centreCustomPromptsService.GetPromptNameForCentreAndPromptNumber(oldAnswers.CentreId, 4);
                changedLinkedFieldsWithAnswers.Add(
                    new LinkedFieldChange(5, prompt4Name, oldAnswers.Answer4, newAnswers.Answer4)
                    );
            }

            if (newAnswers.Answer5 != oldAnswers.Answer5)
            {
                var prompt5Name =
                    centreCustomPromptsService.GetPromptNameForCentreAndPromptNumber(oldAnswers.CentreId, 5);
                changedLinkedFieldsWithAnswers.Add(
                    new LinkedFieldChange(6, prompt5Name, oldAnswers.Answer5, newAnswers.Answer5)
                    );
            }

            if (newAnswers.Answer6 != oldAnswers.Answer6)
            {
                var prompt6Name =
                    centreCustomPromptsService.GetPromptNameForCentreAndPromptNumber(oldAnswers.CentreId, 6);
                changedLinkedFieldsWithAnswers.Add(
                    new LinkedFieldChange(7, prompt6Name, oldAnswers.Answer6, newAnswers.Answer6)
                    );
            }

            return(changedLinkedFieldsWithAnswers);
        }
        public static List <LinkedFieldChange> GetLinkedFieldChanges(
            CentreAnswersData oldAnswers,
            CentreAnswersData newAnswers,
            IJobGroupsDataService jobGroupsDataService,
            ICentreRegistrationPromptsService centreRegistrationPromptsService
            )
        {
            var changedLinkedFieldsWithAnswers = new List <LinkedFieldChange>();

            if (newAnswers.Answer1 != oldAnswers.Answer1)
            {
                var prompt1Name =
                    centreRegistrationPromptsService.GetCentreRegistrationPromptNameAndNumber(oldAnswers.CentreId, RegistrationField.CentreRegistrationField1.Id);
                changedLinkedFieldsWithAnswers.Add(
                    new LinkedFieldChange(RegistrationField.CentreRegistrationField1.LinkedToFieldId, prompt1Name, oldAnswers.Answer1, newAnswers.Answer1)
                    );
            }

            if (newAnswers.Answer2 != oldAnswers.Answer2)
            {
                var prompt2Name =
                    centreRegistrationPromptsService.GetCentreRegistrationPromptNameAndNumber(oldAnswers.CentreId, RegistrationField.CentreRegistrationField2.Id);
                changedLinkedFieldsWithAnswers.Add(
                    new LinkedFieldChange(RegistrationField.CentreRegistrationField2.LinkedToFieldId, prompt2Name, oldAnswers.Answer2, newAnswers.Answer2)
                    );
            }

            if (newAnswers.Answer3 != oldAnswers.Answer3)
            {
                var prompt3Name =
                    centreRegistrationPromptsService.GetCentreRegistrationPromptNameAndNumber(oldAnswers.CentreId, RegistrationField.CentreRegistrationField3.Id);
                changedLinkedFieldsWithAnswers.Add(
                    new LinkedFieldChange(RegistrationField.CentreRegistrationField3.LinkedToFieldId, prompt3Name, oldAnswers.Answer3, newAnswers.Answer3)
                    );
            }

            if (newAnswers.JobGroupId != oldAnswers.JobGroupId)
            {
                var oldJobGroup = jobGroupsDataService.GetJobGroupName(oldAnswers.JobGroupId);
                var newJobGroup = jobGroupsDataService.GetJobGroupName(newAnswers.JobGroupId);
                changedLinkedFieldsWithAnswers.Add(new LinkedFieldChange(RegistrationField.JobGroup.LinkedToFieldId, "Job group", oldJobGroup, newJobGroup));
            }

            if (newAnswers.Answer4 != oldAnswers.Answer4)
            {
                var prompt4Name =
                    centreRegistrationPromptsService.GetCentreRegistrationPromptNameAndNumber(oldAnswers.CentreId, RegistrationField.CentreRegistrationField4.Id);
                changedLinkedFieldsWithAnswers.Add(
                    new LinkedFieldChange(RegistrationField.CentreRegistrationField4.LinkedToFieldId, prompt4Name, oldAnswers.Answer4, newAnswers.Answer4)
                    );
            }

            if (newAnswers.Answer5 != oldAnswers.Answer5)
            {
                var prompt5Name =
                    centreRegistrationPromptsService.GetCentreRegistrationPromptNameAndNumber(oldAnswers.CentreId, RegistrationField.CentreRegistrationField5.Id);
                changedLinkedFieldsWithAnswers.Add(
                    new LinkedFieldChange(RegistrationField.CentreRegistrationField5.LinkedToFieldId, prompt5Name, oldAnswers.Answer5, newAnswers.Answer5)
                    );
            }

            if (newAnswers.Answer6 != oldAnswers.Answer6)
            {
                var prompt6Name =
                    centreRegistrationPromptsService.GetCentreRegistrationPromptNameAndNumber(oldAnswers.CentreId, RegistrationField.CentreRegistrationField6.Id);
                changedLinkedFieldsWithAnswers.Add(
                    new LinkedFieldChange(RegistrationField.CentreRegistrationField6.LinkedToFieldId, prompt6Name, oldAnswers.Answer6, newAnswers.Answer6)
                    );
            }

            return(changedLinkedFieldsWithAnswers);
        }