Exemplo n.º 1
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);
        }
Exemplo n.º 3
0
        public void MobileVerificationNotRequired(bool verifiedMobile, bool allowMobile, bool allowMobileMarketing)
        {
            var candidateId = Guid.NewGuid();
            var candidate   = new CandidateBuilder(candidateId).AllowMobile(allowMobile).VerifiedMobile(verifiedMobile).AllowMobileMarketing(allowMobileMarketing).Build();
            var strategy    = new SendMobileVerificationCodeStrategyBuilder().Build();

            Action action = () => { strategy.SendMobileVerificationCode(candidate); };

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

            action.ShouldThrow <CustomException>().WithMessage(message).And.Code.Should().Be(ErrorCodes.EntityStateError);
        }
Exemplo n.º 4
0
        public void EmptyMobileVerificationCode()
        {
            var          candidateId            = Guid.NewGuid();
            const string mobileVerificationCode = "1234";
            var          candidate = new CandidateBuilder(candidateId).AllowMobile(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);
            candidateWriteRepository.Verify(r => r.Save(candidate), Times.Once);
        }
        public void Success()
        {
            var candidateId = Guid.NewGuid();

            const string phoneNumber                       = "0123456789";
            const string mobileVerificationCode            = "1234";
            var          mobileVerificationCodeDateCreated = DateTime.UtcNow.AddDays(-1);

            var candidate = new CandidateBuilder(candidateId)
                            .EnableApplicationStatusChangeAlertsViaText(true)
                            .VerifiedMobile(false)
                            .MobileVerificationCode(mobileVerificationCode)
                            .MobileVerificationCodeDateCreated(mobileVerificationCodeDateCreated)
                            .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);

            candidateWriteRepository.Verify(r => r.Save(candidate), Times.Never);

            candidate.CommunicationPreferences.MobileVerificationCode.Should().Be(mobileVerificationCode);
            candidate.CommunicationPreferences.MobileVerificationCodeDateCreated.Should().HaveValue();
            // ReSharper disable once PossibleInvalidOperationException
            candidate.CommunicationPreferences.MobileVerificationCodeDateCreated.Value.Should().Be(mobileVerificationCodeDateCreated);

            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);
        }