From 55654f762f102e2253a1ef6e12d6c090443ebf57 Mon Sep 17 00:00:00 2001 From: Radek Stepan Date: Tue, 26 Jan 2016 18:51:10 +0100 Subject: [PATCH] test store push --- src/js/lib/Store.js | 12 +++++++----- test/Store.js | 38 ++++++++++++++++++++++++++++++-------- 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/src/js/lib/Store.js b/src/js/lib/Store.js index 4e691e1..e85c2ae 100644 --- a/src/js/lib/Store.js +++ b/src/js/lib/Store.js @@ -45,9 +45,9 @@ export default class Store extends EventEmitter { // Set a value on a key. Pass falsy value as 3rd param to not emit changes. set(...args) { if (args.length == 1) { - var val = args[0]; + var val = args[0]; // keep var! } else { - var [ key, val, emit=true ] = args; + var [ key, val, emit=true ] = args; // keep var! } // A list of changes. @@ -76,12 +76,14 @@ export default class Store extends EventEmitter { }); } - // TODO: Unit-test. + // Push a value on an array or init it. push(key, val) { + // Make sure the key is an array. + if (!_.isArray(key)) key = key.split('.'); + let obj = this.get(key); if (_.isArray(obj)) { - // TODO: Don't assume a string. - this.set(`${key}.${obj.length}`, val); // TODO: won't emit for root key + this.set(key.concat(obj.length), val); // TODO: won't emit for root key return obj.length - 1; } else { this.set(key, [ val ]); diff --git a/test/Store.js b/test/Store.js index ebed3af..053bdbb 100644 --- a/test/Store.js +++ b/test/Store.js @@ -7,9 +7,31 @@ export default { 'store - set': (done) => { let s = new Store(); - s.set('A.B', 1); + s.set('A.B', 1); // key as a string + s.set([ 'A', 'C' ], 2); // key as an array + + assert.deepEqual({ A: { B: 1, C: 2 }}, s.get()); + + done(); + }, + + 'store - push': (done) => { + let s = new Store({ 'list': [ 'A' ] }); - assert.deepEqual({ A: { B: 1 }}, s.get()); + s.push('list', 'B'); // key as a string + s.push([ 'list' ], 'C'); // key as an array + + assert.deepEqual({ 'list': [ 'A', 'B', 'C' ] }, s.get()); + + done(); + }, + + 'store - push with init': (done) => { + let s = new Store(); + + s.push('list', 'A'); + + assert.deepEqual({ 'list': [ 'A' ] }, s.get()); done(); }, @@ -62,11 +84,11 @@ export default { let called = false; let cb = s.cb(() => called = true); - assert.equal(Object.keys(s._cbs).length, 1); + assert.equal(1, Object.keys(s._cbs).length); cb(); assert.ok(called); - assert.equal(Object.keys(s._cbs).length, 0); - assert.deepEqual(events, [ true, false ]); + assert.equal(0, Object.keys(s._cbs).length); + assert.deepEqual([ true, false ], events); done(); }, @@ -79,14 +101,14 @@ export default { let called = false; let cb = s.cb(() => called = true); - assert.equal(Object.keys(s._cbs).length, 1); + assert.equal(1, Object.keys(s._cbs).length); setTimeout(cb, 10); s.clean(); - assert.equal(Object.keys(s._cbs).length, 0); + assert.equal(0, Object.keys(s._cbs).length); setTimeout(() => { assert.ok(!called); - assert.deepEqual(events, [ true, false ]); + assert.deepEqual([ true, false ], events); done(); }, 20); }