/** * Created by liuchang on 16/1/21. */ 'use strict'; import * as canal from '../lib'; import {Worker } from '../lib/worker' import * as md5 from 'blueimp-md5'; import "should"; describe('use functions alone', function () { beforeEach(function () { //noinspection TypeScriptUnresolvedVariable if ('undefined' !== typeof window && window.karma) canal.setDefault('http://localhost:9000'); }); this.timeout(10000); describe('canal() should run with/without parameter', function () { it('canal(void) should return worker instance', function () { let _worker = canal(); _worker.should.instanceOf(Worker); }); it('canal(string) should return worker instance', function () { let _worker = canal('/path/to/data'); _worker.should.instanceOf(Worker); }); it('canal(number) should return worker instance', function () { let _worker = canal(3000); _worker.should.instanceOf(Worker); }); it('canal(full address) should return worker instance', function () { let _worker = canal('http://localhost:3000'); _worker.should.instanceOf(Worker); }); }); describe('canal(*).*() should connect and get data', function () { it('fetch by id, path explicit', function (done: any) { //noinspection TypeScriptUnresolvedVariable let addr = ('undefined' !== typeof window && !window.karma) ? location.protocol + '//' + location.host : 'http://localhost:9000'; return canal(addr).fetch('testId').then((data)=> { let _id = md5('testId', ''); _id.should.equal(data.value); done(); }) }); it('update by id, path {path/to/data}', function (done: any) { canal('/path/to/data').update('testId', {something: 'new'}).then((data)=> { let _id = md5('testId', '/path/to/data'); _id.should.equal(data.value); done(); }) }); it('add by id, root null path null', function (done: any) { canal().add('testId', {something: 'new'}).then((data)=> { let _id = md5('testId', ''); _id.should.equal(data.value); done(); }) }); it('remove by {}, path {path/to/data}', function (done: any) { canal('/path/to/data').remove({}).then((data)=> { let _id = md5(JSON.stringify({}), '/path/to/data'); _id.should.equal(data.value); done(); }) }); }); describe('canal(*()) should run', function () { it('should return Promise', function () { let ret = canal(function*() { yield Promise.resolve(1); }); ret.should.be.Promise(); }); it('should run in A/A', function (done: any) { canal(function*() { let ret = yield Promise.resolve(1); return yield Promise.resolve(ret + 1); }).then((data)=> { data.should.equal(2); done(); }) }); it('should pass parameters', function (done: any) { canal(function*(val) { let ret = yield Promise.resolve(val); return yield Promise.resolve(ret + 1); }, 10).then((data)=> { data.should.equal(11); done(); }) }); it('should wait until listen return', function (done: any) { canal(function*() { return yield canal('/path/to/data').listen('id', function*(_done, data) { let ret = yield Promise.resolve(data); _done(ret); }); }).then((data)=> { data.value.should.equal(md5('id', '/path/to/data')); done(); }) }); }) });