UNPKG

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