1 | 'use strict';
|
2 |
|
3 | const express = require('abacus-express');
|
4 | const request = require('abacus-request');
|
5 |
|
6 | const router = require('..');
|
7 |
|
8 |
|
9 |
|
10 | describe('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 |
|
24 | routes.use((req, res, next) => next());
|
25 |
|
26 |
|
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 |
|
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 | });
|