| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| // odata-net-tests.js |
| (function (window, undefined) { |
| module("Unit"); |
| djstest.addTest(function httpClientSendRequestTest() { |
| var tests = [ |
| { url: "http://localhost/test1", response: { headers: {}, status: 200, body: "test"} }, |
| { url: "http://localhost/test2", response: { headers: {}, status: 204, body: "test"} }, |
| { url: "http://localhost/test3", response: { headers: {}, status: 299, body: "test"} }, |
| { url: "http://localhost/test4", response: { headers: {}, status: 500, body: "error"} } |
| ]; |
| |
| djstest.assertsExpected(12); |
| |
| var sentCount = 0; |
| MockXMLHttpRequest.onAfterSend = function () { |
| sentCount++; |
| }; |
| |
| var oldXmlHttpRequest = window.XMLHttpRequest; |
| var oldEnableJsonpCallback = window.odatajs.oData.net.defaultHttpClient.enableJsonpCallback; |
| try { |
| window.XMLHttpRequest = MockXMLHttpRequest.XMLHttpRequest; |
| var i, len; |
| for (i = 0, len = tests.length; i < len; i++) { |
| MockXMLHttpRequest.addResponse(tests[i].url, tests[i].response); |
| |
| window.odatajs.oData.net.defaultHttpClient.enableJsonpCallback = false; |
| //Need a closure to capture the current test being executed. |
| (function (test) { |
| window.odatajs.oData.net.defaultHttpClient.request( |
| { requestUri: test.url, headers: {} }, |
| function (response) { |
| djstest.assert(response.statusCode >= 200 & response.statusCode <= 299, "response status is in the success range"); |
| djstest.assertAreEqual(response.body, test.response.body, "response body is the expected one"); |
| djstest.assertAreEqualDeep(response.headers, [], "response headers are the expected ones"); |
| }, |
| function (error) { |
| djstest.assert(error.response.statusCode > 299, "response status is in the error range"); |
| djstest.assertAreEqual(error.response.body, test.response.body, "response body is the expected one"); |
| djstest.assertAreEqualDeep(error.response.headers, [], "response headers are the expected ones"); |
| }); |
| })(tests[i]); |
| } |
| } |
| finally { |
| //Cleanup and finish the test after all requests have been sent and processed. Poll every 50 ms |
| var timer = setInterval(function () { |
| if (sentCount === tests.length) { |
| clearInterval(timer) |
| window.odatajs.oData.net.defaultHttpClient.enableJsonpCallback = oldEnableJsonpCallback; |
| window.XMLHttpRequest = oldXmlHttpRequest; |
| MockXMLHttpRequest.reset(); |
| djstest.done(); |
| } |
| }, 50); |
| } |
| }); |
| |
| djstest.addTest(function httpClientRequestTimeoutTest() { |
| var oldXmlHttpRequest = window.XMLHttpRequest; |
| var testDone = false; |
| |
| djstest.assertsExpected(1); |
| |
| var oldEnableJsonpCallback = window.odatajs.oData.net.defaultHttpClient.enableJsonpCallback; |
| try { |
| window.XMLHttpRequest = MockXMLHttpRequest.XMLHttpRequest; |
| window.odatajs.oData.net.defaultHttpClient.enableJsonpCallback = false; |
| |
| window.odatajs.oData.net.defaultHttpClient.request( |
| { requestUri: "http://test1", timeoutMS: 10, headers: { MockTimeOut: true} }, |
| function (response) { |
| djstest.fail("success method was hit when not expected"); |
| testDone = true; |
| }, |
| function (error) { |
| djstest.assertAreEqual(error.message, "Request timed out", "error method executes and error is the expected one"); |
| testDone = true; |
| }); |
| } |
| finally { |
| //Cleanup and finish the test after all requests have been sent and processed. Poll every 50 ms |
| var timer = setInterval(function () { |
| if (testDone) { |
| clearInterval(timer); |
| window.odatajs.oData.net.defaultHttpClient.enableJsonpCallback = oldEnableJsonpCallback; |
| window.XMLHttpRequest = oldXmlHttpRequest; |
| MockXMLHttpRequest.reset(); |
| djstest.done(); |
| } |
| }, 50); |
| } |
| }); |
| |
| djstest.addTest(function httpClientRequestAbortTest() { |
| |
| var oldXmlHttpRequest = window.XMLHttpRequest; |
| |
| djstest.assertsExpected(1); |
| |
| var oldEnableJsonpCallback = window.odatajs.oData.net.defaultHttpClient.enableJsonpCallback; |
| try { |
| window.XMLHttpRequest = MockXMLHttpRequest.XMLHttpRequest; |
| window.odatajs.oData.net.defaultHttpClient.enableJsonpCallback = false; |
| |
| var result = window.odatajs.oData.net.defaultHttpClient.request( |
| { requestUri: "http://test1", headers: { MockNoOp: true} }, |
| function (response) { |
| djstest.fail("success method was hit when not expected"); |
| }, |
| function (error) { |
| djstest.assertAreEqual(error.message, "Request aborted", "error method executes and error is the expected one"); |
| }); |
| |
| result.abort(); |
| } |
| finally { |
| window.odatajs.oData.net.defaultHttpClient.enableJsonpCallback = oldEnableJsonpCallback; |
| window.XMLHttpRequest = oldXmlHttpRequest; |
| MockXMLHttpRequest.reset(); |
| djstest.done(); |
| } |
| }); |
| |
| djstest.addTest(function httpClientRequestAbortOnCompletedRequestTest() { |
| |
| var oldXmlHttpRequest = window.XMLHttpRequest; |
| var testDone = false; |
| |
| djstest.assertsExpected(1); |
| |
| var oldEnableJsonpCallback = window.odatajs.oData.net.defaultHttpClient.enableJsonpCallback; |
| try { |
| window.XMLHttpRequest = MockXMLHttpRequest.XMLHttpRequest; |
| window.odatajs.oData.net.defaultHttpClient.enableJsonpCallback = false; |
| |
| MockXMLHttpRequest.addResponse("http://test1", { headers: {}, status: 200, body: "test body" }); |
| |
| MockXMLHttpRequest.onAfterSend = function () { |
| result.abort(); |
| testDone = true; |
| }; |
| |
| result = window.odatajs.oData.net.defaultHttpClient.request( |
| { requestUri: "http://test1", headers: {} }, |
| function (response) { |
| djstest.pass("success method was hit"); |
| }, |
| function (error) { |
| djstest.fail("success method was hit when not expected - [" + error.message + "]"); |
| }); |
| } |
| finally { |
| // Cleanup after test is done, poll eavery 50ms |
| var timer = setInterval(function () { |
| if (testDone) { |
| clearInterval(timer); |
| window.odatajs.oData.net.defaultHttpClient.enableJsonpCallback = oldEnableJsonpCallback; |
| window.XMLHttpRequest = oldXmlHttpRequest; |
| MockXMLHttpRequest.reset(); |
| djstest.done(); |
| } |
| }, 50); |
| } |
| }); |
| |
| djstest.addTest(function httpClientRequestSendsRequestCorrectlyTest() { |
| var tests = [ |
| { |
| request: { requestUri: "http://test1", headers: {}, body: "test" }, |
| expected: { headers: {}, url: "http://test1", method: "GET", body: "test", async: true, user: undefined, password: undefined } |
| }, |
| { |
| request: { requestUri: "http://test2", headers: {}, method: "POST", body: "test" }, |
| expected: { headers: {}, url: "http://test2", method: "POST", body: "test", async: true, user: undefined, password: undefined } |
| }, |
| { |
| request: { requestUri: "http://test3", headers: { header1: "value1", header2: "value2" }, body: "test" }, |
| expected: { headers: { header1: "value1", header2: "value2" }, url: "http://test3", method: "GET", body: "test", async: true, user: undefined, password: undefined } |
| } |
| ]; |
| |
| var oldXmlHttpRequest = window.XMLHttpRequest; |
| var oldEnableJsonpCallback = window.odatajs.oData.net.defaultHttpClient.enableJsonpCallback; |
| try { |
| window.XMLHttpRequest = MockXMLHttpRequest.XMLHttpRequest; |
| window.odatajs.oData.net.defaultHttpClient.enableJsonpCallback = false; |
| var i, len; |
| |
| for (i = 0, len = tests.length; i < len; i++) { |
| |
| MockXMLHttpRequest.addRequestVerifier(tests[i].request.requestUri, function (request) { |
| djstest.assertAreEqualDeep(request, tests[i].expected, "request matches target"); |
| }); |
| |
| window.odatajs.oData.net.defaultHttpClient.request( |
| tests[i].request, |
| function (response) { }); |
| } |
| } |
| finally { |
| // Restore original values. |
| window.odatajs.oData.net.defaultHttpClient.enableJsonpCallback = oldEnableJsonpCallback; |
| window.XMLHttpRequest = oldXmlHttpRequest; |
| } |
| djstest.done(); |
| }); |
| |
| // DATAJS INTERNAL START |
| djstest.addTest(function canUseJSONPTest() { |
| var tests = [ |
| { pass: true, input: {} }, |
| { pass: true, input: { method: "GET"} }, |
| { pass: false, input: { method: "PUT"} }, |
| { pass: false, input: { method: "get"} }, |
| { pass: true, input: { accept: "*/*"} }, |
| { pass: true, input: { accept: "application/json"} }, |
| { pass: true, input: { accept: "text/javascript"} }, |
| { pass: true, input: { accept: "application/javascript"} }, |
| { pass: true, input: { accept: "application/xml"} }, |
| { pass: true, input: { headers: { Accept: "application/xml"}} } |
| ]; |
| for (var i = 0; i < tests.length; i++) { |
| var actual = window.odatajs.oData.net.canUseJSONP(tests[i].input); |
| djstest.assert(actual === tests[i].pass, "test " + i + " didn't actually match pass (" + tests[i].pass + ")"); |
| } |
| djstest.done(); |
| }); |
| |
| djstest.addTest(function isAbsoluteUrlTest() { |
| djstest.assert(window.odatajs.oData.net.isAbsoluteUrl("http://something/")); |
| djstest.assert(window.odatajs.oData.net.isAbsoluteUrl("http://malformed url/")); |
| djstest.assert(window.odatajs.oData.net.isAbsoluteUrl("https://localhost/")); |
| djstest.assert(window.odatajs.oData.net.isAbsoluteUrl("file://another-protocol/")); |
| djstest.assert(!window.odatajs.oData.net.isAbsoluteUrl("/path")); |
| djstest.assert(!window.odatajs.oData.net.isAbsoluteUrl("?query-string")); |
| djstest.assert(!window.odatajs.oData.net.isAbsoluteUrl("")); |
| djstest.assert(!window.odatajs.oData.net.isAbsoluteUrl("mailto:someone")); |
| djstest.done(); |
| }); |
| |
| djstest.addTest(function isLocalUrlTest() { |
| var thisUrl = window.location.href; |
| var localUrls = [ |
| "", ".", "/howdy.htm", " ", "?queryparam", |
| thisUrl, thisUrl + "/foo", thisUrl + "?something-else" |
| ]; |
| var remoteUrls = [ |
| "http://www.microsoft.com/", |
| "https://www.microsoft.com/", |
| "https://" + window.location.host, |
| "https://" + window.location.hostname, |
| // 21 is FTP, so the test shouldn't collide |
| "http://" + window.location.hostname + ":21" |
| ]; |
| var i, len; |
| for (i = 0, len = localUrls.length; i < len; i++) { |
| djstest.assert(window.odatajs.oData.net.isLocalUrl(localUrls[i]), "is local: [" + localUrls[i] + "]"); |
| } |
| for (i = 0, len = remoteUrls.length; i < len; i++) { |
| djstest.assert(!window.odatajs.oData.net.isLocalUrl(remoteUrls[i]), "is not local: [" + remoteUrls[i] + "]"); |
| } |
| djstest.done(); |
| }); |
| |
| // DATAJS INTERNAL END |
| |
| djstest.addTest(function userPasswordTest() { |
| odatajs.oData.request({ |
| requestUri: "./endpoints/FoodStoreDataServiceV4.svc/UserNameAndPassword", |
| user: "the-user", |
| password: "the-password" |
| }, function (data) { |
| djstest.assertAreEqualDeep(data.value, "Basic dGhlLXVzZXI6dGhlLXBhc3N3b3Jk", "response matches"); |
| djstest.done(); |
| }, function (err) { |
| djstest.fail("error: " + err.message); |
| djstest.done(); |
| }); |
| }); |
| |
| })(this); |