public void Projections_Batch() { using (TestUtil.MetadataCacheCleaner()) using (ocs.PopulateData.CreateTableAndPopulateData()) using (TestWebRequest request = TestWebRequest.CreateForInProcess()) { TestUtil.RunCombinations( new Type[] { typeof(CustomDataContext), typeof(ocs.CustomObjectContext), typeof(CustomRowBasedContext), typeof(CustomRowBasedOpenTypesContext) }, CustomerSelects.Variations(2), (dataServiceType, selects) => { request.DataServiceType = dataServiceType; BatchWebRequest batchRequest = new BatchWebRequest(); foreach (var select in selects) { InMemoryWebRequest part = new InMemoryWebRequest(); part.Accept = "application/atom+xml,application/xml"; part.RequestUriString = "/Customers?$select=" + select.Select; batchRequest.Parts.Add(part); } batchRequest.SendRequest(request); for (int i = 0; i < selects.Length; i++) { UnitTestsUtil.VerifyXPathExists(UnitTestsUtil.GetResponseAsAtomXLinq(batchRequest.Parts[i]), selects[i].VerificationXPaths); } }); } }
public void BatchSmokeTestWhereRequestUriIsNotRelativeToService() { Run(request => { request.HttpMethod = "POST"; request.RequestUriString = "NotBatchAtAll"; request.RequestHeaders["MyCustomRequestUri"] = "http://myservicebase/path1/path2/$batch"; request.RequestHeaders["MyCustomServiceUri"] = "http://myservicebase/path1/path2/"; var batch = new BatchWebRequest(); var innerRequest = new InMemoryWebRequest(); innerRequest.RequestUriString = "SomethingThatWillNotBeUsedAtAll"; innerRequest.RequestHeaders["MyCustomRequestUri"] = "http://myservicebase/path2/Customers(0)"; batch.Parts.Add(innerRequest); batch.SetContentTypeAndRequestStream(request); TestUtil.RunCatching(request.SendRequest); Assert.AreEqual(202, request.ResponseStatusCode); batch.ParseResponseFromRequest(request, true); Assert.AreEqual(400, innerRequest.ResponseStatusCode); var innerPayload = innerRequest.GetResponseStreamAsXDocument(); UnitTestsUtil.VerifyXPathExists(innerPayload, "adsm:error/adsm:message[text()=\"The URI 'http://myservicebase/path2/Customers(0)' is not valid because it is not based on 'http://myservicebase/path1/path2/'.\"]"); }); }
private void VerifyEntryIDsAndXPaths(string requestUri, TestWebRequest request, int[] expectedIDs, params string[] xpaths) { var response = UnitTestsUtil.GetResponseAsAtomXLinq(request, requestUri); List <string> ids = response.Root.Elements(UnitTestsUtil.AtomNamespace + "entry").Elements(UnitTestsUtil.AtomNamespace + "id") .Select(e => (string)e).ToList(); Assert.AreEqual(expectedIDs.Length, ids.Count, "The number of returned entries doesn't match."); for (int i = 0; i < expectedIDs.Length; i++) { if (!ids[i].Contains("(" + expectedIDs[i].ToString() + ")")) { Assert.Fail("Entries not reported correctly, \r\nexpected: " + expectedIDs.Select(n => n.ToString()).Concatenate(", ") + "\r\nactual: " + ids.Concatenate(", ") + "\r\n" + response.ToString()); } } UnitTestsUtil.VerifyXPathExists(response, xpaths); }
private static void RunBatchTest(TestWebRequest request, Action <TestWebRequest> configureBatchRequest, Action <TestWebRequest> configureInnerRequest, string innerRequestXPath) { request.HttpMethod = "POST"; var batch = new BatchWebRequest(); var innerRequest = new InMemoryWebRequest(); innerRequest.Accept = "application/atom+xml,application/xml"; configureBatchRequest(request); configureInnerRequest(innerRequest); batch.Parts.Add(innerRequest); batch.SetContentTypeAndRequestStream(request); TestUtil.RunCatching(request.SendRequest); Assert.AreEqual(202, request.ResponseStatusCode); batch.ParseResponseFromRequest(request, true); Assert.AreEqual(200, innerRequest.ResponseStatusCode); var innerPayload = innerRequest.GetResponseStreamAsXDocument(); UnitTestsUtil.VerifyXPathExists(innerPayload, innerRequestXPath); }