dorita980-node18 – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 /* global it describe */
2 'use strict';
3  
4 const proxyquire = require('proxyquire');
5 const chai = require('chai');
6 const chaiAsPromised = require('chai-as-promised');
7 chai.use(chaiAsPromised);
8  
9 const expect = chai.expect;
10  
11 var mockRequest = function (options) {
12 expect(options.method).to.be.equal('POST');
13 expect(options).to.have.property('headers');
14 expect(options.headers['User-Agent']).to.be.equal('aspen%20production/2618 CFNetwork/758.3.15 Darwin/15.4.0');
15 expect(options.headers['Accept']).to.be.equal('*/*');
16 expect(options.headers['Content-Type']).to.be.equal('application/json');
17 expect(options.uri).to.be.equal('https://192.168.1.104:443/umi');
18 expect(options.headers).to.have.property('Authorization');
19  
20 switch (options.headers['Authorization'].split(' ')[1]) {
21 case new Buffer('user:123456_bad').toString('base64'):
22 return Promise.resolve('bad json');
23 case new Buffer('user:123456_getprefs_err').toString('base64'):
24 return Promise.resolve(JSON.stringify({'error': -12345, 'body': options.body}));
25 case new Buffer('user:123456_getmission_err').toString('base64'):
26 return Promise.resolve(JSON.stringify({'error': -12345, 'body': options.body}));
27 case new Buffer('user:123456_getprefs').toString('base64'):
28 if (JSON.parse(options.body).do === 'get') {
29 let resp = {
30 ok: {
31 flags: 1024,
32 lang: 2,
33 timezone: 'America/Buenos_Aires',
34 name: 'myRobotName'
35 },
36 id: 2,
37 body: options.body
38 };
39 return Promise.resolve(JSON.stringify(resp));
40 } else {
41 return Promise.resolve(JSON.stringify({'ok': null, 'body': options.body}));
42 }
43 case new Buffer('user:123456_getmission').toString('base64'):
44 let resp = {
45 ok: {
46 flags: 4
47 },
48 id: 2,
49 body: options.body
50 };
51 return Promise.resolve(JSON.stringify(resp));
52 default:
53 expect(options.headers['Authorization']).to.be.equal('Basic ' + new Buffer('user:mypassword').toString('base64'));
54 return Promise.resolve(JSON.stringify({'ok': null, 'body': options.body}));
55 }
56 };
57  
58 const Dorita980Local = proxyquire('../lib/v1/local.js', {
59 'request-promise': mockRequest
60 });
61  
62 function generateBody (method, command, args, rid) {
63 rid = rid || 1;
64 return '{"do":"' + method + '","args":["' + command + '"' + (args ? ', ' + JSON.stringify(args) : '') + '],"id":' + rid + '}';
65 }
66  
67 describe('dorita980 local instance', () => {
68 it('should require user/blid', () => {
69 expect(function () {
70 let viaLocal = new Dorita980Local();
71 expect(viaLocal).to.be.instanceof(Object);
72 }).to.throw(/robotID is required./);
73 });
74  
75 it('should require password', () => {
76 expect(function () {
77 let viaLocal = new Dorita980Local('myblid123');
78 expect(viaLocal).to.be.instanceof(Object);
79 }).to.throw(/password is required./);
80 });
81  
82 it('should require host', () => {
83 expect(function () {
84 let viaLocal = new Dorita980Local('myuser', 'mypassword');
85 expect(viaLocal).to.be.instanceof(Object);
86 }).to.throw(/host is required./);
87 });
88  
89 it('should return an object', () => {
90 let viaLocal = new Dorita980Local('myuser', 'mypassword', '192.168.1.104');
91 expect(viaLocal).to.be.instanceof(Object);
92 });
93 });
94  
95 describe('dorita980 Cleaning Preferences helpers', () => {
96 it('should return decoded Cleaning Preferences for 1024 flag', () => {
97 let viaLocal = new Dorita980Local('myuser', 'mypassword', '192.168.1.104');
98 let preferences = viaLocal.decodeCleaningPreferences(1024);
99 expect(preferences.carpetBoost).be.equal('auto');
100 expect(preferences.edgeClean).be.equal(true);
101 expect(preferences.cleaningPasses).be.equal('1');
102 expect(preferences.alwaysFinish).be.equal(true);
103 });
104  
105 it('should return decoded Cleaning Preferences for 1058 flag', () => {
106 let viaLocal = new Dorita980Local('myuser', 'mypassword', '192.168.1.104');
107 let preferences = viaLocal.decodeCleaningPreferences(1058);
108 expect(preferences.carpetBoost).be.equal('auto');
109 expect(preferences.edgeClean).be.equal(false);
110 expect(preferences.cleaningPasses).be.equal('1');
111 expect(preferences.alwaysFinish).be.equal(false);
112 });
113  
114 it('should return decoded Cleaning Preferences for 1105 flag', () => {
115 let viaLocal = new Dorita980Local('myuser', 'mypassword', '192.168.1.104');
116 let preferences = viaLocal.decodeCleaningPreferences(1105);
117 expect(preferences.carpetBoost).be.equal('performance');
118 expect(preferences.edgeClean).be.equal(true);
119 expect(preferences.cleaningPasses).be.equal('2');
120 expect(preferences.alwaysFinish).be.equal(true);
121 });
122  
123 it('should return decoded Cleaning Preferences for 1072 flag', () => {
124 let viaLocal = new Dorita980Local('myuser', 'mypassword', '192.168.1.104');
125 let preferences = viaLocal.decodeCleaningPreferences(1072);
126 expect(preferences.carpetBoost).be.equal('eco');
127 expect(preferences.edgeClean).be.equal(true);
128 expect(preferences.cleaningPasses).be.equal('1');
129 expect(preferences.alwaysFinish).be.equal(false);
130 });
131  
132 it('should return decoded Cleaning Preferences for 18 flag', () => {
133 let viaLocal = new Dorita980Local('myuser', 'mypassword', '192.168.1.104');
134 let preferences = viaLocal.decodeCleaningPreferences(18);
135 expect(preferences.carpetBoost).be.equal('eco');
136 expect(preferences.edgeClean).be.equal(false);
137 expect(preferences.cleaningPasses).be.equal('auto');
138 expect(preferences.alwaysFinish).be.equal(true);
139 });
140  
141 it('should return decoded Cleaning Preferences for 112 flag', () => {
142 let viaLocal = new Dorita980Local('myuser', 'mypassword', '192.168.1.104');
143 let preferences = viaLocal.decodeCleaningPreferences(112);
144 expect(preferences.carpetBoost).be.equal('performance');
145 expect(preferences.edgeClean).be.equal(true);
146 expect(preferences.cleaningPasses).be.equal('auto');
147 expect(preferences.alwaysFinish).be.equal(false);
148 });
149 });
150  
151 describe('dorita980 local call', () => {
152 it('should be rejected if get an invalid json response', () => {
153 let viaLocal = new Dorita980Local('myuser', '123456_bad', '192.168.1.104');
154  
155 return expect(viaLocal.getTime()).be.rejectedWith('Unexpected token b');
156 });
157  
158 it('should send getPreferences command with default decoded arg', () => {
159 let viaLocal = new Dorita980Local('myuser', '123456_getprefs', '192.168.1.104');
160  
161 let responseOK = {
162 ok: {
163 'cleaningPreferences': {
164 'alwaysFinish': true,
165 'carpetBoost': 'auto',
166 'cleaningPasses': '1',
167 'edgeClean': true
168 },
169 'flags': 1024,
170 'lang': 2,
171 'name': 'myRobotName',
172 'timezone': 'America/Buenos_Aires'
173 },
174 id: 2,
175 'body': generateBody('get', 'prefs')
176 };
177  
178 return expect(viaLocal.getPreferences()).eventually.deep.equal(responseOK);
179 });
180  
181 it('should send getPreferences command with default decoded arg and handle not ok response', () => {
182 let viaLocal = new Dorita980Local('myuser', '123456_getprefs_err', '192.168.1.104');
183  
184 let responseOK = {
185 'error': -12345,
186 'body': generateBody('get', 'prefs')
187 };
188  
189 return expect(viaLocal.getPreferences()).eventually.deep.equal(responseOK);
190 });
191  
192 it('should send getPreferences command with false decoded arg', () => {
193 let viaLocal = new Dorita980Local('myuser', '123456_getprefs', '192.168.1.104');
194  
195 let responseOK = {
196 ok: {
197 'flags': 1024,
198 'lang': 2,
199 'name': 'myRobotName',
200 'timezone': 'America/Buenos_Aires'
201 },
202 id: 2,
203 'body': generateBody('get', 'prefs')
204 };
205  
206 return expect(viaLocal.getPreferences(false)).eventually.deep.equal(responseOK);
207 });
208  
209 it('should send setPreferences command', () => {
210 let viaLocal = new Dorita980Local('myuser', '123456_getprefs', '192.168.1.104');
211  
212 let newPreferences = {
213 flags: 1107,
214 lang: 2,
215 timezone: 'America/Buenos_Aires',
216 name: 'myRobotName'
217 };
218  
219 let responseOK = {
220 ok: null,
221 'body': generateBody('set', 'prefs', newPreferences)
222 };
223  
224 return expect(viaLocal.setPreferences(newPreferences)).eventually.deep.equal(responseOK);
225 });
226  
227 it('should send setCarpetBoostPerformance command', () => {
228 let viaLocal = new Dorita980Local('myuser', '123456_getprefs', '192.168.1.104');
229  
230 let newPreferencesWillbe = {
231 flags: 1104,
232 lang: 2,
233 timezone: 'America/Buenos_Aires',
234 name: 'myRobotName'
235 };
236  
237 let responseOK = {
238 ok: null,
239 'body': generateBody('set', 'prefs', newPreferencesWillbe, 2)
240 };
241  
242 return expect(viaLocal.setCarpetBoostPerformance()).eventually.deep.equal(responseOK);
243 });
244  
245 it('should send setCarpetBoostEco command', () => {
246 let viaLocal = new Dorita980Local('myuser', '123456_getprefs', '192.168.1.104');
247  
248 let newPreferencesWillbe = {
249 flags: 1040,
250 lang: 2,
251 timezone: 'America/Buenos_Aires',
252 name: 'myRobotName'
253 };
254  
255 let responseOK = {
256 ok: null,
257 'body': generateBody('set', 'prefs', newPreferencesWillbe, 2)
258 };
259  
260 return expect(viaLocal.setCarpetBoostEco()).eventually.deep.equal(responseOK);
261 });
262  
263 it('should send setCarpetBoostAuto command', () => {
264 let viaLocal = new Dorita980Local('myuser', '123456_getprefs', '192.168.1.104');
265  
266 let newPreferencesWillbe = {
267 flags: 1024,
268 lang: 2,
269 timezone: 'America/Buenos_Aires',
270 name: 'myRobotName'
271 };
272  
273 let responseOK = {
274 ok: null,
275 'body': generateBody('set', 'prefs', newPreferencesWillbe, 2)
276 };
277  
278 return expect(viaLocal.setCarpetBoostAuto()).eventually.deep.equal(responseOK);
279 });
280  
281 it('should send setEdgeCleanOn command', () => {
282 let viaLocal = new Dorita980Local('myuser', '123456_getprefs', '192.168.1.104');
283  
284 let newPreferencesWillbe = {
285 flags: 1024,
286 lang: 2,
287 timezone: 'America/Buenos_Aires',
288 name: 'myRobotName'
289 };
290  
291 let responseOK = {
292 ok: null,
293 'body': generateBody('set', 'prefs', newPreferencesWillbe, 2)
294 };
295  
296 return expect(viaLocal.setEdgeCleanOn()).eventually.deep.equal(responseOK);
297 });
298  
299 it('should send setEdgeCleanOff command', () => {
300 let viaLocal = new Dorita980Local('myuser', '123456_getprefs', '192.168.1.104');
301  
302 let newPreferencesWillbe = {
303 flags: 1026,
304 lang: 2,
305 timezone: 'America/Buenos_Aires',
306 name: 'myRobotName'
307 };
308  
309 let responseOK = {
310 ok: null,
311 'body': generateBody('set', 'prefs', newPreferencesWillbe, 2)
312 };
313  
314 return expect(viaLocal.setEdgeCleanOff()).eventually.deep.equal(responseOK);
315 });
316  
317 it('should send setCleaningPassesAuto command', () => {
318 let viaLocal = new Dorita980Local('myuser', '123456_getprefs', '192.168.1.104');
319  
320 let newPreferencesWillbe = {
321 flags: 0,
322 lang: 2,
323 timezone: 'America/Buenos_Aires',
324 name: 'myRobotName'
325 };
326  
327 let responseOK = {
328 ok: null,
329 'body': generateBody('set', 'prefs', newPreferencesWillbe, 2)
330 };
331  
332 return expect(viaLocal.setCleaningPassesAuto()).eventually.deep.equal(responseOK);
333 });
334  
335 it('should send setCleaningPassesOne command', () => {
336 let viaLocal = new Dorita980Local('myuser', '123456_getprefs', '192.168.1.104');
337  
338 let newPreferencesWillbe = {
339 flags: 1024,
340 lang: 2,
341 timezone: 'America/Buenos_Aires',
342 name: 'myRobotName'
343 };
344  
345 let responseOK = {
346 ok: null,
347 'body': generateBody('set', 'prefs', newPreferencesWillbe, 2)
348 };
349  
350 return expect(viaLocal.setCleaningPassesOne()).eventually.deep.equal(responseOK);
351 });
352  
353 it('should send setCleaningPassesTwo command', () => {
354 let viaLocal = new Dorita980Local('myuser', '123456_getprefs', '192.168.1.104');
355  
356 let newPreferencesWillbe = {
357 flags: 1025,
358 lang: 2,
359 timezone: 'America/Buenos_Aires',
360 name: 'myRobotName'
361 };
362  
363 let responseOK = {
364 ok: null,
365 'body': generateBody('set', 'prefs', newPreferencesWillbe, 2)
366 };
367  
368 return expect(viaLocal.setCleaningPassesTwo()).eventually.deep.equal(responseOK);
369 });
370  
371 it('should send setAlwaysFinishOn command', () => {
372 let viaLocal = new Dorita980Local('myuser', '123456_getprefs', '192.168.1.104');
373  
374 let newPreferencesWillbe = {
375 flags: 1024,
376 lang: 2,
377 timezone: 'America/Buenos_Aires',
378 name: 'myRobotName'
379 };
380  
381 let responseOK = {
382 ok: null,
383 'body': generateBody('set', 'prefs', newPreferencesWillbe, 2)
384 };
385  
386 return expect(viaLocal.setAlwaysFinishOn()).eventually.deep.equal(responseOK);
387 });
388  
389 it('should send setAlwaysFinishOff command', () => {
390 let viaLocal = new Dorita980Local('myuser', '123456_getprefs', '192.168.1.104');
391  
392 let newPreferencesWillbe = {
393 flags: 1056,
394 lang: 2,
395 timezone: 'America/Buenos_Aires',
396 name: 'myRobotName'
397 };
398  
399 let responseOK = {
400 ok: null,
401 'body': generateBody('set', 'prefs', newPreferencesWillbe, 2)
402 };
403  
404 return expect(viaLocal.setAlwaysFinishOff()).eventually.deep.equal(responseOK);
405 });
406  
407 it('should send getBbrun command', () => {
408 let viaLocal = new Dorita980Local('myuser', 'mypassword', '192.168.1.104');
409  
410 let responseOK = {
411 ok: null,
412 'body': generateBody('get', 'bbrun')
413 };
414  
415 return expect(viaLocal.getBbrun()).eventually.deep.equal(responseOK);
416 });
417  
418 it('should send getSKU command', () => {
419 let viaLocal = new Dorita980Local('myuser', 'mypassword', '192.168.1.104');
420  
421 let responseOK = {
422 ok: null,
423 'body': generateBody('get', 'sku')
424 };
425  
426 return expect(viaLocal.getSKU()).eventually.deep.equal(responseOK);
427 });
428  
429 it('should send getMission command with default decoded arg', () => {
430 let viaLocal = new Dorita980Local('myuser', '123456_getmission', '192.168.1.104');
431  
432 let responseOK = {
433 ok: {
434 'flags': 4,
435 'missionFlags': {
436 'beeping': false,
437 'binFull': false,
438 'binRemoved': false,
439 'idle': false
440 },
441 'notReadyMsg': 'Unknown'
442 },
443 id: 2,
444 'body': generateBody('get', 'mssn')
445 };
446  
447 return expect(viaLocal.getMission()).eventually.deep.equal(responseOK);
448 });
449  
450 it('should send getMission command with decoded arg in false', () => {
451 let viaLocal = new Dorita980Local('myuser', '123456_getmission', '192.168.1.104');
452  
453 let responseOK = {
454 ok: {
455 'flags': 4
456 },
457 id: 2,
458 'body': generateBody('get', 'mssn')
459 };
460  
461 return expect(viaLocal.getMission(false)).eventually.deep.equal(responseOK);
462 });
463  
464 it('should send getMission command with default decoded arg and handle not ok response', () => {
465 let viaLocal = new Dorita980Local('myuser', '123456_getmission_err', '192.168.1.104');
466  
467 let responseOK = {
468 'error': -12345,
469 'body': generateBody('get', 'mssn')
470 };
471  
472 return expect(viaLocal.getMission()).eventually.deep.equal(responseOK);
473 });
474  
475 it('should send getWirelessConfig command', () => {
476 let viaLocal = new Dorita980Local('myuser', 'mypassword', '192.168.1.104');
477  
478 let responseOK = {
479 ok: null,
480 'body': generateBody('get', 'wlcfg')
481 };
482  
483 return expect(viaLocal.getWirelessConfig()).eventually.deep.equal(responseOK);
484 });
485  
486 it('should send getWirelessStatus command', () => {
487 let viaLocal = new Dorita980Local('myuser', 'mypassword', '192.168.1.104');
488  
489 let responseOK = {
490 ok: null,
491 'body': generateBody('get', 'wlstat')
492 };
493  
494 return expect(viaLocal.getWirelessStatus()).eventually.deep.equal(responseOK);
495 });
496  
497 it('should send getCloudConfig command', () => {
498 let viaLocal = new Dorita980Local('myuser', 'mypassword', '192.168.1.104');
499  
500 let responseOK = {
501 ok: null,
502 'body': generateBody('get', 'cloudcfg')
503 };
504  
505 return expect(viaLocal.getCloudConfig()).eventually.deep.equal(responseOK);
506 });
507  
508 it('should send getWeek command', () => {
509 let viaLocal = new Dorita980Local('myuser', 'mypassword', '192.168.1.104');
510  
511 let responseOK = {
512 ok: null,
513 'body': generateBody('get', 'week')
514 };
515  
516 return expect(viaLocal.getWeek()).eventually.deep.equal(responseOK);
517 });
518  
519 it('should send getLangs command', () => {
520 let viaLocal = new Dorita980Local('myuser', 'mypassword', '192.168.1.104');
521  
522 let responseOK = {
523 ok: null,
524 'body': generateBody('get', 'langs')
525 };
526  
527 return expect(viaLocal.getLangs()).eventually.deep.equal(responseOK);
528 });
529  
530 it('should send getSys command', () => {
531 let viaLocal = new Dorita980Local('myuser', 'mypassword', '192.168.1.104');
532  
533 let responseOK = {
534 ok: null,
535 'body': generateBody('get', 'sys')
536 };
537  
538 return expect(viaLocal.getSys()).eventually.deep.equal(responseOK);
539 });
540  
541 it('should send getWirelessLastStatus command', () => {
542 let viaLocal = new Dorita980Local('myuser', 'mypassword', '192.168.1.104');
543  
544 let responseOK = {
545 ok: null,
546 'body': generateBody('get', 'wllaststat')
547 };
548  
549 return expect(viaLocal.getWirelessLastStatus()).eventually.deep.equal(responseOK);
550 });
551  
552 it('should send start command', () => {
553 let viaLocal = new Dorita980Local('myuser', 'mypassword', '192.168.1.104');
554  
555 let responseOK = {
556 ok: null,
557 'body': generateBody('set', 'cmd', {'op': 'start'})
558 };
559  
560 return expect(viaLocal.start()).eventually.deep.equal(responseOK);
561 });
562  
563 it('should send pause command', () => {
564 let viaLocal = new Dorita980Local('myuser', 'mypassword', '192.168.1.104');
565  
566 let responseOK = {
567 ok: null,
568 'body': generateBody('set', 'cmd', {'op': 'pause'})
569 };
570  
571 return expect(viaLocal.pause()).eventually.deep.equal(responseOK);
572 });
573  
574 it('should send stop command', () => {
575 let viaLocal = new Dorita980Local('myuser', 'mypassword', '192.168.1.104');
576  
577 let responseOK = {
578 ok: null,
579 'body': generateBody('set', 'cmd', {'op': 'stop'})
580 };
581  
582 return expect(viaLocal.stop()).eventually.deep.equal(responseOK);
583 });
584  
585 it('should send resume command', () => {
586 let viaLocal = new Dorita980Local('myuser', 'mypassword', '192.168.1.104');
587  
588 let responseOK = {
589 ok: null,
590 'body': generateBody('set', 'cmd', {'op': 'resume'})
591 };
592  
593 return expect(viaLocal.resume()).eventually.deep.equal(responseOK);
594 });
595  
596 it('should send dock command', () => {
597 let viaLocal = new Dorita980Local('myuser', 'mypassword', '192.168.1.104');
598  
599 let responseOK = {
600 ok: null,
601 'body': generateBody('set', 'cmd', {'op': 'dock'})
602 };
603  
604 return expect(viaLocal.dock()).eventually.deep.equal(responseOK);
605 });
606  
607 it('should send setWeek command', () => {
608 let viaLocal = new Dorita980Local('myuser', 'mypassword', '192.168.1.104');
609  
610 var newWeek = {'cycle': ['none', 'start', 'start', 'start', 'start', 'start', 'start'], 'h': [10, 10, 10, 10, 10, 10, 10], 'm': [30, 30, 30, 30, 30, 30, 30]};
611 let responseOK = {
612 ok: null,
613 'body': generateBody('set', 'week', newWeek)
614 };
615  
616 return expect(viaLocal.setWeek(newWeek)).eventually.deep.equal(responseOK);
617 });
618  
619 it('should send setTime command', () => {
620 let viaLocal = new Dorita980Local('myuser', 'mypassword', '192.168.1.104');
621  
622 var newTime = {'d': 6, 'h': 13, 'm': 9};
623 let responseOK = {
624 ok: null,
625 'body': generateBody('set', 'time', newTime)
626 };
627  
628 return expect(viaLocal.setTime(newTime)).eventually.deep.equal(responseOK);
629 });
630  
631 it('should send setPtime command', () => {
632 let viaLocal = new Dorita980Local('myuser', 'mypassword', '192.168.1.104');
633  
634 var newTime = {'time': 1474128577};
635 let responseOK = {
636 ok: null,
637 'body': generateBody('set', 'ptime', newTime)
638 };
639  
640 return expect(viaLocal.setPtime(newTime)).eventually.deep.equal(responseOK);
641 });
642 });