public async Task GivenADealsRequest_WhenGetDealsIsCalled_ThenGetAsyncIsCalledWithEndpoint()
        {
            var apiKey = "abc";

            var dealsRequest = new DealsRequest
            {
                FinanceId = "someid",
                Amount    = 123m,
                Deposit   = 10m,
                Country   = "GB"
            };

            var expectedEndpoint = $"v1/dealcalculator?merchant={apiKey}&amount={dealsRequest.Amount}&deposit={dealsRequest.Deposit}&country=GB&finance={dealsRequest.FinanceId}";

            var apiClient = new Mock <IApiClient>();

            apiClient.Setup(x =>
                            x.GetAsync <DealsResponse>(
                                It.IsAny <string>(),
                                It.IsAny <CancellationToken>())).ReturnsAsync(new DealsResponse());

            var dividoApiHttpClient = new DividoApiClient(apiClient.Object, apiKey);

            await dividoApiHttpClient.GetDeals(dealsRequest, CancellationToken.None);

            apiClient.Verify(x =>
                             x.GetAsync <DealsResponse>(
                                 expectedEndpoint,
                                 CancellationToken.None), Times.Once);
        }
        public async Task GivenAnApiClientAndKey_WhenGetFinancePlansIsCalled_ThenGetAsyncIsCalledWithEndpoint()
        {
            var apiKey           = "abc";
            var expectedEndpoint = $"v1/finances?merchant={apiKey}";

            var apiClient = new Mock <IApiClient>();

            apiClient.Setup(x =>
                            x.GetAsync <FinancesResponse>(
                                It.IsAny <string>(),
                                It.IsAny <CancellationToken>())).ReturnsAsync(new FinancesResponse());

            var dividoApiHttpClient = new DividoApiClient(apiClient.Object, apiKey);

            await dividoApiHttpClient.GetFinancePlans(CancellationToken.None);

            apiClient.Verify(x =>
                             x.GetAsync <FinancesResponse>(
                                 expectedEndpoint,
                                 CancellationToken.None), Times.Once);
        }
        public async Task GivenACreditRequest_WhenCreditRequestIsCalled_ThenPostAsyncIsCalledWithEndpoint()
        {
            var apiKey           = "abc";
            var expectedEndpoint = $"v1/creditrequest";

            var apiClient = new Mock <IApiClient>();

            apiClient.Setup(x =>
                            x.PostAsync <CreditRequestResponse>(
                                It.IsAny <string>(),
                                It.IsAny <IEnumerable <KeyValuePair <string, string> > >(),
                                It.IsAny <CancellationToken>())).ReturnsAsync(new CreditRequestResponse());

            var dividoApiHttpClient = new DividoApiClient(apiClient.Object, apiKey);

            await dividoApiHttpClient.CreditRequest(new CreditRequest(), CancellationToken.None);

            apiClient.Verify(x =>
                             x.PostAsync <CreditRequestResponse>(
                                 expectedEndpoint,
                                 It.IsAny <IEnumerable <KeyValuePair <string, string> > >(),
                                 CancellationToken.None), Times.Once);
        }