/// import Configuration from '../../../build/server/modules/configuration'; import {LoggerMock, WebSocketMock, PluginSystemMock, DepManagerMock, fsMock} from '../../support/servermocks'; import * as proxyquire from 'proxyquire'; import * as q from 'q'; describe('Server - Modules - Configuration:', () => { let module: Configuration; let websocket: WebSocketMock; let logger: LoggerMock; let ps: PluginSystemMock; let depManager: DepManagerMock; beforeEach(() => { websocket = new WebSocketMock(); spyOn(websocket.clientSocket, 'emit'); logger = new LoggerMock(); ps = new PluginSystemMock(); depManager = new DepManagerMock(); let configMod = proxyquire('../../../build/server/modules/configuration', { 'q-io/fs': fsMock }).default; module = new configMod(logger, websocket, ps, depManager); }); it('collectPluginsData -> depManager initialised', (done) => { depManager.isInitialised = () => {return true; }; let deps = { webend_server: {}, webend_testpage: {name: 'testpage'} }; depManager.getPlugins = () => {return deps; }; module.collectPluginsData().then((data: any) => { expect(data.deps).toEqual(deps); expect(data.enabled).toEqual({ webend_server: false, webend_testpage: false }); done(); }); }); it('collectPluginsData -> depManager not initialised', (done) => { depManager.isInitialised = () => {return false; }; let deps = { webend_server: {}, webend_testpage: {name: 'testpage'} }; depManager.initialise = () => { let deffered = q.defer(); deffered.resolve(deps); return deffered.promise; }; module.collectPluginsData().then((data: any) => { expect(data.deps).toEqual(deps); expect(data.enabled).toEqual({ webend_server: false, webend_testpage: false }); done(); }); }); it('getPluginMetadata route', () => { expect(websocket.clientListener['getPluginMetadata']).toBeDefined(); let collectFake = () => {return {then: (fn: Function) => fn('myData')}; }; spyOn(module, 'collectPluginsData').and.callFake(collectFake); websocket.clientListener['getPluginMetadata'](); expect(websocket.clientSocket.emit) .toHaveBeenCalledWith('getPluginMetadata', 'myData'); }); it('writeConfigFile successfully -> no failed log', () => { spyOn(logger, 'log'); let writeFake = () => {return {then: (fn: Function) => {fn('data'); }}; }; spyOn(fsMock, 'write').and.callFake(writeFake); module.writeConfigFile({a: 'b'}); expect(logger.log).not.toHaveBeenCalled(); }); it('writeConfigFile failed -> failed log', () => { spyOn(logger, 'log'); let writeFake = () => {return {then: (success: Function, failed: Function) => {failed('err'); }}; }; spyOn(fsMock, 'write').and.callFake(writeFake); module.writeConfigFile({a: 'b'}); expect(logger.log).toHaveBeenCalledWith('Error on writing Config File!'); }); it('writeAutostartConfigToFile', (done) => { spyOn(module, 'writeConfigFile').and.callFake((data: any) => { expect(data).toEqual({ enabled: {a: true, b: false}, plugins: { webend_server: { port: 3000, test: 1234567 } } }); done(); }); module.writeAutostartConfigToFile({a: true, b: false}); }); it('saveAutostart route', () => { expect(websocket.clientListener['saveAutostart']).toBeDefined(); let writeFake = () => { return {then: (fn: Function) => {fn(); }}; }; spyOn(module, 'writeAutostartConfigToFile').and.callFake(writeFake); spyOn(module, 'sendMetadata'); spyOn(ps, 'restart'); websocket.clientListener['saveAutostart'](); expect(module.sendMetadata).toHaveBeenCalled(); expect(ps.restart).toHaveBeenCalled(); }); it('collectPluginConfigData -> depManager initialised', (done) => { depManager.isInitialised = () => {return true; }; let deps = { webend_server: {name: 'webend_server'}, webend_testpage: {name: 'testpage'} }; depManager.getPlugins = () => {return deps; }; module.collectPluginConfigData('webend_server').then((data: any) => { expect(data.info).toEqual(deps.webend_server); expect(data.config).toEqual({ port: 3000, test: 1234567 }); done(); }); }); it('collectPluginConfigData -> depManager not initialised', (done) => { depManager.isInitialised = () => {return false; }; let deps = { webend_server: {name: 'webend_server'}, webend_testpage: {name: 'testpage'} }; depManager.initialise = () => { let deffered = q.defer(); deffered.resolve(deps); return deffered.promise; }; module.collectPluginConfigData('webend_server').then((data: any) => { expect(data.info).toEqual(deps.webend_server); expect(data.config).toEqual({ port: 3000, test: 1234567 }); done(); }); }); it('getPluginConfig route', () => { expect(websocket.clientListener['getPluginConfig']).toBeDefined(); let collectFake = () => { return {then: (fn: Function) => {fn('config'); }}; }; spyOn(module, 'collectPluginConfigData').and.callFake(collectFake); websocket.clientListener['getPluginConfig'](); expect(websocket.clientSocket.emit) .toHaveBeenCalledWith('getPluginConfig', 'config'); }); it('savePluginConfig', (done) => { spyOn(module, 'writeConfigFile'); module.savePluginConfig('webend_server', 'myConfig').then(() => { expect(module.writeConfigFile).toHaveBeenCalledWith({ enabled: { webend_server: false, webend_testpage: false }, plugins: { webend_server: 'myConfig' } }); done(); }); }); it('savePluginConfig route', () => { expect(websocket.clientListener['savePluginConfig']).toBeDefined(); let saveFake = () => { return {then: (fn: Function) => {fn(); }}; }; spyOn(module, 'savePluginConfig').and.callFake(saveFake); let collectFake = () => { return {then: (fn: Function) => {fn('config'); }}; }; spyOn(module, 'collectPluginConfigData').and.callFake(collectFake); spyOn(ps, 'restart'); websocket.clientListener['savePluginConfig'](); expect(ps.restart).toHaveBeenCalled(); expect(websocket.clientSocket.emit) .toHaveBeenCalledWith('getPluginConfig', 'config'); }); it('readConfigFile fails -> log', () => { fsMock.read = () => {return {then: (success: Function, failed: Function) => failed()}; }; spyOn(logger, 'log'); module.readConfigFile(); expect(logger.log).toHaveBeenCalledWith('Error on reading Config File!'); }); });