* Fix bug when checking if elements were parsed already
parse-element.js checks if the element was already parsed by
checking for the `data-pjax-click-state` attribute. However, this
attribute was not added until the link is clicked.
Originally, there was a separate attribute, `data-pjax-enabled`,
which tracked if the element was parsed already, but that was
changed in 9a86044.
This commit merges the attributes for mouse clicks and key presses
into one and adds that attribute when the element is initially
parsed.
* More bug fixes
* Fix documentation for currentUrlFullReload
* Ignore lines from coverage if they can't be tested
* Refactor attach-link and attach-form
* Fix and refactors tests
* Add tests
* Add TS definitions for options.requestOptions
* Code cleanup
138 lines
3.8 KiB
JavaScript
138 lines
3.8 KiB
JavaScript
var tape = require("tape")
|
|
|
|
var sendRequest = require("../../lib/send-request.js")
|
|
|
|
// Polyfill responseURL property into XMLHttpRequest if it doesn't exist,
|
|
// just for the purposes of this test
|
|
// This polyfill is not complete; it won't show the updated location if a
|
|
// redirection occurred, but it's fine for our purposes.
|
|
if (!("responseURL" in XMLHttpRequest.prototype)) {
|
|
var nativeOpen = XMLHttpRequest.prototype.open
|
|
XMLHttpRequest.prototype.open = function(method, url) {
|
|
this.responseURL = url
|
|
return nativeOpen.apply(this, arguments)
|
|
}
|
|
}
|
|
|
|
tape("test xhr request", function(t) {
|
|
var url = "https://httpbin.org/get"
|
|
|
|
t.test("- request is made, gets a result, and is cache-busted", function(t) {
|
|
var r = sendRequest(url, {cacheBust: true}, function(result) {
|
|
t.equal(r.responseURL.indexOf("?"), url.length, "XHR URL is cache-busted when configured to be")
|
|
try {
|
|
result = JSON.parse(result)
|
|
}
|
|
catch (e) {
|
|
t.fail("xhr doesn't get a JSON response")
|
|
}
|
|
t.same(typeof result, "object", "xhr request get a result")
|
|
t.end()
|
|
})
|
|
})
|
|
t.test("- request is not cache-busted when configured not to be", function(t) {
|
|
var r = sendRequest(url, {}, function() {
|
|
t.equal(r.responseURL, url, "XHR URL is left untouched")
|
|
t.end()
|
|
})
|
|
})
|
|
t.end()
|
|
})
|
|
|
|
tape("request headers are sent properly", function(t) {
|
|
var url = "https://httpbin.org/headers"
|
|
var options = {
|
|
selectors: ["div.pjax", "div.container"]
|
|
}
|
|
|
|
sendRequest(url, options, function(responseText) {
|
|
var headers = JSON.parse(responseText).headers
|
|
|
|
t.equals(headers["X-Requested-With"], "XMLHttpRequest", "X-Requested-With header is set correctly")
|
|
// Httpbin.org changes the case to 'X-Pjax'
|
|
t.equals(headers["X-Pjax"], "true", "X-PJAX header is set correctly")
|
|
t.equals(headers["X-Pjax-Selectors"], "[\"div.pjax\",\"div.container\"]", "X-PJAX-Selectors header is set correctly")
|
|
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
tape("HTTP status codes other than 200 are handled properly", function(t) {
|
|
var url = "https://httpbin.org/status/400"
|
|
|
|
sendRequest(url, {}, function(responseText, request) {
|
|
t.equals(responseText, null, "responseText is null")
|
|
t.equals(request.status, 400, "HTTP status code is correct")
|
|
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
tape.skip("XHR error is handled properly", function(t) {
|
|
var url = "https://encrypted.google.com/foobar"
|
|
|
|
sendRequest(url, {}, function(responseText) {
|
|
t.equals(responseText, null, "responseText is null")
|
|
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
tape("POST body data is sent properly", function(t) {
|
|
var url = "https://httpbin.org/post"
|
|
var params = [{
|
|
name: "test",
|
|
value: "1"
|
|
}];
|
|
var options = {
|
|
requestOptions: {
|
|
requestMethod: "POST",
|
|
requestParams: params
|
|
}
|
|
}
|
|
|
|
sendRequest(url, options, function(responseText) {
|
|
var response = JSON.parse(responseText)
|
|
|
|
t.same(response.form[params[0].name], params[0].value, "requestParams were sent properly")
|
|
t.equals(response.headers["Content-Type"], "application/x-www-form-urlencoded", "Content-Type header was set properly")
|
|
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
tape("GET query data is sent properly", function(t) {
|
|
var url = "https://httpbin.org/get"
|
|
var params = [{
|
|
name: "test",
|
|
value: "1"
|
|
}];
|
|
var options = {
|
|
requestOptions: {
|
|
requestParams: params
|
|
}
|
|
}
|
|
|
|
sendRequest(url, options, function(responseText) {
|
|
var response = JSON.parse(responseText)
|
|
|
|
t.same(response.args[params[0].name], params[0].value, "requestParams were sent properly")
|
|
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
tape("XHR timeout is handled properly", function(t) {
|
|
var url = "https://httpbin.org/delay/5"
|
|
var options = {
|
|
timeout: 1000
|
|
}
|
|
|
|
sendRequest(url, options, function(responseText) {
|
|
t.equals(responseText, null, "responseText is null")
|
|
|
|
t.end()
|
|
})
|
|
})
|
|
|