private async Task SendEmail(List <ContactsPrivilege> privilegesBeingAdded, List <ContactsPrivilege> privilegesBeingRemoved, SetContactPrivilegesRequest request) { if (privilegesBeingAdded.Any() || privilegesBeingRemoved.Any()) { var removedText = GetRemovedPrivilegesEmailToken(privilegesBeingRemoved); var addedText = GetAddedPrivilegesEmailToken(privilegesBeingAdded); var emailTemplate = await _mediator.Send(new GetEmailTemplateRequest { TemplateName = "EPAOPermissionsAmended" }); var amendingContact = request.AmendingContactId.Equals(Guid.Empty) ? null : await ContactQueryRepository.GetContactById(request.AmendingContactId); var amendingContactDispalyName = request.AmendingContactId.Equals(Guid.Empty) ? "EFSA Staff" : amendingContact.DisplayName; var contactBeingAmended = await ContactQueryRepository.GetContactById(request.ContactId); await _mediator.Send(new SendEmailRequest(contactBeingAmended.Email, emailTemplate, new { ServiceName = "Apprenticeship assessment service", Contact = contactBeingAmended.DisplayName, Editor = amendingContactDispalyName, ServiceTeam = "Apprenticeship assessment service team", PermissionsAdded = addedText, PermissionsRemoved = removedText })); } }
public async Task <SetContactPrivilegesResponse> Handle(SetContactPrivilegesRequest request, CancellationToken cancellationToken) { var currentPrivileges = (await ContactQueryRepository.GetPrivilegesFor(request.ContactId)); var privilegesBeingRemoved = GetRemovedPrivileges(request, currentPrivileges); var privilegesBeingAdded = await GetAddedPrivileges(request, currentPrivileges); var privilegesBeingRemovedThatMustBelongToSomeone = privilegesBeingRemoved.Where(p => p.Privilege.MustBeAtLeastOneUserAssigned).ToList(); foreach (var currentPrivilege in privilegesBeingRemovedThatMustBelongToSomeone) { if (await _contactRepository.IsOnlyContactWithPrivilege(request.ContactId, currentPrivilege.PrivilegeId)) { return(new SetContactPrivilegesResponse() { Success = false, ErrorMessage = $"Before you remove '{currentPrivilege.Privilege.UserPrivilege}' you must assign '{currentPrivilege.Privilege.UserPrivilege}' to another user." }); } } await UpdatePrivileges(request); if (!request.IsNewContact) { await SendEmail(privilegesBeingAdded, privilegesBeingRemoved, request); await LogPrivilegeChanges(privilegesBeingAdded, privilegesBeingRemoved, request); } return(new SetContactPrivilegesResponse() { Success = true, HasRemovedOwnUserManagement = request.ContactId.Equals(request.AmendingContactId) && privilegesBeingRemovedThatMustBelongToSomeone.Any(p => p.Privilege.Key == Privileges.ManageUsers) }); }
public void Then_contact_username_is_Updated() { var guid = Guid.NewGuid(); ContactQueryRepository.Setup(x => x.GetBySignInId(It.IsAny <Guid>())).Returns(Task.FromResult( new Contact { Id = guid, Username = "******", Email = "*****@*****.**" })); IList <ContactRole> listOfRoles = new List <ContactRole> { new ContactRole { RoleName = "SuperUser" } }; ContactQueryRepository.Setup(x => x.GetRolesFor(It.IsAny <Guid>())) .Returns(Task.FromResult(listOfRoles)); OrgQueryRepository.Setup(r => r.GetByUkPrn(12345)).ReturnsAsync(new Organisation { Status = OrganisationStatus.Live, EndPointAssessorOrganisationId = "EPA001", EndPointAssessorUkprn = 12345, }); ContactQueryRepository.Setup(r => r.GetContact("username")).ReturnsAsync(default(Contact)); ContactQueryRepository.Setup(r => r.GetContactFromEmailAddress("*****@*****.**")).ReturnsAsync(new Contact { DisplayName = "Display Name", Email = "*****@*****.**", Username = "******" }); ContactRepository.Setup(x => x.UpdateUserName(guid, "*****@*****.**")).Returns(Task.FromResult(default(object))); // Username wiil be ignored and replaced with email address Handler.Handle( new LoginRequest() { Roles = new List <string>() { "ABC", "DEF", "EPA" }, UkPrn = 12345, Username = "******", DisplayName = "Display Name", Email = "*****@*****.**" }, new CancellationToken()).Wait(); ContactRepository.Verify(m => m.UpdateUserName(guid, "*****@*****.**")); }
public void Then_Epao_PrimaryContact_is_Updated() { ContactQueryRepository.Setup(x => x.GetBySignInId(It.IsAny <Guid>())).Returns(Task.FromResult( new Contact { Id = Guid.NewGuid() })); IList <ContactRole> listOfRoles = new List <ContactRole> { new ContactRole { RoleName = "SuperUser" } }; ContactQueryRepository.Setup(x => x.GetRolesFor(It.IsAny <Guid>())) .Returns(Task.FromResult(listOfRoles)); OrgQueryRepository.Setup(r => r.GetByUkPrn(12345)).ReturnsAsync(new Organisation { Status = OrganisationStatus.Live, EndPointAssessorOrganisationId = "EPA001", EndPointAssessorUkprn = 12345, PrimaryContact = null }); ContactQueryRepository.Setup(r => r.GetContact("username")).ReturnsAsync(new Contact { DisplayName = "Display Name", Email = "*****@*****.**", Username = "******" }); Handler.Handle( new LoginRequest() { Roles = new List <string>() { "ABC", "DEF", "EPA" }, UkPrn = 12345, Username = "******", DisplayName = "Display Name", Email = "*****@*****.**" }, new CancellationToken()).Wait(); //Mediator.Verify(m => // m.Send( // It.Is<UpdateOrganisationRequest>(r => // r.EndPointAssessorOrganisationId == "EPA001" && r.EndPointAssessorUkprn == 12345 // && r.PrimaryContact == "username"), It.IsAny<CancellationToken>())); }
public void Arrange() { _existingLoginUserId = Guid.NewGuid(); _newContactId = Guid.NewGuid(); ContactRepository.Setup(r => r.GetContact("*****@*****.**")).ReturnsAsync(default(Contact)); ContactRepository.Setup(r => r.CreateNewContact(It.IsAny <Contact>())).ReturnsAsync(new Contact() { Id = _newContactId }); ContactQueryRepository.Setup(r => r.GetAllPrivileges()).ReturnsAsync(new List <Privilege>()); SignInService.Setup(sis => sis.InviteUser("*****@*****.**", "Dave", "Smith", _newContactId)).ReturnsAsync(new InviteUserResponse() { UserExists = true, ExistingUserId = _existingLoginUserId, IsSuccess = false }); }