public async Task AndThereAreUnprocessedPeriodsThenThePeriodsAreReturned()
        {
            var lastEventId     = "123";
            var returnedPeriods = new List <PeriodEnd>
            {
                new PeriodEnd {
                    Id = "sdfkujf"
                },
                new PeriodEnd {
                    Id = lastEventId
                },
                new PeriodEnd {
                    Id = "dlfkbmbg"
                },
                new PeriodEnd {
                    Id = "cdvflkbc"
                }
            };

            var expectedPeriods = returnedPeriods.SkipWhile(x => x.Id != lastEventId.ToString()).Skip(1);

            EventsRepository.Setup(x => x.GetLastProcessedEventId <string>(_paymentEventFeedName)).ReturnsAsync(lastEventId);
            EventsApi.Setup(x => x.GetPeriodEnds()).ReturnsAsync(returnedPeriods.ToArray());

            var response = await Service.GetUnprocessedPeriodEnds <Payment>();

            response.ShouldBeEquivalentTo(expectedPeriods);
        }
        public async Task ThenThePaymentsAreReturned()
        {
            var period     = "ABC123";
            var pageNumber = 3;

            var expectedResponse = new PageOfResults <Payment>();

            EventsApi.Setup(x => x.GetPayments(period, null, pageNumber, null)).ReturnsAsync(expectedResponse);

            var response = await Service.GetPayments(period, pageNumber);

            response.Should().BeSameAs(expectedResponse);
        }
        public async Task AndNoPeriodsHaveBeenPreviouslyProcessedThenAllPeriodsAreReturned()
        {
            var lastEventId     = "";
            var returnedPeriods = new List <PeriodEnd>
            {
                new PeriodEnd {
                    Id = "509mkfdb"
                },
                new PeriodEnd {
                    Id = "!cvlkbjgnvb"
                }
            };

            EventsRepository.Setup(x => x.GetLastProcessedEventId <string>(_paymentEventFeedName)).ReturnsAsync(lastEventId);
            EventsApi.Setup(x => x.GetPeriodEnds()).ReturnsAsync(returnedPeriods.ToArray());

            var response = await Service.GetUnprocessedPeriodEnds <Payment>();

            response.ShouldBeEquivalentTo(returnedPeriods);
        }
        public async Task AndThereAreNoUnprocessedPeriodsThenNoPeriodsAreReturned()
        {
            var lastEventId     = "123";
            var returnedPeriods = new List <PeriodEnd>
            {
                new PeriodEnd {
                    Id = "clbmcvb"
                },
                new PeriodEnd {
                    Id = lastEventId
                }
            };

            EventsRepository.Setup(x => x.GetLastProcessedEventId <string>(_paymentEventFeedName)).ReturnsAsync(lastEventId);
            EventsApi.Setup(x => x.GetPeriodEnds()).ReturnsAsync(returnedPeriods.ToArray());

            var response = await Service.GetUnprocessedPeriodEnds <Payment>();

            response.Should().BeEmpty();
        }