UNPKG

6.92 kBJavaScriptView Raw
1const path = require('path');
2const http = require('http');
3const assert = require('assert');
4const unirest = require('unirest');
5const io = require('socket.io-client');
6let redis = require("redis");
7let client = redis.createClient();
8
9describe("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});