1 | const path = require('path');
|
2 | const http = require('http');
|
3 | const assert = require('assert');
|
4 | const unirest = require('unirest');
|
5 | const io = require('socket.io-client');
|
6 | let redis = require("redis");
|
7 | let client = redis.createClient();
|
8 |
|
9 | describe("Running a mock app with Glad features", function () {
|
10 |
|
11 | before(function(done) {
|
12 | process.env.NODE_ENV = '';
|
13 | process.verbose = true;
|
14 | process.chdir('tests/mock-app');
|
15 | require(path.join(process.cwd(), 'index'));
|
16 | done();
|
17 | });
|
18 |
|
19 | beforeEach(done => {
|
20 | client.flushall(() => { done(); });
|
21 | });
|
22 |
|
23 | after(function (done) {
|
24 | process.env.NODE_ENV = 'test';
|
25 | process.verbose = undefined;
|
26 | unirest('delete','http://localhost:4242/resources/all').end(x => {
|
27 | process.chdir('../../');
|
28 | client.flushall(done);
|
29 | });
|
30 | });
|
31 |
|
32 | it ('should return a 404 for an unhandled route', done => {
|
33 | http.get('http://localhost:4242', res => {
|
34 | assert.equal(res.statusCode, 404);
|
35 | done();
|
36 | });
|
37 | });
|
38 |
|
39 | it ('should return 200 status code and an empty array of resources when none are created', done => {
|
40 | unirest.get('http://localhost:4242/resources')
|
41 | .end(res => {
|
42 | assert.equal(res.statusCode, 200);
|
43 | assert.deepEqual(res.body, []);
|
44 | done();
|
45 | });
|
46 | });
|
47 |
|
48 | it ('should create a resource and return the resource in the response', done => {
|
49 | unirest.post('http://localhost:4242/resources')
|
50 | .type('json')
|
51 | .send({
|
52 | name : "Tester 007",
|
53 | email : "tester007@mail.com",
|
54 | phone : "(555) 555-1212"
|
55 | })
|
56 | .end(res => {
|
57 | let { body } = res;
|
58 | assert.equal(res.statusCode, 201);
|
59 | assert.ok(body._id);
|
60 | assert.equal(body.name, "Tester 007");
|
61 | done();
|
62 | });
|
63 | });
|
64 |
|
65 | it ('should create another resource and return the resource in the response', done => {
|
66 | unirest.post('http://localhost:4242/resources')
|
67 | .type('json')
|
68 | .send({
|
69 | name : "Tester 008",
|
70 | email : "tester008@mail.com",
|
71 | phone : "(555) 500-1212"
|
72 | })
|
73 | .end(res => {
|
74 | let { body } = res;
|
75 | assert.equal(res.statusCode, 201);
|
76 | assert.ok(body._id);
|
77 | assert.equal(body.name, "Tester 008");
|
78 | done();
|
79 | });
|
80 | });
|
81 |
|
82 | it ('should have 2 resources in the database', done => {
|
83 | unirest.get('http://localhost:4242/resources').end(res => {
|
84 | let { body } = res;
|
85 | assert.equal(res.statusCode, 200);
|
86 | assert.ok(body.length);
|
87 | assert.equal(body[0].name, "Tester 007");
|
88 | assert.equal(body[1].name, "Tester 008");
|
89 | done();
|
90 | });
|
91 | });
|
92 |
|
93 | it ('should cache the findOne using hit/miss syntax', done => {
|
94 | unirest.get('http://localhost:4242/resources').end(res => {
|
95 | let { body } = res;
|
96 | let person = body[0];
|
97 | let url = `http://localhost:4242/resources/${person._id}`;
|
98 |
|
99 | assert.equal(res.statusCode, 200);
|
100 |
|
101 | unirest.get(url).end(res => {
|
102 | assert.equal(res.statusCode, 200);
|
103 | assert.equal(person.name, "Tester 007");
|
104 | unirest.get(url).end(res => {
|
105 | assert.equal(res.statusCode, 200);
|
106 | assert.equal(person.name, "Tester 007");
|
107 | assert.equal(res.headers['x-glad-cache-hit'], 'true');
|
108 | done();
|
109 | });
|
110 | });
|
111 |
|
112 | });
|
113 | });
|
114 |
|
115 | it ('should return a 403 Forbidden on a route where the policy is denied', function (done) {
|
116 | unirest.get('http://localhost:4242/resources/private')
|
117 | .end(res => {
|
118 | let { body } = res;
|
119 | assert.equal(res.statusCode, 403);
|
120 | done();
|
121 | });
|
122 | });
|
123 |
|
124 | it ('should return a 200 on a route where the policy is accepted', function (done) {
|
125 | unirest.get('http://localhost:4242/resources/not-private')
|
126 | .end(res => {
|
127 | let { body } = res;
|
128 | assert.equal(res.statusCode, 200);
|
129 | done();
|
130 | });
|
131 | });
|
132 |
|
133 | it ('should set the cached headers', function (done) {
|
134 | unirest.get('http://localhost:4242/resources').end(res1 => {
|
135 | assert.equal(res1.statusCode, 200);
|
136 | unirest.get('http://localhost:4242/resources').end(res2 => {
|
137 | unirest.get('http://localhost:4242/resources').end(res => {
|
138 | let { body } = res;
|
139 | assert.equal(res.statusCode, 200);
|
140 | assert.equal(res.headers['x-glad-cache-hit'], 'true')
|
141 | done();
|
142 | });
|
143 | });
|
144 | });
|
145 | });
|
146 |
|
147 | it ('ActionCache should clear after POSTing and build back up', function (done) {
|
148 | unirest.get('http://localhost:4242/resources').end(res1 => {
|
149 | assert.equal(res1.statusCode, 200);
|
150 | unirest.get('http://localhost:4242/resources').end(res2 => {
|
151 | unirest.get('http://localhost:4242/resources').end(res => {
|
152 | let { body } = res;
|
153 | assert.equal(res.statusCode, 200);
|
154 | assert.equal(res.headers['x-glad-cache-hit'], 'true')
|
155 |
|
156 | unirest.post('http://localhost:4242/resources')
|
157 | .type('json')
|
158 | .send({
|
159 | name : "Tester 009",
|
160 | email : "tester009@mail.com",
|
161 | phone : "(555) 500-1212"
|
162 | })
|
163 | .end(res => {
|
164 | let { body } = res;
|
165 | assert.equal(res.statusCode, 201);
|
166 | assert.ok(body._id);
|
167 | assert.equal(body.name, "Tester 009");
|
168 | unirest.get('http://localhost:4242/resources').end(res => {
|
169 | let { body } = res;
|
170 | assert.equal(res.statusCode, 200);
|
171 | assert.equal(res.headers['x-glad-cache-hit'], undefined);
|
172 | unirest.get('http://localhost:4242/resources').end(res => {
|
173 | assert.equal(res.statusCode, 200);
|
174 | assert.equal(res.headers['x-glad-cache-hit'], 'true');
|
175 | done();
|
176 | });
|
177 | });
|
178 | });
|
179 |
|
180 | });
|
181 | });
|
182 | });
|
183 | });
|
184 |
|
185 | it ('Should render a page using this.render', function (done) {
|
186 | unirest.get('http://localhost:4242/resources/my-page').end(res1 => {
|
187 | assert.equal(res1.body, '<h1>Charlie</h1><p>testing</p>');
|
188 | assert.equal(res1.statusCode, 200);
|
189 | done();
|
190 | });
|
191 | });
|
192 |
|
193 | it ('Should render a page using this.render and cache the page', function (done) {
|
194 | unirest.get('http://localhost:4242/resources/my-page').end(res1 => {
|
195 | assert.equal(res1.statusCode, 200);
|
196 | assert.equal(res1.body, '<h1>Charlie</h1><p>testing</p>');
|
197 | unirest.get('http://localhost:4242/resources/my-page').end(res2 => {
|
198 | assert.equal(res2.statusCode, 200);
|
199 | assert.equal(res2.body, '<h1>Charlie</h1><p>testing</p>');
|
200 | assert.equal(res2.headers['x-glad-cache-hit'], 'true');
|
201 | done();
|
202 | });
|
203 | });
|
204 | });
|
205 |
|
206 | it('should communicate over ws', done => {
|
207 | let socket = io.connect('http://localhost:4242', {forceNew: true});
|
208 | socket.on('connect', function () {
|
209 | socket.emit('chat');
|
210 | socket.emit('room1');
|
211 | socket.emit('policyError');
|
212 | if (socket.connected) socket.disconnect();
|
213 | done();
|
214 | });
|
215 | });
|
216 |
|
217 | });
|