UNPKG

3.75 kBJavaScriptView Raw
1'use strict';
2
3const express = require('abacus-express');
4const request = require('abacus-request');
5
6const router = require('..');
7
8/* jshint noyield: true */
9
10describe('abacus-router requests', () => {
11 let app;
12 let routes;
13
14 beforeEach(() => {
15 app = express();
16 routes = router();
17 });
18
19 context('with standard middleware', () => {
20 let server;
21
22 beforeEach(() => {
23 // Add a simple router level middleware
24 routes.use((req, res, next) => next());
25
26 // Return an OK response with a body
27 routes.get('/ok/request', (req, res) => {
28 res.send('okay');
29 });
30
31 app.use(routes);
32 server = app.listen(0);
33 });
34
35 it('handles HTTP request', (done) => {
36 request.get('http://localhost::p/:v/:r',
37 {
38 p: server.address().port,
39 v: 'ok',
40 r: 'request'
41 },
42 (err, val) => {
43 expect(err).to.equal(undefined);
44 expect(val.statusCode).to.equal(200);
45 expect(val.body).to.equal('okay');
46 done();
47 }
48 );
49 });
50 });
51
52 context('with generator middleware', () => {
53 let server;
54
55 beforeEach(() => {
56 routes.get('/ok/generator/request', function*(req) {
57 return {
58 body: 'okay'
59 };
60 });
61
62 app.use(routes);
63 server = app.listen(0);
64 });
65
66 it('handles HTTP request', (done) => {
67 request.get('http://localhost::p/:v/generator/:r',
68 {
69 p: server.address().port,
70 v: 'ok',
71 r: 'request'
72 },
73 (err, val) => {
74 expect(err).to.equal(undefined);
75 expect(val.statusCode).to.equal(200);
76 expect(val.body).to.equal('okay');
77 done();
78 }
79 );
80 });
81 });
82
83 context('with async middleware', () => {
84 let server;
85
86 beforeEach(() => {
87 routes.get('/ok/async/request', async() => {
88 return {
89 body: 'okay'
90 };
91 });
92
93 app.use(routes);
94 server = app.listen(0);
95 });
96
97 it('handles HTTP request', (done) => {
98 request.get(`http://localhost:${server.address().port}/ok/async/request`,
99 undefined,
100 (err, val) => {
101 expect(err).to.equal(undefined);
102 expect(val.statusCode).to.equal(200);
103 expect(val.body).to.equal('okay');
104 done();
105 }
106 );
107 });
108 });
109
110 context('with route returning 500 code', () => {
111 let server;
112
113 beforeEach(() => {
114 routes.get('/500/request', (req, res) => {
115 res.status(500).end();
116 });
117
118 app.use(routes);
119 server = app.listen(0);
120 });
121
122 it('handles HTTP request', (done) => {
123 request.get(
124 {
125 uri: 'http://localhost::p/:v/:r',
126 p: server.address().port,
127 v: '500',
128 r: 'request'
129 },
130 (err, val) => {
131 expect(err.message).to.equal('HTTP response status code 500');
132 expect(val).to.equal(undefined);
133 done();
134 }
135 );
136 });
137 });
138
139 context('with route returning JSON error object with a message field', () => {
140 let server;
141
142 beforeEach(() => {
143 routes.get('/err/request/:message', (req, res) => {
144 // Return a
145 res.status(500).send({
146 message: req.params.message
147 });
148 });
149
150 app.use(routes);
151 server = app.listen(0);
152 });
153
154 it('handles HTTP request', (done) => {
155 request.get(
156 'http://localhost::p/:v/:r/:m',
157 {
158 p: server.address().port,
159 v: 'err',
160 r: 'request',
161 m: 'duh'
162 },
163 (err, val) => {
164 expect(err.message).to.equal('duh');
165 expect(val).to.equal(undefined);
166 done();
167 }
168 );
169 });
170 });
171});