UNPKG

8.36 kBJavaScriptView Raw
1// Tests with promises as implemented by `when`
2
3var CodeGradX = require('../codegradxlib.js');
4var when = require('when');
5var rest = require('rest');
6var mime = require('rest/interceptor/mime');
7
8describe("when", function () {
9
10 function make_faildone (done) {
11 return function faildone (reason) {
12 //console.log(reason);
13 fail(reason);
14 done();
15 };
16 }
17
18 it("test1", function (done) {
19 var faildone = make_faildone(done);
20 rest('http://absent.example.org/12345')
21 .then(function (response) {
22 console.log('response', response);
23 faildone();
24 }, function (reason) {
25 // reason = {
26 // request: {path: , method: },
27 // error: {["message"], code: '', errno: '', syscall: } }
28 //console.log('reason', reason);
29 expect(reason).toBeDefined();
30 done();
31 });
32 });
33
34 it("test1 with mime interceptor", function (done) {
35 var faildone = make_faildone(done);
36 rest.wrap(mime)('http://absent.example.org/12345')
37 .then(function (response) {
38 console.log('response', response);
39 faildone();
40 }, function (reason) {
41 // reason = {
42 // request: {path: , method: },
43 // error: {["message"], code: '', errno: 'ENOTFOUND', syscall: } }
44 //console.log('reason', reason);
45 expect(reason).toBeDefined();
46 done();
47 });
48 });
49
50 it("test2", function (done) {
51 var faildone = make_faildone(done);
52 rest.wrap(mime)('http://example.org/')
53 .then(function (response) {
54 // { request: { path: 'http://example.org/',
55 // headers: { ... },
56 // method: 'GET', ... }
57 // status: { code: 200 },
58 // headers: { ... },
59 // entity: '...', ... }
60 //console.log(response);
61 expect(response).toBeDefined();
62 done();
63 }, faildone);
64 });
65
66 it("test2a: dynamic add of a then()", function (done) {
67 var faildone = make_faildone(done);
68 rest.wrap(mime)('http://example.org/')
69 .then(function (response) {
70 expect(response).toBeDefined();
71 return when(response)
72 .then(function (response2) {
73 expect(response2).toBe(response);
74 done();
75 }, faildone);
76 }, faildone);
77 });
78
79 it("test2b: catch a reject in a then", function (done) {
80 var faildone = make_faildone(done);
81 rest.wrap(mime)('http://example.org/')
82 .then(function (response) {
83 expect(response).toBeDefined();
84 return when.reject(response);
85 })
86 .catch(function (reason) {
87 expect(reason).toBeDefined();
88 done();
89 });
90 });
91
92 it("test2c: first catch ignored", function (done) {
93 var faildone = make_faildone(done);
94 var response;
95 rest.wrap(mime)('http://example.org/')
96 .catch(function (reason) {
97 faildone();
98 })
99 .then(function (response1) {
100 expect(response1).toBeDefined();
101 response = response1;
102 return when.reject(response1);
103 })
104 .catch(function (reason) {
105 expect(reason).toBeDefined();
106 expect(reason).toBe(response);
107 done();
108 });
109 });
110
111 it("test2d: second then ignored", function (done) {
112 var faildone = make_faildone(done);
113 var response;
114 rest.wrap(mime)('http://example.org/')
115 .catch(function (reason) {
116 faildone();
117 })
118 .then(function (response1) {
119 expect(response1).toBeDefined();
120 response = response1;
121 return when.reject(response1);
122 })
123 .then(function (response2) {
124 faildone();
125 })
126 .catch(function (reason) {
127 expect(reason).toBeDefined();
128 expect(reason).toBe(response);
129 done();
130 });
131 });
132
133 it("test2d2: second then ignored, second catch run", function (done) {
134 var faildone = make_faildone(done);
135 var response;
136 rest.wrap(mime)('http://example.org/')
137 .catch(function (reason) {
138 faildone();
139 })
140 .then(function (response1) {
141 expect(response1).toBeDefined();
142 response = response1;
143 return when.reject(response1);
144 })
145 .then(function (response2) {
146 faildone();
147 })
148 .catch(function (reason) {
149 expect(reason).toBeDefined();
150 expect(reason).toBe(response);
151 return when.reject(reason);
152 })
153 .catch(function (reason2) {
154 expect(reason2).toBeDefined();
155 expect(reason2).toBe(response);
156 done();
157 });
158 });
159
160 it("test2d3: second catch run, second then ignored", function (done) {
161 var faildone = make_faildone(done);
162 var response;
163 rest.wrap(mime)('http://example.org/')
164 .catch(function (reason) {
165 faildone();
166 })
167 .then(function (response1) {
168 expect(response1).toBeDefined();
169 response = response1;
170 return when.reject(response1);
171 })
172 .catch(function (reason) {
173 expect(reason).toBeDefined();
174 expect(reason).toBe(response);
175 return when.reject(reason);
176 })
177 .then(function (response2) {
178 faildone();
179 })
180 .catch(function (reason2) {
181 expect(reason2).toBeDefined();
182 expect(reason2).toBe(response);
183 done();
184 });
185 });
186
187 it("test2d4: second catch run, second then not ignored", function (done) {
188 var faildone = make_faildone(done);
189 var response;
190 rest.wrap(mime)('http://example.org/')
191 .catch(function (reason) {
192 faildone();
193 })
194 .then(function (response1) {
195 expect(response1).toBeDefined();
196 response = response1;
197 return when.reject(response1);
198 })
199 .catch(function (reason) {
200 expect(reason).toBeDefined();
201 expect(reason).toBe(response);
202 return when.reject(reason);
203 })
204 .catch(function (reason2) {
205 expect(reason2).toBeDefined();
206 expect(reason2).toBe(response);
207 return when(reason2);
208 })
209 .then(function (response2) {
210 expect(response2).toBe(response);
211 done();
212 });
213 });
214
215 it("test2e: value transforming", function (done) {
216 var faildone = make_faildone(done);
217 var response;
218 rest.wrap(mime)('http://example.org/')
219 .catch(function (reason) {
220 faildone();
221 })
222 .then(function (response1) {
223 expect(response1).toBeDefined();
224 response = response1;
225 return when([response1]);
226 })
227 .then(function (aresponse2) {
228 expect(aresponse2[0]).toBe(response);
229 done();
230 })
231 .catch(function (reason) {
232 faildone();
233 });
234 });
235
236 it("testAny1: ", function (done) {
237 // the two promises will be resolved but since a promise can
238 // only be resolved one, only one request.path is printed.
239 var faildone = make_faildone(done);
240 var promise1 = rest.wrap(mime)('http://example.org/');
241 promise1.then(function (response) {
242 console.log("promise1 resolved");
243 return response;
244 });
245 var promise2 = rest.wrap(mime)('http://www.example.org/');
246 promise2.then(function (response) {
247 console.log("promise2 resolved");
248 return response;
249 });
250 var answers = [];
251 when.any([promise1, promise2])
252 .then(function (response) {
253 expect(response).toBeDefined();
254 answers.push(response.request.path);
255 console.log(answers);
256 return when(true)
257 .delay(2*1000)
258 .then(done);
259 })
260 .catch(faildone);
261 }, 10*1000);
262
263});