public void ShouldUpdateDraftApprenticeshipApplicationDetails() { var newRegistrationDetails = new RegistrationDetails { EmailAddress = "*****@*****.**" }; var candidateReadRepository = new Mock <ICandidateReadRepository>(); candidateReadRepository.Setup(crr => crr.Get(It.IsAny <Guid>())).Returns(new Candidate { RegistrationDetails = newRegistrationDetails }); var getCandidateApplicationsStrategy = new Mock <IGetCandidateApprenticeshipApplicationsStrategy>(); getCandidateApplicationsStrategy.Setup(gca => gca.GetApplications(It.IsAny <Guid>(), true)) .Returns(new[] { new ApprenticeshipApplicationSummary { Status = ApplicationStatuses.Draft } }); var apprenticeshipApplicationReadRepository = new Mock <IApprenticeshipApplicationReadRepository>(); apprenticeshipApplicationReadRepository.Setup( aprr => aprr.GetForCandidate(It.IsAny <Guid>(), It.IsAny <int>(), false)) .Returns(new ApprenticeshipApplicationDetail()); var apprenticeshipApplicationWriteRepository = new Mock <IApprenticeshipApplicationWriteRepository>(); var saveCandidateStrategy = new SaveCandidateStrategyBuilder().With(candidateReadRepository).With(getCandidateApplicationsStrategy).With(apprenticeshipApplicationReadRepository).With(apprenticeshipApplicationWriteRepository).Build(); saveCandidateStrategy.SaveCandidate(new Candidate()); apprenticeshipApplicationWriteRepository.Verify( aawr => aawr.Save(It.Is <ApprenticeshipApplicationDetail>(a => a.CandidateDetails.EmailAddress == newRegistrationDetails.EmailAddress))); }
public void ShouldAssignAndSendMobileUserCodeIfVerificationIsRequired(bool verifiedMobile, bool enableText) { var candidateId = Guid.NewGuid(); const string phoneNumber = "0123456789"; var candidate = new Candidate { EntityId = candidateId, RegistrationDetails = new RegistrationDetails { PhoneNumber = phoneNumber }, CommunicationPreferences = new CommunicationPreferences { ApplicationStatusChangePreferences = new CommunicationPreference { EnableText = enableText }, ExpiringApplicationPreferences = new CommunicationPreference { EnableText = enableText }, SavedSearchPreferences = new CommunicationPreference { EnableText = enableText }, MarketingPreferences = new CommunicationPreference { EnableText = enableText }, VerifiedMobile = verifiedMobile } }; var codeGenerator = new Mock <ICodeGenerator>(); const string mobileVerificationCode = "1234"; codeGenerator.Setup(cg => cg.GenerateNumeric(4)).Returns(mobileVerificationCode); var communicationService = new Mock <ICommunicationService>(); IEnumerable <CommunicationToken> communicationTokens = new List <CommunicationToken>(0); communicationService.Setup(cs => cs.SendMessageToCandidate(candidateId, MessageTypes.SendMobileVerificationCode, It.IsAny <IEnumerable <CommunicationToken> >())).Callback <Guid, MessageTypes, IEnumerable <CommunicationToken> >((cid, mt, ct) => { communicationTokens = ct; }); var sendMobileVerificationCodeStrategy = new SendMobileVerificationCodeStrategyBuilder().With(communicationService).With(codeGenerator).Build(); var saveCandidateStrategy = new SaveCandidateStrategyBuilder().With(sendMobileVerificationCodeStrategy).Build(); saveCandidateStrategy.SaveCandidate(candidate); if (candidate.MobileVerificationRequired()) { sendMobileVerificationCodeStrategy.SendMobileVerificationCode(candidate); } if (verifiedMobile || !enableText) { candidate.CommunicationPreferences.MobileVerificationCode.Should().BeNullOrEmpty(); candidate.CommunicationPreferences.MobileVerificationCodeDateCreated.Should().NotHaveValue(); communicationService.Verify(cs => cs.SendMessageToCandidate(candidateId, MessageTypes.SendMobileVerificationCode, It.IsAny <IEnumerable <CommunicationToken> >()), Times.Never); } else { candidate.CommunicationPreferences.MobileVerificationCode.Should().Be(mobileVerificationCode); candidate.CommunicationPreferences.MobileVerificationCodeDateCreated.Should().HaveValue(); // ReSharper disable once PossibleInvalidOperationException candidate.CommunicationPreferences.MobileVerificationCodeDateCreated.Value.Should().BeCloseTo(DateTime.UtcNow, 500); communicationService.Verify(cs => cs.SendMessageToCandidate(candidateId, MessageTypes.SendMobileVerificationCode, It.IsAny <IEnumerable <CommunicationToken> >()), Times.Once); var communicationTokensList = communicationTokens.ToList(); communicationTokensList.Count.Should().Be(2); communicationTokensList.Single(ct => ct.Key == CommunicationTokens.CandidateMobileNumber).Value.Should().Be(phoneNumber); communicationTokensList.Single(ct => ct.Key == CommunicationTokens.MobileVerificationCode).Value.Should().Be(mobileVerificationCode); } }