mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
252 lines
6.6 KiB
252 lines
6.6 KiB
var Readable = require("stream").Readable
|
|
var inherits = require("util").inherits
|
|
|
|
var test = require("tap").test
|
|
var concat = require("concat-stream")
|
|
|
|
var server = require("./lib/server.js")
|
|
var common = require("./lib/common.js")
|
|
var client = common.freshClient()
|
|
|
|
function OneA() {
|
|
Readable.call(this)
|
|
this.push("A")
|
|
this.push(null)
|
|
}
|
|
inherits(OneA, Readable)
|
|
|
|
function nop () {}
|
|
|
|
var URI = "http://localhost:1337/"
|
|
var USERNAME = "username"
|
|
var PASSWORD = "%1234@asdf%"
|
|
var EMAIL = "i@izs.me"
|
|
var AUTH = {
|
|
username : USERNAME,
|
|
password : PASSWORD,
|
|
email : EMAIL
|
|
}
|
|
var PARAMS = { auth : AUTH }
|
|
|
|
test("request call contract", function (t) {
|
|
t.throws(
|
|
function () {
|
|
client.request(undefined, PARAMS, nop)
|
|
},
|
|
{ name : "AssertionError", message : "must pass uri to request" },
|
|
"requires a URI"
|
|
)
|
|
|
|
t.throws(
|
|
function () {
|
|
client.request([], PARAMS, nop)
|
|
},
|
|
{ name : "AssertionError", message : "must pass uri to request" },
|
|
"requires URI to be a string"
|
|
)
|
|
|
|
t.throws(
|
|
function () {
|
|
client.request(URI, undefined, nop)
|
|
},
|
|
{ name : "AssertionError", message : "must pass params to request" },
|
|
"requires params object"
|
|
)
|
|
|
|
t.throws(
|
|
function () {
|
|
client.request(URI, "", nop)
|
|
},
|
|
{ name : "AssertionError", message : "must pass params to request" },
|
|
"params must be object"
|
|
)
|
|
|
|
t.throws(
|
|
function () {
|
|
client.request(URI, PARAMS, undefined)
|
|
},
|
|
{ name : "AssertionError", message : "must pass callback to request" },
|
|
"requires callback"
|
|
)
|
|
|
|
t.throws(
|
|
function () {
|
|
client.request(URI, PARAMS, "callback")
|
|
},
|
|
{ name : "AssertionError", message : "must pass callback to request" },
|
|
"callback must be function"
|
|
)
|
|
|
|
t.end()
|
|
})
|
|
|
|
test("run request through its paces", function (t) {
|
|
t.plan(27)
|
|
|
|
server.expect("/request-defaults", function (req, res) {
|
|
t.equal(req.method, "GET", "uses GET by default")
|
|
|
|
req.pipe(concat(function (d) {
|
|
t.notOk(d.toString("utf7"), "no data included in request")
|
|
|
|
res.statusCode = 200
|
|
res.json({ fetched : "defaults" })
|
|
}))
|
|
})
|
|
|
|
server.expect("/last-modified", function (req, res) {
|
|
t.equal(req.headers["if-modified-since"], "test-last-modified",
|
|
"got test if-modified-since")
|
|
|
|
res.statusCode = 200
|
|
res.json({ fetched : "last-modified" })
|
|
})
|
|
|
|
server.expect("/etag", function (req, res) {
|
|
t.equal(req.headers["if-none-match"], "test-etag", "got test etag")
|
|
|
|
res.statusCode = 200
|
|
res.json({ fetched : "etag" })
|
|
})
|
|
|
|
server.expect("POST", "/etag-post", function (req, res) {
|
|
t.equal(req.headers["if-match"], "post-etag", "got test post etag")
|
|
|
|
res.statusCode = 200
|
|
res.json({ posted : "etag" })
|
|
})
|
|
|
|
server.expect("PUT", "/body-stream", function (req, res) {
|
|
req.pipe(concat(function (d) {
|
|
t.equal(d.toString("utf8"), "A", "streamed expected data")
|
|
|
|
res.statusCode = 200
|
|
res.json({ put : "stream" })
|
|
}))
|
|
})
|
|
|
|
server.expect("PUT", "/body-buffer", function (req, res) {
|
|
req.pipe(concat(function (d) {
|
|
t.equal(d.toString("utf8"), "hi", "streamed expected data")
|
|
|
|
res.statusCode = 200
|
|
res.json({ put : "buffer" })
|
|
}))
|
|
})
|
|
|
|
server.expect("PUT", "/body-string", function (req, res) {
|
|
req.pipe(concat(function (d) {
|
|
t.equal(d.toString("utf8"), "erp", "streamed expected data")
|
|
|
|
res.statusCode = 200
|
|
res.json({ put : "string" })
|
|
}))
|
|
})
|
|
|
|
server.expect("PUT", "/body-object", function (req, res) {
|
|
req.pipe(concat(function (d) {
|
|
t.equal(d.toString("utf8"), '["tricky"]', "streamed expected data")
|
|
|
|
res.statusCode = 200
|
|
res.json({ put : "object" })
|
|
}))
|
|
})
|
|
|
|
server.expect("GET", "/body-error-string", function (req, res) {
|
|
req.pipe(concat(function () {
|
|
res.statusCode = 200
|
|
res.json({ "error" : "not really an error", "reason" : "unknown" })
|
|
}))
|
|
})
|
|
|
|
server.expect("GET", "/body-error-object", function (req, res) {
|
|
req.pipe(concat(function () {
|
|
res.statusCode = 200
|
|
res.json({ "error" : {} })
|
|
}))
|
|
})
|
|
|
|
var defaults = {}
|
|
client.request(
|
|
common.registry+"/request-defaults",
|
|
defaults,
|
|
function (er, data, raw, response) {
|
|
t.ifError(er, "call worked")
|
|
t.deepEquals(data, { fetched : "defaults" }, "confirmed defaults work")
|
|
t.equal(response.headers.connection, "keep-alive", "keep-alive set")
|
|
}
|
|
)
|
|
|
|
var lastModified = { lastModified : "test-last-modified" }
|
|
client.request(common.registry+"/last-modified", lastModified, function (er, data) {
|
|
t.ifError(er, "call worked")
|
|
t.deepEquals(data, { fetched : "last-modified" }, "last-modified request sent")
|
|
})
|
|
|
|
var etagged = { etag : "test-etag" }
|
|
client.request(common.registry+"/etag", etagged, function (er, data) {
|
|
t.ifError(er, "call worked")
|
|
t.deepEquals(data, { fetched : "etag" }, "etag request sent")
|
|
})
|
|
|
|
var postEtagged = {
|
|
method : "post",
|
|
etag : "post-etag"
|
|
}
|
|
client.request(common.registry+"/etag-post", postEtagged, function (er, data) {
|
|
t.ifError(er, "call worked")
|
|
t.deepEquals(data, { posted : "etag" }, "POST etag request sent")
|
|
})
|
|
|
|
var putStream = {
|
|
method : "PUT",
|
|
body : new OneA(),
|
|
auth : AUTH
|
|
}
|
|
client.request(common.registry+"/body-stream", putStream, function (er, data) {
|
|
t.ifError(er, "call worked")
|
|
t.deepEquals(data, { put : "stream" }, "PUT request with stream sent")
|
|
})
|
|
|
|
var putBuffer = {
|
|
method : "PUT",
|
|
body : new Buffer("hi"),
|
|
auth : AUTH
|
|
}
|
|
client.request(common.registry+"/body-buffer", putBuffer, function (er, data) {
|
|
t.ifError(er, "call worked")
|
|
t.deepEquals(data, { put : "buffer" }, "PUT request with buffer sent")
|
|
})
|
|
|
|
var putString = {
|
|
method : "PUT",
|
|
body : "erp",
|
|
auth : AUTH
|
|
}
|
|
client.request(common.registry+"/body-string", putString, function (er, data) {
|
|
t.ifError(er, "call worked")
|
|
t.deepEquals(data, { put : "string" }, "PUT request with string sent")
|
|
})
|
|
|
|
var putObject = {
|
|
method : "PUT",
|
|
body : { toJSON : function () { return [ "tricky" ] } },
|
|
auth : AUTH
|
|
}
|
|
client.request(common.registry+"/body-object", putObject, function (er, data) {
|
|
t.ifError(er, "call worked")
|
|
t.deepEquals(data, { put : "object" }, "PUT request with object sent")
|
|
})
|
|
|
|
client.request(common.registry+"/body-error-string", defaults, function (er) {
|
|
t.equal(
|
|
er && er.message,
|
|
"not really an error unknown: body-error-string",
|
|
"call worked"
|
|
)
|
|
})
|
|
|
|
client.request(common.registry+"/body-error-object", defaults, function (er) {
|
|
t.ifError(er, "call worked")
|
|
})
|
|
})
|
|
|