diff options
Diffstat (limited to 'spec/frontend/ide/stores/plugins/terminal_sync_spec.js')
-rw-r--r-- | spec/frontend/ide/stores/plugins/terminal_sync_spec.js | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/spec/frontend/ide/stores/plugins/terminal_sync_spec.js b/spec/frontend/ide/stores/plugins/terminal_sync_spec.js new file mode 100644 index 00000000000..2aa3e770e7d --- /dev/null +++ b/spec/frontend/ide/stores/plugins/terminal_sync_spec.js @@ -0,0 +1,72 @@ +import createTerminalPlugin from '~/ide/stores/plugins/terminal'; +import createTerminalSyncPlugin from '~/ide/stores/plugins/terminal_sync'; +import { SET_SESSION_STATUS } from '~/ide/stores/modules/terminal/mutation_types'; +import { RUNNING, STOPPING } from '~/ide/stores/modules/terminal/constants'; +import { createStore } from '~/ide/stores'; +import eventHub from '~/ide/eventhub'; + +jest.mock('~/ide/lib/mirror'); + +const ACTION_START = 'terminalSync/start'; +const ACTION_STOP = 'terminalSync/stop'; +const ACTION_UPLOAD = 'terminalSync/upload'; +const FILES_CHANGE_EVENT = 'ide.files.change'; + +describe('IDE stores/plugins/mirror', () => { + let store; + + beforeEach(() => { + const root = document.createElement('div'); + + store = createStore(); + createTerminalPlugin(root)(store); + + store.dispatch = jest.fn(() => Promise.resolve()); + + createTerminalSyncPlugin(root)(store); + }); + + it('does nothing on ide.files.change event', () => { + eventHub.$emit(FILES_CHANGE_EVENT); + + expect(store.dispatch).not.toHaveBeenCalled(); + }); + + describe('when session starts running', () => { + beforeEach(() => { + store.commit(`terminal/${SET_SESSION_STATUS}`, RUNNING); + }); + + it('starts', () => { + expect(store.dispatch).toHaveBeenCalledWith(ACTION_START); + }); + + it('uploads when ide.files.change is emitted', () => { + expect(store.dispatch).not.toHaveBeenCalledWith(ACTION_UPLOAD); + + eventHub.$emit(FILES_CHANGE_EVENT); + + jest.runAllTimers(); + + expect(store.dispatch).toHaveBeenCalledWith(ACTION_UPLOAD); + }); + + describe('when session stops', () => { + beforeEach(() => { + store.commit(`terminal/${SET_SESSION_STATUS}`, STOPPING); + }); + + it('stops', () => { + expect(store.dispatch).toHaveBeenCalledWith(ACTION_STOP); + }); + + it('does not upload anymore', () => { + eventHub.$emit(FILES_CHANGE_EVENT); + + jest.runAllTimers(); + + expect(store.dispatch).not.toHaveBeenCalledWith(ACTION_UPLOAD); + }); + }); + }); +}); |