Esempio n. 1
0
        public async Task IfAccept_AcceptDifferent_NotFoundReturned()
        {
            using var sut = new ApiStub();

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

            sut.Start();

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

            Assert.Equal(HttpStatusCode.NotFound, result.StatusCode);
        }
Esempio n. 2
0
        public async Task Route_RouteDifferent_NotFoundReturned()
        {
            using (var sut = new ApiStub())
            {
                sut.Get("/testget", (req, args) => "testresponse");

                sut.Start();

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

                Assert.Equal(HttpStatusCode.NotFound, result.StatusCode);
            }
        }
Esempio n. 3
0
            public async Task Delete_CalledDifferentRoute_NotFoundReturned()
            {
                using (var sut = new ApiStub())
                {
                    sut.Delete("/testdelete", (req, args) => "testresponse");

                    sut.Start();

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

                    Assert.Equal(HttpStatusCode.NotFound, result.StatusCode);
                }
            }
        public async Task StatusCode_StatusCodeSet_StatusCodeReturned()
        {
            using (var sut = new ApiStub())
            {
                sut.Get("/testget", (req, args) => "testresponse")
                .StatusCode(StatusCodes.Status206PartialContent);

                sut.Start();

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

                Assert.Equal(HttpStatusCode.PartialContent, result.StatusCode);
            }
        }
        public async Task Headers_HeadersAdded_HeadersReturned()
        {
            using var sut = new ApiStub();

            sut.Get("/testget", (req, args) => "testresponse")
            .Headers(("Header1", "HeaderValue1"), ("Header2", "HeaderValue2"));

            sut.Start();

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

            Assert.Equal("HeaderValue1", result.Headers.GetValues("Header1").First());
            Assert.Equal("HeaderValue2", result.Headers.GetValues("Header2").First());
        }
Esempio n. 6
0
        public async Task IfHeader_OneHeaderConditionAndHeaderNotPresent_NotFoundReturned()
        {
            using (var sut = new ApiStub())
            {
                sut.Get("/testget", (req, args) => "testresponse")
                .IfHeader("HeaderTest", "headerValue");

                sut.Start();

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

                Assert.Equal(HttpStatusCode.NotFound, result.StatusCode);
            }
        }
        public async Task ResponseBody_BodySet_BodyReturned_StringResponse()
        {
            using var sut = new ApiStub();

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

            sut.Start();

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

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

            Assert.Equal("testresponse", resultString);
        }
Esempio n. 8
0
            public async Task Put_CalledDifferentMethod_NotFoundReturned()
            {
                using var sut = new ApiStub();

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

                sut.Start();

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

                Assert.Equal(HttpStatusCode.NotFound, result.StatusCode);
            }
        public async Task QueryArg_QueryArgDifferent_NotFoundReturned()
        {
            using var sut = new ApiStub();

            sut.Request(HttpMethod.Get)
            .IfQueryArg("testArg", "testValue")
            .Response((req, args) => "testresponse");

            sut.Start();

            var result = await httpClient.GetAsync(new UriBuilder(new Uri(sut.Address)) { Path = "/test", Query = "testArg=testValue2" }.Uri);

            Assert.Equal(HttpStatusCode.NotFound, result.StatusCode);
        }
Esempio n. 10
0
        public async Task IfBody_BodyIsDifferent_NotFoundReturned()
        {
            using var sut = new ApiStub();

            sut.Post("/testpost", (req, args) => "testresponse")
            .IfBody(body => body.Contains("testpost"));

            sut.Start();

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

            Assert.Equal(HttpStatusCode.NotFound, result.StatusCode);
        }
Esempio n. 11
0
        public async Task Method_MethodSame_ResultReturned()
        {
            using var sut = new ApiStub();

            sut.Delete("/testget", (req, args) => "testresponse");

            sut.Start();

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

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

            Assert.Equal(HttpStatusCode.OK, result.StatusCode);
            Assert.Equal("testresponse", resultString);
        }
Esempio n. 12
0
        public async Task Route_RouteIncludesMatchingQuery_ResultReturned()
        {
            using var sut = new ApiStub();

            sut.Get("/testget?foo=bar", (req, args) => "testresponse");

            sut.Start();

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

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

            Assert.Equal(HttpStatusCode.OK, result.StatusCode);
            Assert.Equal("testresponse", resultString);
        }
Esempio n. 13
0
            public async Task Get_SetupAfterStart_Works()
            {
                using var sut = new ApiStub();

                sut.Start();

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

                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);
            }
Esempio n. 14
0
            public async Task Get_CallsStubWithCustomPort_WhenCustomPortIsSet()
            {
                using var apiStub = new ApiStub();

                apiStub.Get("/testget", (req, args) => "testresponse");
                apiStub.Port = 1020;
                apiStub.Start();

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

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

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

                Assert.Equal("testresponse", resultString);
            }
Esempio n. 15
0
            public async Task Delete_CalledSetupRouteWithFluentMethod_SetupResponseReturned()
            {
                using var sut = new ApiStub();

                sut.Delete().IfRoute("/testdelete").Response((req, args) => "testresponse");

                sut.Start();

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

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

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

                Assert.Equal("testresponse", resultString);
            }
        public void NetatmoUnitCurrentReading()
        {
            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 = "{\"body\":[{\"beg_time\":1481372100,\"value\":[[0.7]]}],\"status\":\"ok\",\"time_exec\":0.034345865249634,\"time_server\":1481371970}";


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

            apiNetatmoStub.Start();

            AppKeyConfig configs = new AppKeyConfig();

            configs.NetatmoHost = apiNetatmoStub.Address;

            ClimateItem actualReading = netatmoUnit.CurrentReading(configs);

            Assert.NotNull(actualReading);
            Assert.Equal("0.7", actualReading.IndoorValue);
            Assert.Equal("0.7", actualReading.OutdoorValue);
            Assert.NotNull(actualReading.TimeStamp);

            Assert.True(DateTime.Now >= actualReading.TimeStamp);
        }
        public async Task StatusCode_StatusCodeProviderSet_StatusCodeReturned()
        {
            using var sut = new ApiStub();

            sut.Get("/testget", (req, args) => "testresponse")
            .StatusCode((req, args) => args.Query.testquery == "Success" ? StatusCodes.Status200OK : StatusCodes.Status500InternalServerError);

            sut.Start();

            var resultSuccess = await httpClient.GetAsync(new UriBuilder(new Uri(sut.Address)) { Path = "/testget", Query = "?testquery=Success" }.Uri);

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

            var resultFailure = await httpClient.GetAsync(new UriBuilder(new Uri(sut.Address)) { Path = "/testget", Query = "?testquery=Failure" }.Uri);

            Assert.Equal(HttpStatusCode.InternalServerError, resultFailure.StatusCode);
        }
Esempio n. 18
0
        public async Task QueryArg_QueryArgSame_ResultReturned()
        {
            using var sut = new ApiStub();

            sut.Request(HttpMethod.Get)
            .IfQueryArg("testArg", "testValue")
            .Response((req, args) => "testresponse");

            sut.Start();

            var result = await httpClient.GetAsync(new UriBuilder(new Uri(sut.Address)) { Path = "/test", Query = "testArg=testValue" }.Uri);

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

            Assert.Equal(HttpStatusCode.OK, result.StatusCode);
            Assert.Equal("testresponse", resultString);
        }
Esempio n. 19
0
        public async Task QueryArg_ValueContainsCharacterToEncode_DecodedStringProperlyMatched()
        {
            using var sut = new ApiStub();

            sut.Request(HttpMethod.Get)
            .IfQueryArg("testArg", "test value")
            .Response((req, args) => "testresponse");

            sut.Start();

            var result = await httpClient.GetAsync(new UriBuilder(new Uri(sut.Address)) { Path = "/test", Query = "testArg=test%20value" }.Uri);

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

            Assert.Equal(HttpStatusCode.OK, result.StatusCode);
            Assert.Equal("testresponse", resultString);
        }
Esempio n. 20
0
        public async Task QueryArg_MultipleValues_SecondValueMatchedCorrectly()
        {
            using var sut = new ApiStub();

            sut.Request(HttpMethod.Get)
            .IfQueryArg("testArg", "value2")
            .Response((req, args) => "testresponse");

            sut.Start();

            var result = await httpClient.GetAsync(new UriBuilder(new Uri(sut.Address)) { Path = "/test", Query = "testArg=value1&testArg=value2" }.Uri);

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

            Assert.Equal(HttpStatusCode.OK, result.StatusCode);
            Assert.Equal("testresponse", resultString);
        }
        public async Task CreateApiStubInstancesInParallel_ShouldNotCausePortCollision()
        {
            Task[] stubTasks = Enumerable.Range(1, 1000)
                               .Select(it =>
            {
                return(Task.Run(async() =>
                {
                    ApiStub stub = new ApiStub();

                    stub.Start();

                    await Task.Delay(100);
                }));
            }).ToArray();

            await Task.WhenAll(stubTasks);
        }
Esempio n. 22
0
        public async Task When_Get_Date_1Feb2017_Return_Selling_35_3182000()
        {
            using (var stub = new ApiStub())
            {
                stub.Get(
                    "/api/bot/exchange_rate/daily_average/2017-02-01/2017-02-01/USD",
                    (req, args) => "{\"result\":{\"success\":\"true\",\"api\":\"Daily Weighted-average Interbank Exchange Rate - THB  USD\",\"timestamp\":\"2018-02-15 12:18:23\",\"data\":{\"data_header\":{\"report_name_eng\":\"Rates of Exchange of Commercial Banks in Bangkok Metropolis (2002-present)\",\"report_name_th\":\"\u0E2D\u0E31\u0E15\u0E23\u0E32\u0E41\u0E25\u0E01\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E40\u0E09\u0E25\u0E35\u0E48\u0E22\u0E02\u0E2D\u0E07\u0E18\u0E19\u0E32\u0E04\u0E32\u0E23\u0E1E\u0E32\u0E13\u0E34\u0E0A\u0E22\u0E4C\u0E43\u0E19\u0E01\u0E23\u0E38\u0E07\u0E40\u0E17\u0E1E\u0E21\u0E2B\u0E32\u0E19\u0E04\u0E23 (2545-\u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19)\",\"report_uoq_name_eng\":\"(Unit : Baht 1 Unit of Foreign Currency)\",\"report_uoq_name_th\":\"(\u0E2B\u0E19\u0E48\u0E27\u0E22 : \u0E1A\u0E32\u0E17 \u0E15\u0E48\u0E2D 1 \u0E2B\u0E19\u0E48\u0E27\u0E22\u0E40\u0E07\u0E34\u0E19\u0E15\u0E23\u0E32\u0E15\u0E48\u0E32\u0E07\u0E1B\u0E23\u0E30\u0E40\u0E17\u0E28)\",\"report_source_of_data\":[{\"source_of_data_eng\":\"Bank of Thailand\",\"source_of_data_th\":\"\u0E18\u0E19\u0E32\u0E04\u0E32\u0E23\u0E41\u0E2B\u0E48\u0E07\u0E1B\u0E23\u0E30\u0E40\u0E17\u0E28\u0E44\u0E17\u0E22\"}],\"report_remark\":[{\"report_remark_eng\":\"Since Nov 16, 2015 the data regarding Buying Transfer Rate of PKR has been changed to Buying Rate using Foreign Exchange Rates (THOMSON REUTERS) with Bangkok Market Crossing.\",\"report_remark_th\":\"\u0E15\u0E31\u0E49\u0E07\u0E41\u0E15\u0E48\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48 16 \u0E1E.\u0E22. 2558 \u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E43\u0E19\u0E2D\u0E31\u0E15\u0E23\u0E32\u0E0B\u0E37\u0E49\u0E2D\u0E40\u0E07\u0E34\u0E19\u0E42\u0E2D\u0E19\u0E02\u0E2D\u0E07\u0E2A\u0E01\u0E38\u0E25 PKR \u0E44\u0E14\u0E49\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E40\u0E1B\u0E47\u0E19\u0E2D\u0E31\u0E15\u0E23\u0E32\u0E0B\u0E37\u0E49\u0E2D\u0E17\u0E35\u0E48\u0E43\u0E0A\u0E49\u0E2D\u0E31\u0E15\u0E23\u0E32\u0E43\u0E19\u0E15\u0E25\u0E32\u0E14\u0E15\u0E48\u0E32\u0E07\u0E1B\u0E23\u0E30\u0E40\u0E17\u0E28 (\u0E17\u0E2D\u0E21\u0E2A\u0E31\u0E19\u0E23\u0E2D\u0E22\u0E40\u0E15\u0E2D\u0E23\u0E4C) \u0E04\u0E33\u0E19\u0E27\u0E13\u0E1C\u0E48\u0E32\u0E19\u0E2D\u0E31\u0E15\u0E23\u0E32\u0E0B\u0E37\u0E49\u0E2D\u0E02\u0E32\u0E22\u0E40\u0E07\u0E34\u0E19\u0E14\u0E2D\u0E25\u0E25\u0E32\u0E23\u0E4C \u0E2A\u0E23\u0E2D. \u0E43\u0E19\u0E15\u0E25\u0E32\u0E14\u0E01\u0E23\u0E38\u0E07\u0E40\u0E17\u0E1E\u0E2F\"}],\"last_updated\":\"2018-02-14\"},\"data_detail\":[{\"period\":\"2017-02-01\",\"currency_id\":\"USD\",\"currency_name_th\":\"\u0E2A\u0E2B\u0E23\u0E31\u0E10\u0E2D\u0E40\u0E21\u0E23\u0E34\u0E01\u0E32 : \u0E14\u0E2D\u0E25\u0E25\u0E32\u0E23\u0E4C (USD)\",\"currency_name_eng\":\"USA : DOLLAR (USD) \",\"buying_sight\":\"34.8938000\",\"buying_transfer\":\"34.9785000\",\"selling\":\"35.3182000\",\"mid_rate\":\"35.1484000\"}]}}}");

                stub.Start();

                var response = await httpClient.GetAsync(new UriBuilder(new Uri(stub.Address)) { Path = "/api/bot/exchange_rate/daily_average/2017-02-01/2017-02-01/USD" }.Uri);

                RootObject repositories = JsonConvert.DeserializeObject <RootObject>(response.Content.ReadAsStringAsync().Result);

                Assert.Equal("35.3182000", repositories.result.data.data_detail[0].selling);
            }
        }
Esempio n. 23
0
        public async Task IfBody_BodyIsEqual_ResultReturned()
        {
            using (var sut = new ApiStub())
            {
                sut.Post("/testpost", (req, args) => "testresponse")
                .IfBody(body => body.Contains("testpost"));

                sut.Start();

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

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

                Assert.Equal(HttpStatusCode.OK, result.StatusCode);
                Assert.Equal("testresponse", resultString);
            }
        }
Esempio n. 24
0
        public async Task MultipleSetups_AllMatch_TheFirstOneReturned()
        {
            using var sut = new ApiStub();

            sut.Get("/testget", (req, args) => "testresponse1");
            sut.Get("/testget", (req, args) => "testresponse2");
            sut.Get("/testget", (req, args) => "testresponse3");

            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("testresponse1", resultString);
        }
Esempio n. 25
0
            public async Task Put_CalledSetupRoute_SetupResponseReturned()
            {
                using var sut = new ApiStub();

                sut.Put("/testput", (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);
            }
Esempio n. 26
0
        public async Task Method_MultipleMethodsOneIsEqual_ResultReturned()
        {
            using (var sut = new ApiStub())
            {
                sut.Request(HttpMethod.Get, HttpMethod.Delete)
                .IfRoute("/testget")
                .Response((req, args) => "testresponse");

                sut.Start();

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

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

                Assert.Equal(HttpStatusCode.OK, result.StatusCode);
                Assert.Equal("testresponse", resultString);
            }
        }
        private ApiStub StartStub()
        {
            var userApiStub = new ApiStub();

            userApiStub.Get(
                "/api/users/{id}",
                (request, args) =>
            {
                if (args.Route.id == "2")
                {
                    return("{ \"status\": 200, \"result\": { \"im\": \"mocked\" } }");
                }

                return("{ \"status\": 500 }");
            });
            userApiStub.Start();
            return(userApiStub);
        }
        public async Task ResponseBody_BodySet_BodyReturned_ObjectResponse()
        {
            using var sut = new ApiStub();

            sut.Get("/testget", (req, args) => new { TestValue = 234, SubObject = new { Value = "Person" } });

            sut.Start();

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

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

            var resultObject = JsonConvert.DeserializeObject <JToken>(resultString);

            Assert.NotNull(resultObject);
            Assert.Equal(234, resultObject["TestValue"]);
            Assert.Equal("Person", resultObject["SubObject"]["Value"]);
        }
Esempio n. 29
0
        public void NibeUnit_Call_Init_When_code_Is_NotNull_ButBadResponseFromApi()
        {
            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;
            Assert.Throws <Exception>(() => nibeUnit.init(configs));
        }
Esempio n. 30
0
        public void Returns_Values_From_Default_Json_If_Specific_Json_Is_Invalid()
        {
            using (var apiStub = new ApiStub())
            {
                apiStub.Get(
                    "/Group-Command.json",
                    (req, args) => @"This is { not a valid json """);

                apiStub.Get(
                    "/Default.json",
                    (req, args) => @"{
""HystrixCommandEnabled"": true,
""CommandTimeoutInMilliseconds"":50000,
""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(50000, value);
            }
        }