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); }
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); } }
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()); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); } }
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); } }
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); }
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); }
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"]); }
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)); }
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); } }