/// import PluginSystem from '../../../build/server/extensions/pluginsystem'; import {LoggerMock, WebSocketMock, childProcessMock} from '../../support/servermocks'; import * as proxyquire from 'proxyquire'; let config: any = {server: {SysComPort: 5056}}; let psSocket: WebSocketMock; let expressModuleMock = () => {}; let httpMockServer: any; let httpMock: any = { Server: () => {return httpMockServer; } }; let socketMock = () => {return psSocket; }; describe('Server - Extensions - PluginSystem:', () => { let module: PluginSystem; let websocket: WebSocketMock; let logger: LoggerMock; beforeEach(() => { httpMockServer = {listen: () => {}}; spyOn(httpMockServer, 'listen'); websocket = new WebSocketMock(); spyOn(websocket.clientSocket, 'emit'); logger = new LoggerMock(); psSocket = new WebSocketMock(); let configMod = proxyquire('../../../build/server/extensions/pluginsystem', { 'child_process': childProcessMock, 'express': expressModuleMock, 'http': httpMock, 'socket.io': socketMock }).default; module = new configMod(config, logger, websocket); }); it('systemSocket for comunication to pluginSystem created', () => { expect((module).systemSocket).toBeDefined(); expect((module).systemSocket instanceof WebSocketMock).toBeTruthy(); expect(httpMockServer.listen) .toHaveBeenCalled(); }); it('start plugin system process', () => { spyOn(childProcessMock, 'spawn').and.callThrough(); spyOn(logger, 'log'); module.start(); expect(childProcessMock.spawn).toHaveBeenCalled(); expect(logger.log).toHaveBeenCalledWith('stdout'); expect(logger.log).toHaveBeenCalledWith('stderr'); }); it('stop plugin system', () => { //set pluginStatus to true -> will be resettet by stop (module).pluginStatus = {a: true, b: true, c: false}; spyOn((module).child, 'kill'); spyOn(websocket, 'emit'); spyOn(logger, 'log'); module.stop(); expect((module).child.kill).toHaveBeenCalled(); expect((module).pluginStatus).toEqual({a: false, b: false, c: false}); expect(websocket.emit) .toHaveBeenCalledWith('pluginStatus', (module).pluginStatus); expect(logger.log).toHaveBeenCalledWith('Stopping Plugin System.............'); }); it('restart plugin system', () => { spyOn(module, 'start'); spyOn(module, 'stop'); module.restart(); expect(module.stop).toHaveBeenCalled(); expect(module.start).toHaveBeenCalled(); }); it('plugin system socket changeStatus route', () => { expect(psSocket.clientListener['changedStatus']).toBeDefined(); (module).pluginStatus = {}; spyOn(websocket, 'emit'); psSocket.clientListener['changedStatus']({new: 'Data'}); expect((module).pluginStatus).toEqual({new: 'Data'}); expect(websocket.emit) .toHaveBeenCalledWith('pluginStatus', {new: 'Data'}); }); it('websocket startPluginSystem route', () => { spyOn(childProcessMock, 'spawn').and.callThrough(); websocket.clientListener['startPluginSystem'](); expect(childProcessMock.spawn).toHaveBeenCalled(); }); it('websocket stopPluginSystem route', () => { spyOn((module).child, 'kill'); websocket.clientListener['stopPluginSystem'](); expect((module).child.kill).toHaveBeenCalled(); }); it('websocket restartPluginSystem route', () => { spyOn(module, 'start'); spyOn(module, 'stop'); websocket.clientListener['restartPluginSystem'](); expect(module.start).toHaveBeenCalled(); expect(module.stop).toHaveBeenCalled(); }); it('websocket pluginStatus route', () => { websocket.clientListener['pluginStatus'](); expect(websocket.clientSocket.emit) .toHaveBeenCalledWith('pluginStatus', (module).pluginStatus); }); it('websocket startPlugin route', () => { spyOn(psSocket, 'emit'); websocket.clientListener['startPlugin']('myModule'); expect(psSocket.emit) .toHaveBeenCalledWith('startPlugin', 'myModule'); }); });