/// <summary> /// Add a simple get request stub response /// </summary> /// <param name="relativePath"></param> /// <param name="expectedOutput"></param> public void AddGetRequest(string relativePath, string expectedOutput) { _stub.Get( relativePath, (req, args) => { return(expectedOutput); } ) .AddDefaultHeaders(); }
public async Task IfHeader_TwoHeaderConditionsAndBothHeadersPresent_ResponseReturned() { using var sut = new ApiStub(); sut.Get( "/testget", (req, args) => "testresponse") .IfHeader("HeaderTest1", "headerValue1") .IfHeader("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 NetatmoUnitOutdoortemperature() { string responseText = "{\"body\":[{\"beg_time\":1481372100,\"value\":[[0.7]]}],\"status\":\"ok\",\"time_exec\":0.034345865249634,\"time_server\":1481371970}"; ApiStub apiNetatmoStub = new ApiStub(); apiNetatmoStub.Get( "/api/getmeasure", (request, args) => { return(responseText); } ); apiNetatmoStub.Start(); AppKeyConfig configs = new AppKeyConfig(); configs.NetatmoHost = apiNetatmoStub.Address; string actualTemp = netatmoUnit.outDoorTemperature(configs); Assert.Equal("0.7", actualTemp); }
public void ResponseBody_NullPassed_ArgumentNullException() { using (var sut = new ApiStub()) { Assert.Throws <ArgumentNullException>(() => sut.Get().Response(null)); } }
private ApiStub StartStub() { var 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(); return(postcodeApiStub); }
public async Task Headers_HeadersProviderSet_HeaderReturned() { using var sut = new ApiStub(); sut.Get("/testget", (req, args) => "testresponse") .Headers((req, args) => args.Query.testquery == "Success" ? new[]
public void NetatmoUnitLoginSuccessFul() { string responseText = "{ \"access_token\":\"544cf4071c7759831d94cdf9|fcb30814afbffd0e39381e74fe38a59a\",\"refresh_token\":\"544cf4071c7759831d94cdf9|2b2c270c1208e8f67d3bd3891e395e1a\",\"scope\":[\"read_station\"],\"expires_in\":10800,\"expire_in\":10800}"; string deviceResponse = netatmoData; ApiStub apiNetatmoStub = new ApiStub(); apiNetatmoStub.Post( "/oauth2/token", (request, args) => { return(responseText); } ); apiNetatmoStub.Get( "/api/devicelist", (request, response) => { return(deviceResponse); } ); apiNetatmoStub.Start(); AppKeyConfig configs = new AppKeyConfig(); configs.NetatmoHost = apiNetatmoStub.Address; netatmoUnit.init(configs); }
public void ResponseBody_CalledTwice_InvalidOperationException() { using var sut = new ApiStub(); Assert.Throws <InvalidOperationException>( () => sut.Get().Response((req, args) => "1").Response((req, args) => "2")); }
public void NetatmoUnitIndoortemperature() { string responseText = "{\"body\":[{\"beg_time\":1481372100,\"value\":[[22.1]]}],\"status\":\"ok\",\"time_exec\":0.027220010757446,\"time_server\":1481371840}"; ApiStub apiNetatmoStub = new ApiStub(); apiNetatmoStub.Get( "/api/getmeasure", (request, args) => { return(responseText); } ); apiNetatmoStub.Start(); AppKeyConfig configs = new AppKeyConfig(); configs.NetatmoHost = apiNetatmoStub.Address; string actualTemp = netatmoUnit.inDoorTemperature(configs); Assert.Equal("22.1", actualTemp); }
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 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 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); } }
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 Route_RouteIncludesNotMatchingQuery_NotFoundReturned() { 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=qux" }.Uri); Assert.Equal(HttpStatusCode.NotFound, result.StatusCode); }
public async Task Get_CalledDifferentMethod_NotFoundReturned() { using var sut = new ApiStub(); sut.Get("/testget", (req, args) => "testresponse"); sut.Start(); var result = await httpClient.DeleteAsync(new UriBuilder(new Uri(sut.Address)) { Path = "/testget" }.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 IfContentType_ContentTypeDifferent_NotFoundReturned() { using var sut = new ApiStub(); sut.Get("/testget", (req, args) => "testresponse") .IfContentType("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 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 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 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 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_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 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 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 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); }
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 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); }
public async Task Header_HeaderProviderSet_HeaderReturned() { using var sut = new ApiStub(); sut.Get("/testget", (req, args) => "testresponse") .Header((req, args) => args.Query.testquery == "Success" ? ("HeaderSuccess", "HeaderValueSuccess") : ("HeaderFailure", "HeaderValueFailure")); sut.Start(); var resultSuccess = await httpClient.GetAsync(new UriBuilder(new Uri(sut.Address)) { Path = "/testget", Query = "?testquery=Success" }.Uri); Assert.Equal("HeaderValueSuccess", resultSuccess.Headers.GetValues("HeaderSuccess").First()); var resultFailure = await httpClient.GetAsync(new UriBuilder(new Uri(sut.Address)) { Path = "/testget", Query = "?testquery=Failure" }.Uri); Assert.Equal("HeaderValueFailure", resultFailure.Headers.GetValues("HeaderFailure").First()); }