Skip to content

Commit

Permalink
v0.0.4; fix bug, add specs to test against it
Browse files Browse the repository at this point in the history
the bug -> forgot to change a renamed export func
  • Loading branch information
hnry committed Jun 29, 2016
1 parent 20131a6 commit d69c8de
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 6 deletions.
2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "spirit",
"version": "0.0.3",
"version": "0.0.4",
"description": "extensible web library for building applications & frameworks",
"main": "index.js",
"scripts": {
Expand Down
77 changes: 77 additions & 0 deletions spec/http/node_adapter-spec.js
Expand Up @@ -5,6 +5,83 @@ const stream = require("stream")

describe("node adapter", () => {

describe("adapter", () => {
const adp = adapter.adapter

it("returns a (req, res) fn that wraps core.compose", (done) => {
const handler = (request) => {
return { status: 200, headers: {}, body: "ok" }
}

const middleware = [
(handler) => {
return (request) => {
return handler(request)
}
},
(handler) => {
return (request) => {
return handler(request)
}
}
]
const app = adp(handler, middleware)
const res = mock_response((result) => {
expect(result.body).toBe("ok")
done()
})
app({}, res)
})

it("abstracts node's `req` by creating a request map", (done) => {
const handler = (request) => {
expect(request).toEqual(jasmine.objectContaining({
method: "GET",
url: "/hi",
headers: { a: 1 }
}))
expect(typeof request.req).toBe("function")
return "ok"
}

const app = adp(handler, [])
const res = mock_response(done)
app({
method: "GET",
url: "/hi",
headers: { a: 1 }
}, res)
})

it("throws an err when a response map is not returned from handler + middleware, as it relies on a response map to write back to node's `res`", (done) => {
const handler = (request) => {
return "ok"
}

const app = adp(handler, [])
const res = mock_response((result) => {
expect(result.status).toBe(500)
expect(result.body).toMatch(/node.js adapter did not/)
done()
})
app({}, res)
})

it("errors are surpressed when in NODE_ENV 'production'", (done) => {
const handler = (request) => {
return "ok"
}
const app = adp(handler, [])
const res = mock_response((result) => {
expect(result.status).toBe(500)
expect(result.body).toBe("")
done()
})
process.env.NODE_ENV = "production"
app({}, res)
})
})

describe("send", () => {
const send = adapter.send

Expand Down
3 changes: 2 additions & 1 deletion spec/http/request-spec.js
Expand Up @@ -93,7 +93,8 @@ describe("http request", () => {
expect(result.scheme).toBe("1.1")
expect(result.protocol).toBe("http")
expect(result.headers).toBe(mock_req.headers)
expect(result.body).toBe(mock_req)
//expect(result.body).toBe(mock_req)
expect(result.req()).toBe(mock_req)
expect(result.query.a).toBe("1")

expect(Object.keys(result).length).toBe(10)
Expand Down
4 changes: 2 additions & 2 deletions src/http/node_adapter.js
Expand Up @@ -34,11 +34,11 @@ const send = (res, resp) => {
const adapter = (handler, middleware) => {
return (req, res) => {
const request_map = request.create(req)
const adp = core.main(handler, middleware)
const adp = core.compose(handler, middleware)
adp(request_map)
.then((resp) => {
if (!response.is_response(resp)) {
throw "Error: node.js http adapter did not receive a proper response map"
throw new Error("Error: node.js adapter did not receive a proper response (response map). Got: " + JSON.stringify(resp))
}
send(res, resp)
})
Expand Down
14 changes: 12 additions & 2 deletions src/http/request.js
@@ -1,6 +1,7 @@
const url = require("url")

const urlquery = (req, request) => {
if (!req.url) return
const result = url.parse(req.url, true)
request.url = req.url
request.query = result.query
Expand Down Expand Up @@ -43,6 +44,9 @@ const protocol = (req, request) => {
* - scheme {string} the transport protocol ex: "HTTP/1.1"
* - headers {object} the request headers (as node delivers it)
*
* - req {function} returns the node IncomingRequest object
*
*** TODO, add a body?
* - body {Stream} raw unparsed request body, this is just `req`, as it is the easiest way to pass the 'raw' body, which would be a node stream
* NOTE: this may change, treat it as a stream only
*
Expand All @@ -56,8 +60,14 @@ const create = (req) => {
method: req.method,
headers: req.headers,
scheme: req.httpVersion,
ip: req.connection.remoteAddress,
body: req
//body: req
req: function() {
return req
}
}

if (req.connection) {
request.ip = req.connection.remoteAddress
}

protocol(req, request)
Expand Down

0 comments on commit d69c8de

Please sign in to comment.