public void ShouldOrderSavedSearchAlertResultsByMostRecentlyPostedVacancy()
        {
            // Arrange.
            var candidate = new CandidateBuilder(new Guid())
                            .Build();

            const int savedSearchAlertCount = 42;
            const int resultCount           = 21;

            var savedSearchAlerts = GetSavedSearchAlerts(savedSearchAlertCount, resultCount);

            // Act.
            var communicationRequest = CommunicationRequestFactory.GetSavedSearchAlertCommunicationRequest(
                candidate, savedSearchAlerts);

            // Assert.
            communicationRequest.ContainsToken(CommunicationTokens.SavedSearchAlerts).Should().BeTrue();

            var json = communicationRequest.GetToken(CommunicationTokens.SavedSearchAlerts);
            var actualSavedSearchAlerts = JsonConvert.DeserializeObject <List <SavedSearchAlert> >(json);

            foreach (var actualSavedSearchAlert in actualSavedSearchAlerts)
            {
                actualSavedSearchAlert.Results.Count.Should().Be(resultCount);
                actualSavedSearchAlert.Results.Should().BeInDescendingOrder(each => each.PostedDate);
            }
        }
示例#2
0
        public void Success()
        {
            var          candidateId            = Guid.NewGuid();
            const string phoneNumber            = "0123456789";
            const string mobileVerificationCode = "1234";
            var          candidate            = new CandidateBuilder(candidateId).AllowMobile(true).VerifiedMobile(false).MobileVerificationCode(mobileVerificationCode).PhoneNumber(phoneNumber).Build();
            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 candidateWriteRepository = new Mock <ICandidateWriteRepository>();
            var codeGenerator            = new Mock <ICodeGenerator>();
            var strategy = new SendMobileVerificationCodeStrategyBuilder().With(communicationService).With(candidateWriteRepository).With(codeGenerator).Build();

            strategy.SendMobileVerificationCode(candidate);

            candidate.CommunicationPreferences.MobileVerificationCode.Should().Be(mobileVerificationCode);
            candidateWriteRepository.Verify(r => r.Save(candidate), Times.Never);
            candidate.CommunicationPreferences.MobileVerificationCode.Should().Be(mobileVerificationCode);
            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);
            codeGenerator.Verify(cg => cg.GenerateNumeric(It.IsAny <int>()), Times.Never);
        }
        public void EmptyMobileVerificationCode()
        {
            var candidateId = Guid.NewGuid();

            const string mobileVerificationCode = "1234";

            var candidate = new CandidateBuilder(candidateId)
                            .EnableApplicationStatusChangeAlertsViaText(true)
                            .VerifiedMobile(false)
                            .MobileVerificationCode(string.Empty)
                            .Build();

            var candidateWriteRepository = new Mock <ICandidateWriteRepository>();

            candidateWriteRepository.Setup(r => r.Save(It.IsAny <Candidate>())).Callback <Candidate>(c => { candidate = c; });

            var codeGenerator = new Mock <ICodeGenerator>();

            codeGenerator.Setup(cg => cg.GenerateNumeric(4)).Returns(mobileVerificationCode);

            var strategy = new SendMobileVerificationCodeStrategyBuilder().With(candidateWriteRepository).With(codeGenerator).Build();

            strategy.SendMobileVerificationCode(candidate);

            candidate.CommunicationPreferences.MobileVerificationCode.Should().Be(mobileVerificationCode);
            candidate.CommunicationPreferences.MobileVerificationCodeDateCreated.Should().HaveValue();
            // ReSharper disable once PossibleInvalidOperationException
            candidate.CommunicationPreferences.MobileVerificationCodeDateCreated.Value.Should().BeCloseTo(DateTime.UtcNow, 500);

            candidateWriteRepository.Verify(r => r.Save(candidate), Times.Once);
        }
示例#4
0
        private CandidateItem CheckForExistingPrimeCandidate(RankingVoteItem voteItem, RankingVoteItem existingVoteItem)
        {
            var existingPrimeWriteIn =
                Context.Candidates.FirstOrDefault(x => x.Name == voteItem.PrimeCandidateItem.Name &&
                                                  x.JobId == existingVoteItem.PrimeCandidateItem.JobId);

            var builder = new CandidateBuilder();

            CandidateItem primeCandidateItem;


            if (existingPrimeWriteIn != null)
            {
                primeCandidateItem = builder.GetModel(existingPrimeWriteIn);
            }
            else
            {
                primeCandidateItem = new CandidateItem()
                {
                    CandidateId = Guid.NewGuid(),
                    Name        = voteItem.PrimeCandidateItem.Name,
                    JobId       = existingVoteItem.PrimeCandidateItem.JobId
                };
            }
            return(primeCandidateItem);
        }
示例#5
0
        public void ShouldSendMobileVerificationCodeReminderInConfiguredHousekeepingCycle(
            int housekeepingCycleInHours,
            int sendMobileVerificationCodeReminderAfterCycles)
        {
            // Arrange.
            var mockSuccessorStrategy    = new Mock <IHousekeepingStrategy>();
            var mockCommunicationService = new Mock <ICommunicationService>();

            var strategy = new SendMobileVerificationCodeReminderStrategyBuilder()
                           .With(mockSuccessorStrategy)
                           .With(mockCommunicationService)
                           .WithHousekeepingCycleInHours(housekeepingCycleInHours)
                           .WithSendMobileVerificationCodeReminderAfterCycles(sendMobileVerificationCodeReminderAfterCycles)
                           .Build();

            var candidateId = Guid.NewGuid();
            var user        = new UserBuilder(candidateId).Build();
            var hoursAgo    = -(sendMobileVerificationCodeReminderAfterCycles * housekeepingCycleInHours);

            var candidate = new CandidateBuilder(candidateId)
                            .PhoneNumber(PhoneNumber)
                            .MobileVerificationCode(MobileVerificationCode)
                            .MobileVerificationCodeDateCreated(DateTime.UtcNow.AddHours(hoursAgo))
                            .EnableAllCommunications()
                            .Build();

            // Act.
            strategy.Handle(user, candidate);

            // Assert.
            mockSuccessorStrategy.Verify(mock => mock.Handle(user, candidate), Times.Once);

            mockCommunicationService.Verify(mock => mock.SendMessageToCandidate(
                                                candidateId, MessageTypes.SendMobileVerificationCodeReminder, It.IsAny <IEnumerable <CommunicationToken> >()), Times.Once);
        }
示例#6
0
        public void ShouldQueueEmailAndSmsForActiveCandidate(MessageTypes messageType, UserStatuses userStatus)
        {
            // Arrange.
            var candidate = new CandidateBuilder(Guid.NewGuid())
                            .EnableAllCommunications()
                            .Build();

            AddCandidate(candidate, userStatus);

            var communicationRequest = new CommunicationRequestBuilder(messageType, candidate.EntityId).Build();

            // Act.
            Command.Handle(communicationRequest);

            // Assert.
            ShouldQueueEmail(messageType, 1);
            if (messageType == MessageTypes.ApprenticeshipApplicationSubmitted || messageType == MessageTypes.TraineeshipApplicationSubmitted)
            {
                ShouldQueueSms(messageType, 0);
            }
            else
            {
                ShouldQueueSms(messageType, 1);
            }
        }
        public void GivenExistingCandidates_WhenGetAll_ThenReturnAllCandidates()
        {
            using (var context = new SwintakeContext(_options))
            {
                var guidId  = Guid.NewGuid();
                var janneke = new CandidateBuilder()
                              .WithId(guidId)
                              .WithFirstName("Janneke")
                              .WithLastName("Janssens")
                              .WithEmail("*****@*****.**")
                              .WithPhoneNumber("0470000000")
                              .WithGitHubUsername("janneke")
                              .WithLinkedIn("janneke")
                              .Build();

                IRepository <Candidate> candidateRepository = new CandidateRepository(context);

                //when
                candidateRepository.Save(janneke);
                IList <Candidate> searchCandidate = candidateRepository.GetAll();

                //then
                Assert.Equal(1, searchCandidate.Count);
            }
        }
示例#8
0
        public void ShouldHandleCandidateDailyDigestContainingOneOrMoreExpiringDraft()
        {
            // Arrange.
            var candidate = new CandidateBuilder(Guid.NewGuid())
                            .EnableAllCommunications()
                            .Build();

            AddCandidate(candidate);

            var expiringDrafts = new ExpiringApprenticeshipApplicationDraftsBuilder()
                                 .WithExpiringDrafts(1)
                                 .Build();

            var json = JsonConvert.SerializeObject(expiringDrafts);

            var communicationRequest = new CommunicationRequestBuilder(MessageTypes.DailyDigest, candidate.EntityId)
                                       .WithToken(CommunicationTokens.ExpiringDrafts, json)
                                       .WithToken(CommunicationTokens.ApplicationStatusAlerts, null)
                                       .Build();

            // Act.
            var canHandle = Command.CanHandle(communicationRequest);

            // Assert.
            canHandle.Should().BeTrue();
        }
        public void ShouldQueueOneEmailForMultipleExpiringDraftsAndApplicationStatusAlerts(
            int expiringDraftCount, int applicationStatusAlertCount)
        {
            // Arrange.
            var candidate = new CandidateBuilder(Guid.NewGuid())
                            .EnableAllCommunications()
                            .Build();

            AddCandidate(candidate);

            var expiringDrafts = new ExpiringApprenticeshipApplicationDraftsBuilder()
                                 .WithExpiringDrafts(expiringDraftCount)
                                 .Build();

            var applicationStatusAlerts = new ApplicationStatusAlertsBuilder()
                                          .WithApplicationStatusAlerts(applicationStatusAlertCount, ApplicationStatuses.Unsuccessful)
                                          .Build();

            var communicationRequest = new CommunicationRequestBuilder(MessageTypes.DailyDigest, candidate.EntityId)
                                       .WithToken(CommunicationTokens.ExpiringDrafts, JsonConvert.SerializeObject(expiringDrafts))
                                       .WithToken(CommunicationTokens.ApplicationStatusAlerts, JsonConvert.SerializeObject(applicationStatusAlerts))
                                       .Build();

            // Act.
            Command.Handle(communicationRequest);

            // Assert.
            ShouldQueueEmail(MessageTypes.DailyDigest, 1);
        }
示例#10
0
        public void GivenACandidate_WhenToDto_ThenReturnCandidateDtoObjectWithSameProperties()
        {
            //given
            var candidate = new CandidateBuilder()
                            .WithId(Guid.NewGuid())
                            .WithFirstName("Janneke")
                            .WithLastName("Janssens")
                            .WithEmail("*****@*****.**")
                            .WithPhoneNumber("0470000000")
                            .WithLinkedIn("janneke")
                            .WithGitHubUsername("janneke")
                            .WithComment("jannekeComment")
                            .Build();

            var candidateMapper = new CandidateMapper();

            //when
            var newDto = candidateMapper.ToDto(candidate);

            //then
            Assert.Equal(candidate.Id.ToString(), newDto.Id);
            Assert.Equal(candidate.FirstName, newDto.FirstName);
            Assert.Equal(candidate.LastName, newDto.LastName);
            Assert.Equal(candidate.Email, newDto.Email);
            Assert.Equal(candidate.PhoneNumber, newDto.PhoneNumber);
            Assert.Equal(candidate.LinkedIn, newDto.LinkedIn);
            Assert.Equal(candidate.GitHubUsername, newDto.GitHubUsername);
            Assert.Equal(candidate.Comment, newDto.Comment);
        }
示例#11
0
        public void ErrorTest(bool verifiedMobile, bool allowMobile, bool allowMobileMarketing)
        {
            //Arrange
            var candidateId      = Guid.NewGuid();
            var verificationCode = string.Empty;

            Candidate candidate = new CandidateBuilder(candidateId)
                                  .MobileVerificationCode(verificationCode)
                                  .EnableApplicationStatusChangeAlertsViaText(allowMobile)
                                  .VerifiedMobile(verifiedMobile).Build();

            var candidateReadRepository = new Mock <ICandidateReadRepository>();

            candidateReadRepository.Setup(r => r.Get(candidateId)).Returns(candidate);

            var candidateWriteRepository = new Mock <ICandidateWriteRepository>();

            candidateWriteRepository.Setup(r => r.Save(It.IsAny <Candidate>())).Callback <Candidate>(c => { candidate = c; });

            var verifyMobileStrategy = new VerifyMobileStrategyBuilder()
                                       .With(candidateReadRepository)
                                       .With(candidateWriteRepository)
                                       .Build();

            //Act
            Action a = () => verifyMobileStrategy.VerifyMobile(candidateId, verificationCode);

            //Assert
            var errorMessage = string.Format("The mobile number associated with candidate Id: {0} does not require verification.", candidateId);

            a.ShouldThrow <CustomException>().WithMessage(errorMessage);
            a.ShouldThrow <CustomException>();
        }
示例#12
0
        public void MobileCodeVerificationFailedTest()
        {
            //Arrange
            var          candidateId             = Guid.NewGuid();
            const string actualVerificationCode  = "1234";
            const string enteredVerificationCode = "5678";

            var candidate = new CandidateBuilder(candidateId)
                            .MobileVerificationCode(actualVerificationCode)
                            .EnableApplicationStatusChangeAlertsViaText(true)
                            .VerifiedMobile(false)
                            .Build();

            var candidateReadRepository = new Mock <ICandidateReadRepository>();

            candidateReadRepository.Setup(r => r.Get(candidateId)).Returns(candidate);

            var candidateWriteRepository = new Mock <ICandidateWriteRepository>();

            candidateWriteRepository.Setup(r => r.Save(It.IsAny <Candidate>())).Callback <Candidate>(c => { candidate = c; });

            var verifyMobileStrategy = new VerifyMobileStrategyBuilder().With(candidateReadRepository).With(candidateWriteRepository).Build();

            //Act
            Action a = () => verifyMobileStrategy.VerifyMobile(candidateId, enteredVerificationCode);

            //Assert
            var errorMessage =
                string.Format("Mobile verification code {0} is invalid for candidate {1} with mobile number {2}",
                              enteredVerificationCode, candidateId, candidate.RegistrationDetails.PhoneNumber);

            a.ShouldThrow <CustomException>().WithMessage(errorMessage);
        }
示例#13
0
        public void SuccessTest()
        {
            //Arrange
            Guid   candidateId      = Guid.NewGuid();
            string verificationCode = "1234";

            Candidate candidate = new CandidateBuilder(candidateId).MobileVerificationCode(verificationCode).AllowMobile(true).VerifiedMobile(false).Build();
            var       candidateReadRepository = new Mock <ICandidateReadRepository>();

            candidateReadRepository.Setup(r => r.Get(candidateId)).Returns(candidate);

            //candidateReadRepository.Setup()
            var candidateWriteRepository = new Mock <ICandidateWriteRepository>();

            candidateWriteRepository.Setup(r => r.Save(It.IsAny <Candidate>())).Callback <Candidate>(c => { candidate = c; });

            var verifyMobileStrategy = new VerifyMobileStrategyBuilder().With(candidateReadRepository).With(candidateWriteRepository).Build();

            //Act
            verifyMobileStrategy.VerifyMobile(candidateId, verificationCode);

            //Assert
            candidateWriteRepository.Verify(r => r.Save(It.IsAny <Candidate>()), Times.Once);
            candidate.CommunicationPreferences.AllowMobile.Should().BeTrue();
            candidate.CommunicationPreferences.MobileVerificationCode.Should().BeNullOrEmpty();
            candidate.CommunicationPreferences.VerifiedMobile.Should().BeTrue();
            candidate.MobileVerificationRequired().Should().BeFalse();
        }
示例#14
0
        public void AllowNeitherEmailNorSmsShouldNotSendMessageAndSoftDeleteDrafts()
        {
            _expiringDraftRepository.Setup(mock => mock.GetCandidatesDailyDigest()).Returns(GetDraftDigests(2, 2));
            _expiringDraftRepository.Setup(mock => mock.Delete(It.IsAny <ExpiringApprenticeshipApplicationDraft>()));

            var candidate = new CandidateBuilder(Guid.NewGuid())
                            .EnableExpiringApplicationAlertsViaEmail(false)
                            .EnableExpiringApplicationAlertsViaText(false)
                            .VerifiedMobile(true)
                            .Build();

            var user = new UserBuilder(candidate.EntityId)
                       .WithStatus(UserStatuses.Active)
                       .Build();

            _candidateReadRepository.Setup(mock => mock.Get(It.IsAny <Guid>())).Returns(candidate);
            _userReadRepository.Setup(mock => mock.Get(It.IsAny <Guid>())).Returns(user);

            var batchId = Guid.NewGuid();

            _communicationProcessor.SendDailyDigests(batchId);

            _candidateReadRepository.Verify(mock => mock.Get(It.IsAny <Guid>()), Times.Exactly(2));
            _userReadRepository.Verify(mock => mock.Get(It.IsAny <Guid>()), Times.Exactly(2));
            _expiringDraftRepository.Verify(mock => mock.GetCandidatesDailyDigest(), Times.Once);
            _expiringDraftRepository.Verify(mock => mock.Save(It.IsAny <ExpiringApprenticeshipApplicationDraft>()), Times.Exactly(4));
            _serviceBus.Verify(mock => mock.PublishMessage(It.IsAny <CommunicationRequest>()), Times.Never);
        }
        public void ShouldQueueOneEmailForMultipleSuccessfulApplicationStatusUpdates(int successfulApplicationCount)
        {
            // Arrange.
            var candidate = new CandidateBuilder(Guid.NewGuid())
                            .EnableAllCommunications()
                            .Build();

            AddCandidate(candidate);

            var applicationStatusAlerts = new ApplicationStatusAlertsBuilder()
                                          .WithApplicationStatusAlerts(successfulApplicationCount, ApplicationStatuses.Successful)
                                          .Build();

            var json = JsonConvert.SerializeObject(applicationStatusAlerts);

            var communicationRequest = new CommunicationRequestBuilder(MessageTypes.DailyDigest, candidate.EntityId)
                                       .WithToken(CommunicationTokens.ExpiringDrafts, null)
                                       .WithToken(CommunicationTokens.ApplicationStatusAlerts, json)
                                       .Build();

            // Act.
            Command.Handle(communicationRequest);

            // Assert.
            ShouldQueueEmail(MessageTypes.DailyDigest, 1);
        }
示例#16
0
        public void ShouldQueueOneSmsForOneOrMoreExpiringDrafts(
            int expiringDraftCount, MessageTypes expectedMessageType)
        {
            // Arrange.
            var candidate = new CandidateBuilder(Guid.NewGuid())
                            .EnableAllCommunications()
                            .Build();

            AddCandidate(candidate);

            var expiringDrafts = new ExpiringApprenticeshipApplicationDraftsBuilder()
                                 .WithExpiringDrafts(expiringDraftCount)
                                 .Build();

            var json = JsonConvert.SerializeObject(expiringDrafts);

            var communicationRequest = new CommunicationRequestBuilder(MessageTypes.DailyDigest, candidate.EntityId)
                                       .WithToken(CommunicationTokens.ExpiringDrafts, json)
                                       .WithToken(CommunicationTokens.ApplicationStatusAlerts, null)
                                       .Build();

            // Act.
            Command.Handle(communicationRequest);

            // Assert.
            ShouldQueueSms(expectedMessageType, 1);
        }
        public void GivenValidCode_DefaultViewModelIsReturned()
        {
            //Arrange
            var candidateId   = Guid.NewGuid();
            var candidateMock =
                new CandidateBuilder(candidateId)
                .EnableApplicationStatusChangeAlertsViaText(true)
                .PhoneNumber(PhoneNumber)
                .VerifiedMobile(false)
                .Build();

            var candidateServiceMock = new Mock <ICandidateService>();

            candidateServiceMock.Setup(cs => cs.GetCandidate(candidateId)).Returns(candidateMock);
            candidateServiceMock.Setup(cs => cs.SendMobileVerificationCode(candidateMock));

            var viewModel = new VerifyMobileViewModelBuilder().PhoneNumber(PhoneNumber).Build();
            var provider  = new AccountProviderBuilder().With(candidateServiceMock).Build();

            //Act
            var result = provider.SendMobileVerificationCode(candidateId, viewModel);

            //Assert
            result.Status.Should().Be(VerifyMobileState.Ok);
            result.HasError().Should().BeFalse();
            result.ViewModelMessage.Should().BeNullOrEmpty();
        }
        public void GivenEntityStateError_ThenValidViewModelIsReturned(string errorCode, VerifyMobileState verifyMobileState)
        {
            //Arrange
            var candidateId   = Guid.NewGuid();
            var candidateMock =
                new CandidateBuilder(candidateId)
                .EnableApplicationStatusChangeAlertsViaText(true)
                .PhoneNumber(PhoneNumber)
                .VerifiedMobile(false)
                .Build();

            var candidateServiceMock = new Mock <ICandidateService>();

            candidateServiceMock.Setup(cs => cs.GetCandidate(candidateId)).Returns(candidateMock);
            candidateServiceMock.Setup(cs => cs.SendMobileVerificationCode(candidateMock)).Throws(new CustomException(errorCode));

            var viewModel = new VerifyMobileViewModelBuilder().PhoneNumber(PhoneNumber).Build();
            var provider  = new AccountProviderBuilder().With(candidateServiceMock).Build();

            //Act
            var result = provider.SendMobileVerificationCode(candidateId, viewModel);

            //Assert
            result.Status.Should().Be(verifyMobileState);
            result.HasError().Should().BeTrue();
            result.ViewModelMessage.Should().NotBeNull();
        }
        public void AllowNeitherEmailNorSmsShouldNotSendMessageAndSoftDeleteAlerts()
        {
            var savedSearchAlertRepository = new Mock <ISavedSearchAlertRepository>();

            savedSearchAlertRepository.Setup(x => x.GetCandidatesSavedSearchAlerts()).Returns(GetSavedSearchAlerts(2, 2));

            var candidateReadRepository = new Mock <ICandidateReadRepository>();
            var candidate = new CandidateBuilder(Guid.NewGuid())
                            .EnableSavedSearchAlertsViaEmail(false)
                            .EnableSavedSearchAlertsViaText(false)
                            .Build();

            candidateReadRepository.Setup(x => x.Get(It.IsAny <Guid>())).Returns(candidate);

            var userReadRepository = new Mock <IUserReadRepository>();
            var user = new UserBuilder(candidate.EntityId).WithStatus(UserStatuses.Active).Build();

            userReadRepository.Setup(x => x.Get(It.IsAny <Guid>())).Returns(user);

            var sendSavedSearchAlertsStrategy = new SendSavedSearchAlertsStrategyBuilder()
                                                .With(savedSearchAlertRepository)
                                                .With(candidateReadRepository)
                                                .With(userReadRepository)
                                                .Build();

            var communicationProcessor = new CommunicationProcessor(null, sendSavedSearchAlertsStrategy);
            var batchId = Guid.NewGuid();

            communicationProcessor.SendSavedSearchAlerts(batchId);

            savedSearchAlertRepository.Verify(x => x.GetCandidatesSavedSearchAlerts(), Times.Once);
            candidateReadRepository.Verify(x => x.Get(It.IsAny <Guid>()), Times.Exactly(2));
            userReadRepository.Verify(x => x.Get(It.IsAny <Guid>()), Times.Exactly(2));
            savedSearchAlertRepository.Verify(x => x.Save(It.IsAny <SavedSearchAlert>()), Times.Exactly(4));
        }
        public void TestBuildCandidateNoNameFails()
        {
            var builder = new CandidateBuilder();

            ValidationResults r = Validation.Validate(builder);

            Assert.IsFalse(r.IsValid);
        }
示例#21
0
        public List <VotingApp.Models.CandidateItem> GetCanidates()
        {
            var _context = new VotingContext();
            var _builder = new CandidateBuilder();

            var canindates = _context.Candidates.AsNoTracking().Include("Job");

            return(canindates.Select(_builder.GetModel).ToList());
        }
        public SmsRequest Build()
        {
            var candidateId          = Guid.NewGuid();
            var candidate            = new CandidateBuilder(candidateId).Build();
            var communicationRequest = CommunicationRequestFactory.GetCommunicationMessage(candidate, _expiringDrafts);
            var smsRequest           = new SmsRequestBuilder().WithMessageType(MessageTypes.DailyDigest).WithTokens(communicationRequest.Tokens).Build();

            return(smsRequest);
        }
示例#23
0
        public EmailRequest Build()
        {
            var candidateId          = Guid.NewGuid();
            var candidate            = new CandidateBuilder(candidateId).Build();
            var communicationRequest = CommunicationRequestFactory.GetDailyDigestCommunicationRequest(candidate, _expiringDrafts, _applicationStatusAlerts);
            var emailRequest         = new EmailRequestBuilder().WithMessageType(MessageTypes.DailyDigest).WithTokens(communicationRequest.Tokens).Build();

            return(emailRequest);
        }
        [TestCase(true, true, false)]   // sms, verified mobile
        public void ShouldRequireMobileVerification(bool enableAnyText, bool verifiedMobile, bool expected)
        {
            var candidate = new CandidateBuilder(Guid.NewGuid())
                            .EnableOneCommunicationPreferenceViaText(enableAnyText)
                            .VerifiedMobile(verifiedMobile)
                            .Build();

            candidate.MobileVerificationRequired().Should().Be(expected);
        }
        [TestCase(true, false, false, true)]   // email only
        public void ShouldSendSavedSearchAlerts(bool enableEmail, bool enableText, bool verifiedMobile, bool expected)
        {
            var candidate = new CandidateBuilder(Guid.NewGuid())
                            .EnableSavedSearchAlertsViaEmail(enableEmail)
                            .EnableSavedSearchAlertsViaText(enableText)
                            .VerifiedMobile(verifiedMobile)
                            .Build();

            candidate.ShouldSendSavedSearchAlerts().Should().Be(expected);
        }
        public void GivenIRegisteredAnAccountButDidNotActivateIt()
        {
            var candidate = new CandidateBuilder(BindingData.UserEmailAddress)
                            .Build();

            new UserBuilder(BindingData.UserEmailAddress, UserStatuses.PendingActivation)
            .WithActivationCode(BindingData.ActivationCode).Build();

            SetTokens(candidate);
        }
        public void GivenIMadeTwoUnsuccessfulLoginAttempts()
        {
            var candidate = new CandidateBuilder(BindingData.UserEmailAddress)
                            .Build();

            new UserBuilder(BindingData.UserEmailAddress)
            .WithLoginIncorrectAttempts(2).Build();

            SetTokens(candidate);
        }
        public void GivenIRegisteredAnAccountAndActivatedIt()
        {
            var candidate = new CandidateBuilder(BindingData.UserEmailAddress)
                            .Build();

            new UserBuilder(BindingData.UserEmailAddress)
            .Build();

            SetTokens(candidate);
        }
        [TestCase(false, true, true, true)]    // // sms only, verified mobile
        public void ShouldAllowCommunication(bool enableAnyEmail, bool enableAnyText, bool verifiedMobile, bool expected)
        {
            var candidate = new CandidateBuilder(Guid.NewGuid())
                            .EnableOneCommunicationPreferenceViaEmail(enableAnyEmail)
                            .EnableOneCommunicationPreferenceViaText(enableAnyText)
                            .VerifiedMobile(verifiedMobile)
                            .Build();

            candidate.AllowsCommunication().Should().Be(expected);
        }
        public void NewUserRegistration()
        {
            const string emailAddress = "*****@*****.**";
            const string password     = "******";

            var candidate = new CandidateBuilder(Guid.Empty).EmailAddress(emailAddress).Build();

            var strategy = new RegisterCandidateStrategyBuilder().Build();

            strategy.RegisterCandidate(candidate, password);
        }