public async Task InvokeCustomAPIResponseWithParamsBodyAndHeader() { TestHttpHandler hijack = new TestHttpHandler(); hijack.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Accepted); hijack.Response.Content = new StringContent("{\"id\":\"2\"}", Encoding.UTF8, "application/json"); var myParams = new Dictionary <string, string>() { { "a", "1" }, { "b", "2" } }; HttpContent content = new StringContent("{\"test\" : \"one\"}", Encoding.UTF8, "application/json"); MobileServiceClient service = new MobileServiceClient(MobileAppUriValidator.DummyMobileApp, hijack); MobileAppUriValidator mobileAppUriValidator = new MobileAppUriValidator(service); var myHeaders = new Dictionary <string, string>() { { "x-zumo-test", "test" } }; HttpResponseMessage response = await service.InvokeApiAsync("calculator/add", content, HttpMethod.Post, myHeaders, myParams); Assert.AreEqual(myHeaders.Count, 1); // my headers should not be modified Assert.AreEqual(myHeaders["x-zumo-test"], "test"); Assert.AreEqual(hijack.Request.RequestUri.LocalPath, mobileAppUriValidator.GetApiUriPath("calculator/add")); Assert.AreEqual(hijack.Request.Headers.GetValues("x-zumo-test").First(), "test"); Assert.IsNotNull(hijack.Request.Content); Assert.AreEqual(hijack.Request.RequestUri.Query, "?a=1&b=2"); Assert.Contains(response.Content.ReadAsStringAsync().Result, "{\"id\":\"2\"}"); }
public async Task ErrorMessageConstruction() { string appUrl = MobileAppUriValidator.DummyMobileApp; string appKey = "secret..."; string collection = "tests"; string query = "$filter=id eq 12"; TestHttpHandler hijack = new TestHttpHandler(); IMobileServiceClient service = new MobileServiceClient(appUrl, hijack); MobileAppUriValidator mobileAppUriValidator = new MobileAppUriValidator(service); // Verify the error message is correctly pulled out hijack.SetResponseContent("{\"error\":\"error message\",\"other\":\"donkey\"}"); hijack.Response.StatusCode = HttpStatusCode.Unauthorized; hijack.Response.ReasonPhrase = "YOU SHALL NOT PASS."; try { JToken response = await service.GetTable(collection).ReadAsync(query); } catch (InvalidOperationException ex) { Assert.AreEqual(ex.Message, "error message"); } // Verify all of the exception parameters hijack.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized); hijack.Response.Content = new StringContent("{\"error\":\"error message\",\"other\":\"donkey\"}", Encoding.UTF8, "application/json"); hijack.Response.ReasonPhrase = "YOU SHALL NOT PASS."; try { JToken response = await service.GetTable(collection).ReadAsync(query); } catch (MobileServiceInvalidOperationException ex) { Assert.AreEqual(ex.Message, "error message"); Assert.AreEqual(HttpStatusCode.Unauthorized, ex.Response.StatusCode); Assert.Contains(ex.Response.Content.ReadAsStringAsync().Result, "donkey"); Assert.StartsWith(ex.Request.RequestUri.ToString(), mobileAppUriValidator.TableBaseUri); Assert.AreEqual("YOU SHALL NOT PASS.", ex.Response.ReasonPhrase); } // If no error message in the response, we'll use the // StatusDescription instead hijack.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized); hijack.Response.Content = new StringContent("{\"error\":\"error message\",\"other\":\"donkey\"}", Encoding.UTF8, "application/json"); hijack.Response.ReasonPhrase = "YOU SHALL NOT PASS."; hijack.SetResponseContent("{\"other\":\"donkey\"}"); try { JToken response = await service.GetTable(collection).ReadAsync(query); } catch (InvalidOperationException ex) { Assert.AreEqual("The request could not be completed. (YOU SHALL NOT PASS.)", ex.Message); } }
public async Task Constructor_SingleHttpHandler() { var hijack = new TestHttpHandler(); var service = new MobileServiceClient(MobileAppUriValidator.DummyMobileApp, handlers: hijack); var validator = new MobileAppUriValidator(service); hijack.SetResponseContent("[]"); _ = await service.GetTable("foo").ReadAsync("bar"); Assert.StartsWith(validator.TableBaseUri, hijack.Request.RequestUri.ToString()); }
public async Task InvokeCustomAPIGetJToken() { TestHttpHandler hijack = new TestHttpHandler(); hijack.SetResponseContent("{\"id\":3}"); MobileServiceClient service = new MobileServiceClient(MobileAppUriValidator.DummyMobileApp, hijack); MobileAppUriValidator mobileAppUriValidator = new MobileAppUriValidator(service); JToken expected = await service.InvokeApiAsync("calculator/add?a=1&b=2", HttpMethod.Get, null); Assert.AreEqual(hijack.Request.RequestUri.LocalPath, mobileAppUriValidator.GetApiUriPath("calculator/add")); Assert.AreEqual(hijack.Request.RequestUri.Query, "?a=1&b=2"); Assert.AreEqual(3, (int)expected["id"]); }
public async Task InvokeCustomAPISimple() { TestHttpHandler hijack = new TestHttpHandler(); MobileServiceClient service = new MobileServiceClient(MobileAppUriValidator.DummyMobileApp, hijack); MobileAppUriValidator mobileAppUriValidator = new MobileAppUriValidator(service); hijack.SetResponseContent("{\"id\":3}"); IntType expected = await service.InvokeApiAsync <IntType>("calculator/add?a=1&b=2"); Assert.AreEqual(hijack.Request.RequestUri.LocalPath, mobileAppUriValidator.GetApiUriPath("calculator/add")); Assert.AreEqual(hijack.Request.RequestUri.Query, "?a=1&b=2"); Assert.AreEqual(3, expected.Id); }
public async Task InvokeGenericCustomAPIWithNullResponse_Success() { TestHttpHandler hijack = new TestHttpHandler(); hijack.Response = new HttpResponseMessage(System.Net.HttpStatusCode.OK); hijack.Response.Content = null; MobileServiceClient service = new MobileServiceClient(MobileAppUriValidator.DummyMobileApp, hijack); MobileAppUriValidator mobileAppUriValidator = new MobileAppUriValidator(service); IntType expected = await service.InvokeApiAsync <IntType>("testapi"); Assert.AreEqual(hijack.Request.RequestUri.LocalPath, mobileAppUriValidator.GetApiUriPath("testapi")); Assert.AreEqual(expected, null); }
public async Task InvokeCustomAPIWithEmptyStringResponse_Success() { TestHttpHandler hijack = new TestHttpHandler(); hijack.Response = new HttpResponseMessage(System.Net.HttpStatusCode.OK); hijack.Response.Content = new StringContent("", Encoding.UTF8, "application/json"); MobileServiceClient service = new MobileServiceClient(MobileAppUriValidator.DummyMobileApp, hijack); MobileAppUriValidator mobileAppUriValidator = new MobileAppUriValidator(service); JToken expected = await service.InvokeApiAsync("testapi"); Assert.AreEqual(hijack.Request.RequestUri.LocalPath, mobileAppUriValidator.GetApiUriPath("testapi")); Assert.AreEqual(expected, null); }
public async Task InvokeCustomAPIResponse() { TestHttpHandler hijack = new TestHttpHandler(); hijack.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Accepted); hijack.Response.Content = new StringContent("{\"id\":\"2\"}", Encoding.UTF8, "application/json"); MobileServiceClient service = new MobileServiceClient(MobileAppUriValidator.DummyMobileApp, hijack); MobileAppUriValidator mobileAppUriValidator = new MobileAppUriValidator(service); HttpResponseMessage response = await service.InvokeApiAsync("calculator/add?a=1&b=2", null, HttpMethod.Post, null, null); Assert.AreEqual(hijack.Request.RequestUri.LocalPath, mobileAppUriValidator.GetApiUriPath("calculator/add")); Assert.AreEqual(hijack.Request.RequestUri.Query, "?a=1&b=2"); Assert.Contains(response.Content.ReadAsStringAsync().Result, "{\"id\":\"2\"}"); }
public async Task SingleHttpHandlerConstructor() { TestHttpHandler hijack = new TestHttpHandler(); IMobileServiceClient service = new MobileServiceClient(MobileAppUriValidator.DummyMobileApp, handlers: hijack); MobileAppUriValidator mobileAppUriValidator = new MobileAppUriValidator(service); // Ensure properties are copied over Assert.AreEqual(MobileAppUriValidator.DummyMobileApp, service.MobileAppUri.ToString()); // Set the handler to return an empty array hijack.SetResponseContent("[]"); JToken response = await service.GetTable("foo").ReadAsync("bar"); // Verify the handler was in the loop Assert.StartsWith(hijack.Request.RequestUri.ToString(), mobileAppUriValidator.TableBaseUri); }
public async Task InvokeCustomAPIResponseWithParams() { TestHttpHandler hijack = new TestHttpHandler(); hijack.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Accepted); hijack.Response.Content = new StringContent("{\"id\":\"2\"}", Encoding.UTF8, "application/json"); var myParams = new Dictionary <string, string>() { { "a", "1" }, { "b", "2" } }; MobileServiceClient service = new MobileServiceClient(MobileAppUriValidator.DummyMobileApp, hijack); MobileAppUriValidator mobileAppUriValidator = new MobileAppUriValidator(service); HttpResponseMessage response = await service.InvokeApiAsync("calculator/add", null, HttpMethod.Post, null, myParams); Assert.Equal(mobileAppUriValidator.GetApiUriPath("calculator/add"), hijack.Request.RequestUri.LocalPath); Assert.Equal("?a=1&b=2", hijack.Request.RequestUri.Query); Assert.Null(hijack.Request.Content); Assert.Contains("{\"id\":\"2\"}", response.Content.ReadAsStringAsync().Result); }