public async Task Then_maps_null_response_from_forecasting_api(
            GetAccountProjectionSummaryQuery query,
            [Frozen] Mock <IForecastingApiClient <ForecastingApiConfiguration> > mockApiClient,
            GetAccountProjectionSummaryQueryHandler handler)
        {
            mockApiClient
            .Setup(client => client.Get <GetProjectionCalculationResponse>(It.Is <GetProjectionCalculationRequest>(x => x.GetUrl.Contains(query.AccountId.ToString()))))
            .ReturnsAsync((GetProjectionCalculationResponse)null);

            mockApiClient
            .Setup(client => client.Get <GetExpiringFundsResponse>(It.Is <GetExpiringFundsRequest>(x => x.GetUrl.Contains(query.AccountId.ToString()))))
            .ReturnsAsync((GetExpiringFundsResponse)null);

            var result = await handler.Handle(query, CancellationToken.None);

            result.ExpiryAmounts.Should().BeEmpty();
            result.NumberOfMonths.Should().Be(0);
            result.FundsIn.Should().Be(0);
            result.FundsOut.Should().Be(0);
        }
        public async Task Then_combines_summary_from_forecasting_api(
            GetAccountProjectionSummaryQuery query,
            GetProjectionCalculationResponse projectionCalcApiResponse,
            GetExpiringFundsResponse expiringFundsApiResponse,
            [Frozen] Mock <IForecastingApiClient <ForecastingApiConfiguration> > mockApiClient,
            GetAccountProjectionSummaryQueryHandler handler)
        {
            projectionCalcApiResponse.AccountId = query.AccountId;

            mockApiClient
            .Setup(client => client.Get <GetProjectionCalculationResponse>(It.Is <GetProjectionCalculationRequest>(x => x.GetUrl.Contains(query.AccountId.ToString()))))
            .ReturnsAsync(projectionCalcApiResponse);

            mockApiClient
            .Setup(client => client.Get <GetExpiringFundsResponse>(It.Is <GetExpiringFundsRequest>(x => x.GetUrl.Contains(query.AccountId.ToString()))))
            .ReturnsAsync(expiringFundsApiResponse);

            var result = await handler.Handle(query, CancellationToken.None);

            result.Should().BeEquivalentTo(projectionCalcApiResponse, opts => opts.ExcludingMissingMembers());
            result.ExpiryAmounts.Should().BeEquivalentTo(expiringFundsApiResponse.ExpiryAmounts);
        }
        public void Arrange()
        {
            _query = new GetAccountProjectionSummaryQuery {
                AccountId = ExpectedAccountId, NumberOfMonths = NumberOfMonths
            };
            _validator = new Mock <IValidator <GetAccountProjectionSummaryQuery> >();
            _validator.Setup(x => x.ValidateAsync(It.IsAny <GetAccountProjectionSummaryQuery>()))
            .ReturnsAsync(new ValidationResult {
                ValidationDictionary = new Dictionary <string, string>()
            });
            _cancellationToken = new CancellationToken();
            _service           = new Mock <IAccountProjectionService>();
            var accountProjectionSummary = new AccountProjectionSummary(
                ExpectedAccountId,
                DateTime.Today,
                12,
                123.56M,
                654.32M);

            _service.Setup(x => x.GetProjectionSummary(ExpectedAccountId, DateTime.Today, 12)).ReturnsAsync(accountProjectionSummary);

            _handler = new GetAccountProjectionSummaryQueryHandler(_validator.Object, _service.Object);
        }