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);
        }
        public void ShouldHandleCandidateDailyDigestContainingOneOrMoreExpiringDraftsAndApplicationStatusAlerts()
        {
            // Arrange.
            var candidate = new CandidateBuilder(Guid.NewGuid())
                            .EnableAllCommunications()
                            .Build();

            AddCandidate(candidate);

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

            var applicationStatusAlerts = new ApplicationStatusAlertsBuilder()
                                          .WithApplicationStatusAlerts(1, 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.
            var canHandle = Command.CanHandle(communicationRequest);

            // Assert.
            canHandle.Should().BeTrue();
        }
        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);
        }
示例#4
0
        public void GivenMultipleApplicationStatusAlerts_ThenOrderedByDateUpdated()
        {
            var alerts = new ApplicationStatusAlertsBuilder().WithApplicationStatusAlerts(1, ApplicationStatuses.Successful).Build()
                         .Concat(new ApplicationStatusAlertsBuilder().WithApplicationStatusAlerts(2, ApplicationStatuses.Unsuccessful).Build()).ToList();

            alerts[0].DateUpdated = new DateTime(2015, 02, 01);
            alerts[1].DateUpdated = new DateTime(2015, 01, 01);
            alerts[2].DateUpdated = new DateTime(2015, 04, 01);
            var emailRequest = new DailyDigestEmailRequestBuilder().WithApplicationStatusAlerts(alerts).Build();

            var alertsJson = emailRequest.Tokens.First(t => t.Key == CommunicationTokens.ApplicationStatusAlerts).Value;
            var applicationStatusAlerts = JsonConvert.DeserializeObject <List <ExpiringApprenticeshipApplicationDraft> >(alertsJson);

            Assert.That(applicationStatusAlerts, Is.Ordered.By("DateUpdated"));
        }
示例#5
0
        public void GivenMultipleExpiringApplicationStatusAlerts()
        {
            var alerts = new ApplicationStatusAlertsBuilder().WithApplicationStatusAlerts(2, ApplicationStatuses.Successful).Build()
                         .Concat(new ApplicationStatusAlertsBuilder().WithApplicationStatusAlerts(3, ApplicationStatuses.Unsuccessful).Build()).ToList();
            var emailRequest = new DailyDigestEmailRequestBuilder().WithApplicationStatusAlerts(alerts).Build();
            List <SendGridMessageSubstitution> sendGridMessageSubstitutions;
            var sendGridMessage = GetSendGridMessage(out sendGridMessageSubstitutions);

            var emailMessageFormatter = new EmailDailyDigestMessageFormatterBuilder().Build();

            emailMessageFormatter.PopulateMessage(emailRequest, sendGridMessage.Object);

            var applicationStatusAlertTagSubstitution = sendGridMessageSubstitutions.Single(s => s.ReplacementTag == ApplicationStatusAlertTag);

            applicationStatusAlertTagSubstitution.SubstitutionValues.Count.Should().Be(1);
            applicationStatusAlertTagSubstitution.SubstitutionValues.Single().Should().Be(GetExpectedInfoSubstitution(alerts));
        }
        public void GivenSingleApplicationStatusAlert(ApplicationStatuses applicationStatus)
        {
            var alerts     = new ApplicationStatusAlertsBuilder().WithApplicationStatusAlerts(1, applicationStatus).Build();
            var smsRequest = new DailyDigestSmsRequestBuilder().WithApplicationStatusAlerts(alerts).Build();
            var formatter  = new SmsDailyDigestMessageFormatterBuilder().WithMessageTemplate(MessageTemplate).Build();

            var message = formatter.GetMessage(smsRequest.Tokens);

            int draftCount;
            int draftLineCount;
            int alertCount;
            int alertLineCount;
            var expectedMessage = GetExpectedMessage(null, alerts, out draftCount, out draftLineCount, out alertCount, out alertLineCount);

            message.Should().Be(expectedMessage);
            draftCount.Should().Be(0);
            draftLineCount.Should().Be(0);
            alertCount.Should().Be(1);
            alertLineCount.Should().Be(1);
        }
        public void GivenMultipleExpiringApplicationStatusAlerts()
        {
            var alerts = new ApplicationStatusAlertsBuilder().WithApplicationStatusAlerts(2, ApplicationStatuses.Successful).Build()
                         .Concat(new ApplicationStatusAlertsBuilder().WithApplicationStatusAlerts(3, ApplicationStatuses.Unsuccessful).Build()).ToList();
            var smsRequest = new DailyDigestSmsRequestBuilder().WithApplicationStatusAlerts(alerts).Build();
            var formatter  = new SmsDailyDigestMessageFormatterBuilder().WithMessageTemplate(MessageTemplate).Build();

            var message = formatter.GetMessage(smsRequest.Tokens);

            int draftCount;
            int draftLineCount;
            int alertCount;
            int alertLineCount;
            var expectedMessage = GetExpectedMessage(null, alerts, out draftCount, out draftLineCount, out alertCount, out alertLineCount);

            message.Should().Be(expectedMessage);
            draftCount.Should().Be(0);
            draftLineCount.Should().BeLessOrEqualTo(MaxDraftCount);
            alertCount.Should().Be(5);
            alertLineCount.Should().Be(3);
        }