示例#1
0
        public async Task Get_OptionalRouteParameter_ItCanBeOmitted()
        {
            using var sut = new ApiStub();

            sut.Get(
                "/testget/{arg:string?}",
                (req, args) => "testresponse");

            sut.Start();

            var result = await httpClient.GetAsync(
                new UriBuilder(new Uri(sut.Address)) { Path = "/testget" }.Uri);

            Assert.Equal(HttpStatusCode.OK, result.StatusCode);

            var resultString = await result.Content.ReadAsStringAsync();

            Assert.Equal("testresponse", resultString);
        }
示例#2
0
        public async Task Get_RouteParameterWithDefaultValue_DefaultValueReturned()
        {
            using var sut = new ApiStub();

            sut.Get(
                "/testget/{arg:string=apple}",
                (req, args) => $"testresponse arg: {args.Route.arg}");

            sut.Start();

            var result = await httpClient.GetAsync(
                new UriBuilder(new Uri(sut.Address)) { Path = "/testget" }.Uri);

            Assert.Equal(HttpStatusCode.OK, result.StatusCode);

            var resultString = await result.Content.ReadAsStringAsync();

            Assert.Equal("testresponse arg: apple", resultString);
        }
示例#3
0
        public async Task Get_MultipleRouteAndQueryParameters_AllParameterAvailable()
        {
            using var sut = new ApiStub();

            sut.Get(
                "/testget/{arg1}/part/{arg2}",
                (req, args) => $"testresponse arg1: {args.Route.arg1} arg2: {args.Route.arg2} qarg1: {args.Query.qarg1} qarg2: {args.Query.qarg2}");

            sut.Start();

            var result = await httpClient.GetAsync(
                new UriBuilder(new Uri(sut.Address)) { Path = "/testget/orange/part/apple", Query = "?qarg1=melon&qarg2=pear" }.Uri);

            Assert.Equal(HttpStatusCode.OK, result.StatusCode);

            var resultString = await result.Content.ReadAsStringAsync();

            Assert.Equal("testresponse arg1: orange arg2: apple qarg1: melon qarg2: pear", resultString);
        }
示例#4
0
        public async Task Get_CalledQueryString_QueryParameterAvailable()
        {
            using var sut = new ApiStub();

            sut.Get(
                "/testget",
                (req, args) => $"testresponse arg: {args.Query.myArg}");

            sut.Start();

            var result = await httpClient.GetAsync(
                new UriBuilder(new Uri(sut.Address)) { Path = "/testget", Query = "?myArg=orange" }.Uri);

            Assert.Equal(HttpStatusCode.OK, result.StatusCode);

            var resultString = await result.Content.ReadAsStringAsync();

            Assert.Equal("testresponse arg: orange", resultString);
        }
示例#5
0
        public async Task Get_CalledSetupRoute_RouteDataAvailable()
        {
            using var sut = new ApiStub();

            sut.Get(
                "/testget/{myArg}",
                (req, args) => $"testresponse arg: {args.Route.myArg}");

            sut.Start();

            var result = await httpClient.GetAsync(
                new UriBuilder(new Uri(sut.Address)) { Path = "/testget/orange" }.Uri);

            Assert.Equal(HttpStatusCode.OK, result.StatusCode);

            var resultString = await result.Content.ReadAsStringAsync();

            Assert.Equal("testresponse arg: orange", resultString);
        }
        public void NetatmoUnitCurrentReadingDataCouldNoBeRead()
        {
            string responseText = "{ \"access_token\":\"544cf4071c7759831d94cdf9|fcb30814afbffd0e39381e74fe38a59a\",\"refresh_token\":\"544cf4071c7759831d94cdf9|2b2c270c1208e8f67d3bd3891e395e1a\",\"scope\":[\"read_station\"],\"expires_in\":10800,\"expire_in\":10800}";
            //string deviceResponse = File.ReadAllText(fileDir + "netatmodeviceresponse.json");
            string  deviceResponse = netatmoData;
            ApiStub apiNetatmoStub = new ApiStub();

            apiNetatmoStub.Post(
                "/oauth2/token",
                (request, args) =>
            {
                return(responseText);
            }
                );
            apiNetatmoStub.Get(
                "/api/devicelist",
                (request, response) =>
            {
                return(deviceResponse);
            }
                );
            string responseReading = null;


            apiNetatmoStub.Get(
                "/api/getmeasure",
                (request, args) =>
            {
                return(responseReading);
            }
                );

            apiNetatmoStub.Start();

            AppKeyConfig configs = new AppKeyConfig();

            configs.NetatmoHost = apiNetatmoStub.Address;

            ClimateItem actualReading = netatmoUnit.CurrentReading(configs);

            Assert.Null(actualReading);
        }
        public async Task IfAccept_CustomNotMatchinAcceptCondition_NotFoundReturned()
        {
            using (var sut = new ApiStub())
            {
                sut.Get("/testget", (req, args) => "testresponse")
                .IfAccept(accept => accept.Contains("does not contain"));

                sut.Start();

                var requestMessage = new HttpRequestMessage(HttpMethod.Get, new UriBuilder(new Uri(sut.Address))
                {
                    Path = "/testget"
                }.Uri);
                requestMessage.Headers.Add("Accept", "custom/stubbery");

                var result = await httpClient.SendAsync(requestMessage);

                Assert.Equal(HttpStatusCode.NotFound, result.StatusCode);
            }
        }
示例#8
0
        public async Task Post_BodyPassed_BodyAvailable()
        {
            using var sut = new ApiStub();

            sut.Post(
                "/testpost",
                (req, args) => $"testresponse body: {args.Body.ReadAsString()}");

            sut.Start();

            var result = await httpClient.PostAsync(
                new UriBuilder(new Uri(sut.Address)) { Path = "/testpost" }.Uri,
                new StringContent("orange"));

            Assert.Equal(HttpStatusCode.OK, result.StatusCode);

            var resultString = await result.Content.ReadAsStringAsync();

            Assert.Equal("testresponse body: orange", resultString);
        }
示例#9
0
            public async Task Put_CalledSetupRouteWithFluentMethod_SetupResponseReturned()
            {
                using var sut = new ApiStub();

                sut.Put()
                .IfRoute("/testput")
                .Response((req, args) => "testresponse");

                sut.Start();

                var result = await httpClient.PutAsync(
                    new UriBuilder(new Uri(sut.Address)) { Path = "/testput" }.Uri,
                    new StringContent(""));

                Assert.Equal(HttpStatusCode.OK, result.StatusCode);

                var resultString = await result.Content.ReadAsStringAsync();

                Assert.Equal("testresponse", resultString);
            }
示例#10
0
        public async Task IfHeaders_CustomTwoHeaderConditionsAndHeadersNotPresent_NotFoundReturned()
        {
            using var sut = new ApiStub();

            sut
            .Get("/testget", (req, args) => "testresponse")
            .IfHeaders(headers => headers["HeaderTest1"] == "headerValue1" && headers["HeaderTest2"] == "headerValue2");

            sut.Start();

            var requestMessage = new HttpRequestMessage(HttpMethod.Get, new UriBuilder(new Uri(sut.Address))
            {
                Path = "/testget"
            }.Uri);

            requestMessage.Headers.Add("HeaderTest1", "headerValue1");

            var result = await httpClient.SendAsync(requestMessage);

            Assert.Equal(HttpStatusCode.NotFound, result.StatusCode);
        }
示例#11
0
        public async Task IfContentType_CustomNotMatchingFunc_NotFoundReturned()
        {
            using var sut = new ApiStub();

            sut.Post("/testget", (req, args) => "testresponse")
            .IfContentType(contentType => contentType.Contains("does not contain"));

            sut.Start();

            var requestMessage = new HttpRequestMessage(HttpMethod.Post, new UriBuilder(new Uri(sut.Address))
            {
                Path = "/testget"
            }.Uri)
            {
                Content = new StringContent("", Encoding.UTF8, "custom/stubbery")
            };

            var result = await httpClient.SendAsync(requestMessage);

            Assert.Equal(HttpStatusCode.NotFound, result.StatusCode);
        }
示例#12
0
        public void NibeUnit_Refresh_NotOk()
        {
            ApiStub apiNibeStub = new ApiStub();

            apiNibeStub.Request(HttpMethod.Post).
            IfRoute("/oauth/token").
            Response((request, args) =>
            {
                return("{ Error, Not Authorized}");
            }
                     ).StatusCode(StatusCodes.Status401Unauthorized);

            apiNibeStub.Start();
            AppKeyConfig configs = new AppKeyConfig();

            configs.NibeHost = apiNibeStub.Address;

            NibeAuth res = nibeUnit.Refresh(configs);

            Assert.Null(res);
        }
        public async Task ResponseBody_BodySet_BodyReturned_ActionResultResponse()
        {
            using var sut = new ApiStub();
            using var ms  = new MemoryStream();

            await ms.WriteAsync(Encoding.UTF8.GetBytes("Test File Data"));

            ms.Position = 0;

            sut.Get("/testget", (req, args) => new FileStreamResult(ms, "text/plain"));

            sut.Start();

            var result = await httpClient.GetAsync(new UriBuilder(new Uri(sut.Address)) { Path = "/testget" }.Uri);

            var resultContentType = result.Content.Headers.ContentType.MediaType;
            var resultFileData    = await result.Content.ReadAsStringAsync();

            Assert.Equal("text/plain", resultContentType);
            Assert.Equal("Test File Data", resultFileData);
        }
示例#14
0
        public void Returns_Remote_Config_Value_From_Http_Scheme_Json_File()
        {
            using (var apiStub = new ApiStub())
            {
                apiStub.Get(
                    "/Group-Command.json",
                    (req, args) => @"{
""HystrixCommandEnabled"": true,
""CommandTimeoutInMilliseconds"":12345,
""CircuitBreakerForcedOpen"":false,
""CircuitBreakerForcedClosed"":false,
""CircuitBreakerErrorThresholdPercentage"":50,
""CircuitBreakerSleepWindowInMilliseconds"":5000,
""CircuitBreakerRequestVolumeThreshold"":20,
""MetricsHealthSnapshotIntervalInMilliseconds"":500,
""MetricsRollingStatisticalWindowInMilliseconds"":10000,
""MetricsRollingStatisticalWindowBuckets"":10,
""MetricsRollingPercentileEnabled"":true,
""MetricsRollingPercentileWindowInMilliseconds"":60000,
""MetricsRollingPercentileWindowBuckets"":6,
""MetricsRollingPercentileBucketSize"":100
}");

                apiStub.Start();

                var options = new HystrixJsonConfigurationSourceOptions
                {
                    BaseLocation    = apiStub.Address,
                    LocationPattern = "{0}-{1}.json"
                };

                var commandIdentifier    = new HystrixCommandIdentifier("Group", "Command");
                var configurationService = new HystrixJsonConfigConfigurationService(commandIdentifier, options);

                // Act
                var value = configurationService.GetCommandTimeoutInMilliseconds();

                Assert.Equal(12345, value);
            }
        }
示例#15
0
        public void NibeUnit_GetReadingWithAccessCode_Is_NotSuccessful()
        {
            //string reading = "[{\"parameterId\":40004,\"name\":\"outdoor_temperature\",\"title\":\"outdoor temp.\",\"designation\":\"BT1\",\"unit\":\"°C\",\"displayValue\":\"2.7°C\",\"rawValue\":27},{\"parameterId\":40033,\"name\":\"indoor_temperature\",\"title\":\"room temperature\",\"designation\":\"BT50\",\"unit\":\"°C\",\"displayValue\":\"22.7°C\",\"rawValue\":227}]";
            ApiStub apiNibeStub = new ApiStub();

            apiNibeStub.Request(HttpMethod.Post).
            IfRoute("/oauth/token").
            Response((request, args) =>
            {
                return("{ Error, Not Authorized}");
            }
                     ).StatusCode(StatusCodes.Status401Unauthorized);
            apiNibeStub.Start();

            AppKeyConfig configs = new AppKeyConfig();

            configs.NibeHost = apiNibeStub.Address;

            ClimateItem item = nibeUnit.GetReadingWithAccessCode("12345", configs);

            Assert.Null(item);
        }
示例#16
0
        public async Task IfHeader_OneHeaderConditionAndHeaderPresentWithWrongValue_NotFoundReturned()
        {
            using var sut = new ApiStub();

            sut.Get(
                "/testget",
                (req, args) => "testresponse")
            .IfHeader("HeaderTest", "headerValue");

            sut.Start();

            var requestMessage = new HttpRequestMessage(HttpMethod.Get, new UriBuilder(new Uri(sut.Address))
            {
                Path = "/testget"
            }.Uri);

            requestMessage.Headers.Add("HeaderTest", "wrongValue");

            var result = await httpClient.SendAsync(requestMessage);

            Assert.Equal(HttpStatusCode.NotFound, result.StatusCode);
        }
示例#17
0
        public CountyTests()
        {
            postcodeApiStub = new ApiStub();

            postcodeApiStub.Get(
                "/postcodes/{postcode}",
                (request, args) =>
            {
                if (args.Route.postcode == "postcodeOk")
                {
                    return("{ \"status\": 200, \"result\": { \"admin_county\": \"CountyName\" } }");
                }

                if (args.Route.postcode == "postcodeNotFound")
                {
                    return("{ \"status\": 404 }");
                }

                return("{ \"status\": 500 }");
            });

            postcodeApiStub.Start();

            var hostingEnv    = CreateHostingEnvironment();
            var loggerFactory = new LoggerFactory();

            var startup = new Startup(hostingEnv);

            server = new TestServer(new WebHostBuilder()
                                    .Configure(app => startup.Configure(app, hostingEnv, loggerFactory))
                                    .ConfigureServices(
                                        services =>
            {
                startup.ConfigureServices(services);

                // Replace the real api URL with the stub.
                startup.Configuration["PostCodeApiUrl"] = postcodeApiStub.Address;
            }));
        }
示例#18
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="port">The Port to host the stub on</param>
        /// <param name="useDefaultResponses">Add the default YNAB stub responses</param>
        public YnabApiStub(int?port = null, bool useDefaultResponses = true)
        {
            _stub = new ApiStub();
            if (port.HasValue)
            {
                _stub.Port = port;
            }

            // Read in default configurations
            if (useDefaultResponses)
            {
                foreach (var fileName in Directory.GetFiles("stub-responses"))
                {
                    using (var reader = new StreamReader(fileName))
                    {
                        var endpoint = fileName.Substring(fileName.IndexOf("\\") + 1).Split(".")[0];
                        endpoint = endpoint.Replace("__", "/");
                        var content = reader.ReadToEnd();
                        _stub.Get(
                            $"/{endpoint}",
                            (req, args) => {
                            return(content);
                        }
                            )
                        .AddDefaultHeaders();
                    }
                    var postEndpoint = "budgets/14235236-8085-4cf6-9fa6-92c34ed44b0c/transactions";
                    _stub.Post(
                        $"/{postEndpoint}",
                        (req, args) => {
                        return("{\"data\":{\"transaction_ids\":[\"013a8128-d78f-42ff-a59e-633a4c75253e\"],\"transaction\":{\"id\":\"013a8128-d78f-42ff-a59e-633a4c75253e\",\"date\":\"2019-09-04\",\"amount\":100,\"memo\":\"TEST\",\"cleared\":\"cleared\",\"approved\":true,\"flag_color\":\"red\",\"account_id\":\"09c21bf0-8bd0-4b7b-b158-4fe2df899991\",\"account_name\":\"Checking Account\",\"payee_id\":\"51b1c8ad-f51e-4782-a0dc-f1b2b2cadd61\",\"payee_name\":\"Starting Balance\",\"category_id\":\"6e6c1877-6fa7-461a-8f5f-0aadf361f8cd\",\"category_name\":\"Immediate Income SubCategory\",\"transfer_account_id\":null,\"transfer_transaction_id\":null,\"matched_transaction_id\":null,\"import_id\":null,\"deleted\":false,\"subtransactions\":[]},\"server_knowledge\":174}}");
                    }
                        );
                }
            }

            _stub.Start();
        }
        public async Task MultiplePosts_OneMatch_DoesntHangConnectionOnLinux()
        {
            var largeText = new string('a', 6000);

            using var sut = new ApiStub();

            sut.Post("/", (req, args) => "testresponse1");

            sut.Start();

            for (var i = 0; i < 5; i++)
            {
                var postContent = new StringContent(largeText, Encoding.UTF8, "text/plain");

                var result = await httpClient.PostAsync(sut.Address, postContent);

                Assert.Equal(HttpStatusCode.OK, result.StatusCode);

                var resultString = await result.Content.ReadAsStringAsync();

                Assert.Equal("testresponse1", resultString);
            }
        }
        public void NetatmoUnitLoginFailDueToSetDevice()
        {
            string  responseText   = "{ \"access_token\":\"544cf4071c7759831d94cdf9|fcb30814afbffd0e39381e74fe38a59a\",\"refresh_token\":\"544cf4071c7759831d94cdf9|2b2c270c1208e8f67d3bd3891e395e1a\",\"scope\":[\"read_station\"],\"expires_in\":10800,\"expire_in\":10800}";
            ApiStub apiNetatmoStub = new ApiStub();

            apiNetatmoStub.Post(
                "/oauth2/token",
                (request, args) =>
            {
                return(responseText);
            }
                );

            apiNetatmoStub.Start();

            AppKeyConfig configs = new AppKeyConfig();

            configs.NetatmoHost = apiNetatmoStub.Address;

            Exception ex = Assert.Throws <Exception>(() => netatmoUnit.init(configs));

            Assert.Equal("Could not set device and module", ex.Message);
        }
        private TestServer StartApiUnderTest(ApiStub userApiStub = null)
        {
            var host = WebHost.CreateDefaultBuilder()
                       .UseStartup <Startup>();

            if (userApiStub != null)
            {
                host.ConfigureAppConfiguration((ctx, b) =>
                {
                    b.Add(new MemoryConfigurationSource
                    {
                        InitialData = new Dictionary <string, string>
                        {
                            // Replace the real api URL with the stub.
                            ["UserApiUrl"] = userApiStub.Address
                        }
                    });
                });
            }
            var server = new TestServer(host);

            return(server);
        }
示例#22
0
        public async Task IfAccept_AcceptEqual_ResultReturned()
        {
            using (var sut = new ApiStub())
            {
                sut.Get("/testget", (req, args) => "testresponse")
                .IfAccept("custom/stubbery");

                sut.Start();

                var requestMessage = new HttpRequestMessage(HttpMethod.Get, new UriBuilder(new Uri(sut.Address))
                {
                    Path = "/testget"
                }.Uri);
                requestMessage.Headers.Add("Accept", "custom/stubbery");

                var result = await httpClient.SendAsync(requestMessage);

                var resultString = await result.Content.ReadAsStringAsync();

                Assert.Equal(HttpStatusCode.OK, result.StatusCode);
                Assert.Equal("testresponse", resultString);
            }
        }
示例#23
0
        public async Task MultipleSetups_OnlyOneMatch_TheMatchingReturned()
        {
            using var sut = new ApiStub();

            sut.Post("/testget1/{arg1}", (req, args) => $"testresponse,{args.Route.arg2}")
            .IfHeader("Header1", "TestValue1")
            .IfHeader("Header2", "TestValue2")
            .IfContentType("custom/stubbery")
            .IfAccept("custom/accept")
            .IfRoute("/testget2/{arg2}")
            .StatusCode(StatusCodes.Status300MultipleChoices)
            .Header("ResponseHeader1", "ResponseValue1")
            .Header("ResponseHeader2", "ResponseValue2");

            sut.Start();

            var requestMessage = new HttpRequestMessage(HttpMethod.Post, new UriBuilder(new Uri(sut.Address))
            {
                Path = "/testget2/argValue"
            }.Uri);

            requestMessage.Headers.Add("Header1", "TestValue1");
            requestMessage.Headers.Add("Header2", "TestValue2");
            requestMessage.Content = new StringContent("", Encoding.UTF8, "custom/stubbery");
            requestMessage.Headers.Add("Accept", "custom/accept");

            var result = await httpClient.SendAsync(requestMessage);

            Assert.Equal(HttpStatusCode.MultipleChoices, result.StatusCode);

            var resultString = await result.Content.ReadAsStringAsync();

            Assert.Equal("testresponse,argValue", resultString);

            Assert.Equal("ResponseValue1", result.Headers.GetValues("ResponseHeader1").First());
            Assert.Equal("ResponseValue2", result.Headers.GetValues("ResponseHeader2").First());
        }
示例#24
0
        public async Task IfContentType_ContentTypeEqual_ResultReturned()
        {
            using var sut = new ApiStub();

            sut.Post("/testget", (req, args) => "testresponse")
            .IfContentType("custom/stubbery");

            sut.Start();

            var requestMessage = new HttpRequestMessage(HttpMethod.Post, new UriBuilder(new Uri(sut.Address))
            {
                Path = "/testget"
            }.Uri)
            {
                Content = new StringContent("", Encoding.UTF8, "custom/stubbery")
            };

            var result = await httpClient.SendAsync(requestMessage);

            var resultString = await result.Content.ReadAsStringAsync();

            Assert.Equal(HttpStatusCode.OK, result.StatusCode);
            Assert.Equal("testresponse", resultString);
        }
示例#25
0
        public void NibeUnit_CurrentReading_Is_SuccessfulWithAccessCode()
        {
            string  reading     = "[{\"parameterId\":40004,\"name\":\"outdoor_temperature\",\"title\":\"outdoor temp.\",\"designation\":\"BT1\",\"unit\":\"°C\",\"displayValue\":\"2.7°C\",\"rawValue\":27},{\"parameterId\":40033,\"name\":\"indoor_temperature\",\"title\":\"room temperature\",\"designation\":\"BT50\",\"unit\":\"°C\",\"displayValue\":\"22.7°C\",\"rawValue\":227}]";
            ApiStub apiNibeStub = new ApiStub();

            apiNibeStub.Get(
                "/api/v1/systems/27401/parameters",
                (request, args) =>
            {
                return(reading);
            }
                );
            apiNibeStub.Start();

            AppKeyConfig configs = new AppKeyConfig();

            configs.NibeHost = apiNibeStub.Address;

            ClimateItem item = nibeUnit.CurrentReading(configs);

            Assert.NotNull(item);
            Assert.Equal(item.IndoorValue, "22.7");
            Assert.Equal(item.OutdoorValue, "2.7");
        }
示例#26
0
        public async Task IfHeader_OneHeaderConditionAndHeaderPresent_ResponseReturned()
        {
            using var sut = new ApiStub();

            sut.Get(
                "/testget",
                (req, args) => "testresponse")
            .IfHeader("HeaderTest", "headerValue");

            sut.Start();

            var requestMessage = new HttpRequestMessage(HttpMethod.Get, new UriBuilder(new Uri(sut.Address))
            {
                Path = "/testget"
            }.Uri);

            requestMessage.Headers.Add("HeaderTest", "headerValue");

            var result = await httpClient.SendAsync(requestMessage);

            var resultString = await result.Content.ReadAsStringAsync();

            Assert.Equal("testresponse", resultString);
        }
示例#27
0
        public async Task IfHeaders_CustomTwoHeaderConditionsAndBothHeadersPresent_ResponseReturned()
        {
            using (var sut = new ApiStub())
            {
                sut
                .Get("/testget", (req, args) => "testresponse")
                .IfHeaders(headers => headers["HeaderTest1"] == "headerValue1" && headers["HeaderTest2"] == "headerValue2");

                sut.Start();

                var requestMessage = new HttpRequestMessage(HttpMethod.Get, new UriBuilder(new Uri(sut.Address))
                {
                    Path = "/testget"
                }.Uri);
                requestMessage.Headers.Add("HeaderTest1", "headerValue1");
                requestMessage.Headers.Add("HeaderTest2", "headerValue2");

                var result = await httpClient.SendAsync(requestMessage);

                var resultString = await result.Content.ReadAsStringAsync();

                Assert.Equal("testresponse", resultString);
            }
        }
        public void NetatmoUnitLoginFailDueToLogin()
        {
            //string deviceResponse = File.ReadAllText(fileDir + "netatmodeviceresponse.json");
            string  deviceResponse = netatmoData;
            ApiStub apiNetatmoStub = new ApiStub();

            apiNetatmoStub.Get(
                "/api/devicelist",
                (request, response) =>
            {
                return(deviceResponse);
            }
                );

            apiNetatmoStub.Start();

            AppKeyConfig configs = new AppKeyConfig();

            configs.NetatmoHost = apiNetatmoStub.Address;

            Exception ex = Assert.Throws <Exception>(() => netatmoUnit.init(configs));

            Assert.Equal("Could not login, response: ", ex.Message);
        }
示例#29
0
        public void Address_NotStarted_Exception()
        {
            var sut = new ApiStub();

            Assert.Throws <InvalidOperationException>(() => sut.Address);
        }
        public void ResponseBody_NullPassed_ArgumentNullException()
        {
            using var sut = new ApiStub();

            Assert.Throws <ArgumentNullException>(() => sut.Get().Response(null));
        }