public void GivenMultipleExpiringDrafts_ThenOrderedByClosingDate()
        {
            var expiringDrafts = new ExpiringApprenticeshipApplicationDraftsBuilder().WithExpiringDrafts(3).Build();

            expiringDrafts[0].ClosingDate = new DateTime(2015, 02, 01);
            expiringDrafts[1].ClosingDate = new DateTime(2015, 01, 01);
            expiringDrafts[2].ClosingDate = new DateTime(2015, 04, 01);
            var smsRequest = new DailyDigestSmsRequestBuilder().WithExpiringDrafts(expiringDrafts).Build();

            var draftsJson = smsRequest.Tokens.First(t => t.Key == CommunicationTokens.ExpiringDrafts).Value;
            var drafts     = JsonConvert.DeserializeObject <List <ExpiringApprenticeshipApplicationDraft> >(draftsJson);

            Assert.That(drafts, Is.Ordered.By("ClosingDate"));
        }
        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 smsRequest = new DailyDigestSmsRequestBuilder().WithApplicationStatusAlerts(alerts).Build();

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

            Assert.That(applicationStatusAlerts, Is.Ordered.By("DateUpdated"));
        }
        public void GivenMultipleExpiringDraftsSpecialCharacters(int noOfDrafts)
        {
            var expiringDrafts = new ExpiringApprenticeshipApplicationDraftsBuilder().WithSpecialCharacterExpiringDrafts(noOfDrafts).Build();
            var smsRequest     = new DailyDigestSmsRequestBuilder().WithExpiringDrafts(expiringDrafts).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(expiringDrafts, null, out draftCount, out draftLineCount, out alertCount, out alertLineCount);

            message.Should().Be(expectedMessage);
            draftCount.Should().Be(noOfDrafts);
            draftLineCount.Should().BeLessOrEqualTo(MaxDraftCount);
        }
        public void GivenSingleExpiringDraft()
        {
            var expiringDrafts = new ExpiringApprenticeshipApplicationDraftsBuilder().WithExpiringDrafts(1).Build();
            var smsRequest     = new DailyDigestSmsRequestBuilder().WithExpiringDrafts(expiringDrafts).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(expiringDrafts, null, out draftCount, out draftLineCount, out alertCount, out alertLineCount);

            message.Should().Be(expectedMessage);
            draftCount.Should().Be(1);
            draftLineCount.Should().Be(1);
        }
        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);
        }