private void AssertCorrectMethodsAreCalledForGenerateGroups( GroupGenerationDetails groupGenerationDetails, DateTime timeNow, int linkedToField, string?fullGroupLabel, string?customPromptOptionText = null, int?jobGroupId = null ) { var isJobGroup = groupGenerationDetails.RegistrationField.Equals(RegistrationField.JobGroup); using (new AssertionScope()) { if (!isJobGroup) { A.CallTo( () => centreRegistrationPromptsService.GetCentreRegistrationPromptsThatHaveOptionsByCentreId( groupGenerationDetails.CentreId ) ) .MustHaveHappenedOnceExactly(); A.CallTo(() => groupsDataService.GetGroupsForCentre(groupGenerationDetails.CentreId)) .MustHaveHappenedOnceExactly(); } A.CallTo( () => groupsDataService.AddDelegateGroup( A <GroupDetails> .That.Matches( gd => gd.CentreId == groupGenerationDetails.CentreId && gd.GroupLabel == fullGroupLabel && gd.GroupDescription == null && gd.AdminUserId == groupGenerationDetails.AdminId && gd.CreatedDate == timeNow && gd.LinkedToField == linkedToField && gd.SyncFieldChanges == groupGenerationDetails.SyncFieldChanges && gd.AddNewRegistrants == groupGenerationDetails.AddNewRegistrants && gd.PopulateExisting == groupGenerationDetails.PopulateExisting ) ) ).MustHaveHappenedOnceExactly(); A.CallTo( () => groupsDataService.AddDelegatesWithMatchingAnswersToGroup( NewGroupId, A <DateTime> ._, linkedToField, groupGenerationDetails.CentreId, isJobGroup ? null : customPromptOptionText, jobGroupId ) ) .MustHaveHappenedOnceExactly(); } }
public void GenerateGroupsFromRegistrationField(GroupGenerationDetails groupDetails) { var isJobGroup = groupDetails.RegistrationField.Equals(RegistrationField.JobGroup); var linkedToField = groupDetails.RegistrationField.LinkedToFieldId; (List <(int id, string name)> newGroupNames, string groupNamePrefix) = isJobGroup ? GetJobGroupsAndPrefix() : GetCentreRegistrationPromptsAndPrefix(groupDetails.CentreId, groupDetails.RegistrationField.Id); var groupsAtCentre = GetGroupsForCentre(groupDetails.CentreId).Select(g => g.GroupLabel).ToList(); using var transaction = new TransactionScope(); foreach (var(id, newGroupName) in newGroupNames) { var groupName = groupDetails.PrefixGroupName ? GetGroupNameWithPrefix(groupNamePrefix, newGroupName) : newGroupName; if (groupDetails.SkipDuplicateNames && groupsAtCentre.Contains(groupName)) { continue; } var newGroupId = AddDelegateGroup( groupDetails.CentreId, groupName, null, groupDetails.AdminId, linkedToField, groupDetails.SyncFieldChanges, groupDetails.AddNewRegistrants, groupDetails.PopulateExisting ); if (groupDetails.PopulateExisting) { groupsDataService.AddDelegatesWithMatchingAnswersToGroup( newGroupId, clockService.UtcNow, linkedToField, groupDetails.CentreId, isJobGroup ? null : newGroupName, isJobGroup ? id : (int?)null ); } } transaction.Complete(); }
GenerateGroupsFromRegistrationField_calls_data_service_methods_with_correct_values_for_custom_prompt() { // Given const string groupName = "Manager"; const string groupNamePrefix = "Role"; const int linkedToField = 1; var registrationField = RegistrationField.CentreRegistrationField1; var timeNow = DateTime.UtcNow; var groupGenerationDetails = new GroupGenerationDetails( 1, 101, registrationField, false, true, false, true, true ); var centreRegistrationPrompt = new CentreRegistrationPrompt(1, 1, groupNamePrefix, groupName, false); var centreRegistrationPrompts = new List <CentreRegistrationPrompt> { centreRegistrationPrompt }; SetUpGenerateGroupFakes(timeNow, centreRegistrationPrompts); // When groupsService.GenerateGroupsFromRegistrationField(groupGenerationDetails); // Then AssertCorrectMethodsAreCalledForGenerateGroups( groupGenerationDetails, timeNow, linkedToField, groupName, groupName ); }
GenerateGroupsFromRegistrationField_calls_data_service_methods_with_correct_values_for_job_group() { // Given const string groupName = "Nursing"; const int jobGroupId = 1; var timeNow = DateTime.UtcNow; var jobGroups = new List <(int id, string name)> { (jobGroupId, groupName) }; var registrationField = RegistrationField.JobGroup; var groupGenerationDetails = new GroupGenerationDetails( 1, 101, registrationField, false, true, false, true, true ); A.CallTo(() => jobGroupsDataService.GetJobGroupsAlphabetical()).Returns(jobGroups); SetUpGenerateGroupFakes(timeNow); // When groupsService.GenerateGroupsFromRegistrationField(groupGenerationDetails); // Then AssertCorrectMethodsAreCalledForGenerateGroups( groupGenerationDetails, timeNow, registrationField.LinkedToFieldId, groupName, groupName, jobGroupId ); }
GenerateGroupsFromRegistrationField_correctly_prefixes_group_name_with_custom_prompt_text_when_intended() { // Given const string groupName = "Manager"; const string groupNamePrefix = "Role"; var registrationField = RegistrationField.CentreRegistrationField1; var timeNow = DateTime.UtcNow; var groupGenerationDetails = new GroupGenerationDetails( 1, 101, registrationField, true, true, false, true, true ); var centreRegistrationPrompt = new CentreRegistrationPrompt(1, 1, groupNamePrefix, groupName, false); var centreRegistrationPrompts = new List <CentreRegistrationPrompt> { centreRegistrationPrompt }; SetUpGenerateGroupFakes(timeNow, centreRegistrationPrompts); // When groupsService.GenerateGroupsFromRegistrationField(groupGenerationDetails); // Then AssertCorrectMethodsAreCalledForGenerateGroups( groupGenerationDetails, timeNow, registrationField.LinkedToFieldId, $"{groupNamePrefix} - {groupName}", groupName ); }
public IActionResult GenerateGroups(GenerateGroupsViewModel model) { if (!ModelState.IsValid) { model.RegistrationFieldOptions = GetRegistrationFieldOptionsSelectList(model.RegistrationFieldOptionId); return(View(model)); } var adminId = User.GetAdminIdKnownNotNull() !; var centreId = User.GetCentreId(); var registrationField = (RegistrationField)model.RegistrationFieldOptionId; var fieldIsValid = centreRegistrationPromptsService .GetCentreRegistrationPromptsThatHaveOptionsByCentreId(centreId).Select(cp => cp.RegistrationField.Id) .Contains(registrationField !.Id) || registrationField.Equals(RegistrationField.JobGroup); if (!fieldIsValid) { return(StatusCode(500)); } var groupDetails = new GroupGenerationDetails( adminId, centreId, registrationField, model.PrefixGroupName, model.PopulateExisting, model.AddNewRegistrants, model.SyncFieldChanges, model.SkipDuplicateNames ); groupsService.GenerateGroupsFromRegistrationField(groupDetails); return(RedirectToAction("Index")); }
GenerateGroupsFromRegistrationField_skips_groups_with_duplicate_names() { // Given const string duplicateGroupName = "Manager"; const string nonDuplicateGroupName = "Receptionist"; const string groupNamePrefix = "Role"; var timeNow = DateTime.UtcNow; var groupGenerationDetails = new GroupGenerationDetails( 1, 101, RegistrationField.CentreRegistrationField1, false, true, false, true, true ); GivenCurrentTimeIs(timeNow); var centreRegistrationPrompt = new CentreRegistrationPrompt( 1, 1, groupNamePrefix, $"{duplicateGroupName}\r\n{nonDuplicateGroupName}", false ); var centreRegistrationPrompts = new List <CentreRegistrationPrompt> { centreRegistrationPrompt }; var groupAtCentre = new Group { GroupLabel = "Manager" }; SetUpGenerateGroupFakes(timeNow, centreRegistrationPrompts, new List <Group> { groupAtCentre }); // When groupsService.GenerateGroupsFromRegistrationField(groupGenerationDetails); // Then using (new AssertionScope()) { A.CallTo( () => groupsDataService.AddDelegateGroup( A <GroupDetails> .That.Matches( gd => gd.GroupLabel == duplicateGroupName ) ) ).MustNotHaveHappened(); A.CallTo( () => groupsDataService.AddDelegateGroup( A <GroupDetails> .That.Matches( gd => gd.GroupLabel == nonDuplicateGroupName ) ) ).MustHaveHappenedOnceExactly(); A.CallTo( () => groupsDataService.AddDelegatesWithMatchingAnswersToGroup( A <int> ._, A <DateTime> ._, A <int> ._, A <int> ._, duplicateGroupName, null ) ) .MustNotHaveHappened(); A.CallTo( () => groupsDataService.AddDelegatesWithMatchingAnswersToGroup( A <int> ._, A <DateTime> ._, A <int> ._, A <int> ._, nonDuplicateGroupName, null ) ) .MustHaveHappenedOnceExactly(); } }