public SendAccountRemindersStrategy Build() { var strategy = new SendAccountRemindersStrategy(_configurationService.Object, _userWriteRepository.Object, _candidateWriteRepository.Object, _auditRepository.Object, _communicationService.Object, _logService.Object); strategy.SetSuccessor(_successor); return(strategy); }
public SendAccountRemindersStrategy Build() { var strategy = new SendAccountRemindersStrategy(_configurationService.Object, _communicationService.Object); strategy.SetSuccessor(_successor); return(strategy); }
private static void Assert(bool shouldSendReminder, SendAccountRemindersStrategy strategy, Mock <IHousekeepingStrategy> successor, Mock <ICommunicationService> communicationService, User user, Candidate candidate) { CommunicationToken[] communicationTokens = null; communicationService.Setup(s => s.SendMessageToCandidate(user.EntityId, MessageTypes.SendActivationCodeReminder, It.IsAny <IEnumerable <CommunicationToken> >())) .Callback <Guid, MessageTypes, IEnumerable <CommunicationToken> >((id, mt, ct) => { communicationTokens = ct.ToArray(); }); strategy.Handle(user, candidate); if (shouldSendReminder) { //Strategy handled the request successor.Verify(s => s.Handle(user, candidate), Times.Never); //Message was sent communicationService.Verify(s => s.SendMessageToCandidate(candidate.EntityId, MessageTypes.SendActivationCodeReminder, It.IsAny <IEnumerable <CommunicationToken> >()), Times.Once); var activationCodeExpiryInDays = user.ActivateCodeExpiry.HasValue ? (user.ActivateCodeExpiry.Value - DateTime.UtcNow).Days : 0; var activationCodeExpiryInDaysFormatted = activationCodeExpiryInDays == 1 ? "1 day" : string.Format("{0} days", activationCodeExpiryInDays); if (user.ActivateCodeExpiry != null) { activationCodeExpiryInDaysFormatted += " on " + user.ActivateCodeExpiry.Value.ToLongDateString(); } var expectedCommunicationTokens = new[] { new CommunicationToken(CommunicationTokens.CandidateFirstName, candidate.RegistrationDetails.FirstName), new CommunicationToken(CommunicationTokens.ActivationCode, user.ActivationCode), new CommunicationToken(CommunicationTokens.ActivationCodeExpiryDays, activationCodeExpiryInDaysFormatted), new CommunicationToken(CommunicationTokens.Username, candidate.RegistrationDetails.EmailAddress) }; communicationTokens.ShouldBeEquivalentTo(expectedCommunicationTokens); } else { //Strategy did not handle the request successor.Verify(s => s.Handle(user, candidate), Times.Once); //Message was not sent communicationService.Verify(s => s.SendMessageToCandidate(user.EntityId, MessageTypes.SendActivationCodeReminder, It.IsAny <IEnumerable <CommunicationToken> >()), Times.Never); communicationTokens.Should().BeNull(); } }
private static void Assert(bool shouldSetDormant, bool shouldSendReminder, SendAccountRemindersStrategy strategy, Mock <IHousekeepingStrategy> successor, Mock <IUserWriteRepository> userWriteRepository, Mock <ICandidateWriteRepository> candidateWriteRepository, Mock <ICommunicationService> communicationService, User user, Candidate candidate) { User savedUser = null; userWriteRepository.Setup(r => r.Save(It.IsAny <User>())).Callback <User>(u => savedUser = u); Candidate savedCandidate = null; candidateWriteRepository.Setup(r => r.Save(It.IsAny <Candidate>())).Callback <Candidate>(c => savedCandidate = c); CommunicationToken[] communicationTokens = null; communicationService.Setup(s => s.SendMessageToCandidate(user.EntityId, MessageTypes.SendDormantAccountReminder, It.IsAny <IEnumerable <CommunicationToken> >())) .Callback <Guid, MessageTypes, IEnumerable <CommunicationToken> >((id, mt, ct) => { communicationTokens = ct.ToArray(); }); strategy.Handle(user, candidate); if (shouldSetDormant) { //User and Candidate were updated userWriteRepository.Verify(r => r.Save(It.IsAny <User>()), Times.Once); savedUser.Should().NotBeNull(); candidateWriteRepository.Verify(r => r.Save(It.IsAny <Candidate>()), Times.Once); savedCandidate.Should().NotBeNull(); //User was set as dormant and comms were disabled savedUser.Status.Should().Be(UserStatuses.Dormant); CandidateHelper.IndividualCommunicationPreferences(savedCandidate.CommunicationPreferences) .Any(p => p.EnableEmail && p.EnableText) .Should() .BeFalse(); } else { //User and Candidate were not updated userWriteRepository.Verify(r => r.Save(It.IsAny <User>()), Times.Never); candidateWriteRepository.Verify(r => r.Save(It.IsAny <Candidate>()), Times.Never); savedUser.Should().BeNull(); savedCandidate.Should().BeNull(); } if (shouldSendReminder) { //Strategy handled the request successor.Verify(s => s.Handle(user, candidate), Times.Never); //Message was sent communicationService.Verify(s => s.SendMessageToCandidate(candidate.EntityId, MessageTypes.SendDormantAccountReminder, It.IsAny <IEnumerable <CommunicationToken> >()), Times.Once); communicationTokens.Should().NotBeNull(); var lastLogin = user.LastLogin ?? DateTime.UtcNow; var lastLoginInDays = (DateTime.UtcNow - lastLogin).Days; var lastLoginInDaysFormatted = lastLoginInDays > 270 ? "almost a year" : string.Format("{0} days", lastLoginInDays); var expectedCommunicationTokens = new[] { new CommunicationToken(CommunicationTokens.CandidateFirstName, candidate.RegistrationDetails.FirstName), new CommunicationToken(CommunicationTokens.LastLogin, lastLoginInDaysFormatted), new CommunicationToken(CommunicationTokens.AccountExpiryDate, lastLogin.AddDays(365).ToLongDateString()), new CommunicationToken(CommunicationTokens.Username, candidate.RegistrationDetails.EmailAddress) }; communicationTokens.ShouldBeEquivalentTo(expectedCommunicationTokens); } else { //Strategy did not handle the request successor.Verify(s => s.Handle(user, candidate), Times.Once); //Message was not sent communicationService.Verify(s => s.SendMessageToCandidate(user.EntityId, MessageTypes.SendActivationCodeReminder, It.IsAny <IEnumerable <CommunicationToken> >()), Times.Never); communicationTokens.Should().BeNull(); } }