From 782d4009533cb09f5be811d22a82222fc6100c9d Mon Sep 17 00:00:00 2001 From: ThomasKlessen Date: Mon, 13 Nov 2017 17:52:01 +0100 Subject: [PATCH] namespace support for actions (#24) * namespace support for actions * renamed existing tests * added tests for store-actions with/without namespace * removed commit parts in action/dispatch tests * bugfixed failed test runs; --- src/Observer.js | 2 +- test/unit/specs/Observer.spec.js | 64 +++++++++++++++++++++++++++++--- 2 files changed, 60 insertions(+), 6 deletions(-) diff --git a/src/Observer.js b/src/Observer.js index f656215..dd77cde 100755 --- a/src/Observer.js +++ b/src/Observer.js @@ -38,7 +38,7 @@ export default class { target = [msg.namespace || '', msg.mutation].filter((e) => !!e).join('/') } else if (msg.action) { method = 'dispatch' - target = msg.action + target = [msg.namespace || '', msg.action].filter((e) => !!e).join('/') } } this.store[method](target, msg) diff --git a/test/unit/specs/Observer.spec.js b/test/unit/specs/Observer.spec.js index c164d08..170960d 100644 --- a/test/unit/specs/Observer.spec.js +++ b/test/unit/specs/Observer.spec.js @@ -4,12 +4,12 @@ import Observer from '@/Observer' import { Server, WebSocket } from 'mock-socket' -describe ("Observer.js", () => { +describe('Observer.js', () => { let observer, mockServer let wsUrl = 'ws://localhost:8080' - it ('fires onopen event', (done) => { + it('fires onopen event', (done) => { mockServer = new Server(wsUrl) mockServer.on('connection', ws => { ws.send('hi') @@ -24,7 +24,7 @@ describe ("Observer.js", () => { }) // TODO: DRY - it ('passes a json event to the provided vuex store', (done) => { + it('passes a json commit to the provided vuex store', (done) => { let expectedMsg = { mutation: 'setName', value: 'steve' } let mockStore = sinon.mock({ commit: () => {} }) mockStore.expects('commit').withArgs('SOCKET_ONOPEN') @@ -49,8 +49,36 @@ describe ("Observer.js", () => { }, 100) }) + // TODO: DRY + it('passes a json action to the provided vuex store', (done) => { + let expectedMsg = { action: 'setName', value: 'steve' } + let mockStore = sinon.mock({ + commit: () => {}, + dispatch: () => {} + }) + mockStore.expects('dispatch').withArgs(expectedMsg.action, expectedMsg) + + mockServer = new Server(wsUrl) + mockServer.on('connection', ws => { + ws.send(JSON.stringify(expectedMsg)) + }) + + Vue.use(VueNativeSock, wsUrl) + let vm = new Vue() + observer = new Observer(wsUrl, { + store: mockStore.object, + format: 'json', + websocket: new WebSocket(wsUrl) + }) + + setTimeout(() => { + mockStore.verify() + mockServer.stop(done) + }, 100) + }) + // TODO: DRY - it ('passes a namespaced json event to the provided vuex store', (done) => { + it('passes a namespaced json commit to the provided vuex store', (done) => { let expectedMsg = { namespace: 'users', mutation: 'setName', value: 'steve' } let mockStore = sinon.mock({ commit: () => {} }) mockStore.expects('commit').withArgs('SOCKET_ONOPEN') @@ -75,5 +103,31 @@ describe ("Observer.js", () => { }, 100) }) -}) + // TODO: DRY + it('passes a namespaced json action to the provided vuex store', (done) => { + let expectedMsg = { namespace: 'users', action: 'setName', value: 'steve' } + let mockStore = sinon.mock({ + commit: () => {}, + dispatch: () => {} + }) + mockStore.expects('dispatch').withArgs(expectedMsg.namespace + '/' + expectedMsg.action, expectedMsg) + mockServer = new Server(wsUrl) + mockServer.on('connection', ws => { + ws.send(JSON.stringify(expectedMsg)) + }) + + Vue.use(VueNativeSock, wsUrl) + let vm = new Vue() + observer = new Observer(wsUrl, { + store: mockStore.object, + format: 'json', + websocket: new WebSocket(wsUrl) + }) + + setTimeout(() => { + mockStore.verify() + mockServer.stop(done) + }, 100) + }) +})