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.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 | });
|