UNPKG

synopsis-client

Version:

A client that connects to a synopsis-backend for simple data storage

110 lines (94 loc) 2.64 kB
var assert = require('assert'); var Readable = require('stream').Readable; var PassThrough = require('stream').PassThrough; var Store = require('../index.js'); var duplexify = require('duplexify'); var JSONStream = require('JSONStream'); var localStorage = require('../localStorage'); describe('SynopsisClient', function() { var mockStore; var backendIn; var backendOut; var backendInJSON; var backendOutJSON; beforeEach(function() { localStorage.clear(); backendIn = new PassThrough(); backendOut = new PassThrough(); backendInJSON = JSONStream.parse(); backendIn.pipe(backendInJSON); backendOutJSON = JSONStream.stringify(false); backendOutJSON.pipe(backendOut); mockStore = new Store('testing', { connector: function(connected) { connected(duplexify(backendIn, backendOut)); } }); }); it('should support simple construction', function(done) { var store = new Store('name'); assert(store instanceof Store); assert(store instanceof Readable); done(); }); it('should fail when no store name given', function() { try { var store = new Store(); assert.fail('expected failure'); } catch (e) {} }); it('should fail when invalid store name given', function() { try { var store = new Store('123'); assert.fail('expected failure'); } catch (e) {} }); it('should generate uuid consumerId', function(done) { var store = new Store('test'); assert.equal(store.consumerId.length, 36); assert.equal(store.consumerId.replace(/[^-]/g, '').length, 4, 'expected 4 hyphens'); done(); }); it('sends proper handshake data', function(done) { backendInJSON.on('data', function(handshake) { assert.equal(handshake.name, 'testing'); assert(handshake.consumerId); assert.equal(handshake.start, 0); done(); }); }); it('emit empty doc when first created', function(done) { mockStore.on('data', function(data) { assert.deepEqual(data, {}); done(); }); }); it('emits docs as valid updates are received', function(done) { var dataCount = 0; var expectedDocs = [ {}, { a: 1 }, { a: 1, b: 2 }, ]; mockStore.on('data', function(doc) { assert.deepEqual(doc, expectedDocs.shift()); if (expectedDocs.length === 0) done(); }); backendOutJSON.write([[{ op: 'add', path: '/a', value: 1 }], 1]); backendOutJSON.write([[{ op: 'add', path: '/b', value: 2 }], 2]); mockStore.on('error', done); }); });