Ejemplo n.º 1
0
        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
                }));
            }
        }
Ejemplo n.º 2
0
        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, "*****@*****.**"));
        }
Ejemplo n.º 4
0
        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>()));
        }
Ejemplo n.º 5
0
        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
            });
        }