fake.returns({ restart: fake.resolves(true), exec: ({ Cmd }) => { const mockedStream = new stream.Readable(); return fake.resolves({ start: sinon.stub().yields(Cmd[0] === 'fail' ? 'error' : null, mockedStream), })(); }, })
describe('room.getAll', () => { const brain = { addRoom: fake.returns(null), removeRoom: fake.returns(null), }; const room = new Room(brain); it('should get all rooms', async () => { const rooms = await room.getAll(); expect(rooms).to.be.instanceOf(Array); rooms.forEach((oneRoom) => { expect(oneRoom).to.have.property('name'); }); }); });
describe('GET /api/v1/service/tasmota/discover', () => { let controller; beforeEach(() => { controller = TasmotaController(tasmotaHandler); }); it('Discover', () => { const res = { json: fake.returns(null), }; controller['get /api/v1/service/tasmota/discover'].controller(undefined, res); assert.calledOnce(tasmotaHandler.getDiscoveredDevices); assert.calledWith(res.json, discoveredDevices); }); });
const FfmpegMock = (path) => { let func = new EventEmitter(); func = Object.assign(func, { format: fake.returns(func), outputOptions: fake.returns(func), output: (stream) => { stream.write('image'); return func; }, run: () => { if (path === 'broken') { func.emit('error', 'broken'); } else { func.emit('end'); } return func; }, }); return func; }
describe('GET /api/v1/service/mqtt/status', () => { let controller; beforeEach(() => { controller = MqttController(mqttHandler); sinon.reset(); }); it('Status test', async () => { const req = {}; const res = { json: fake.returns(null), }; await controller['get /api/v1/service/mqtt/status'].controller(req, res); assert.calledOnce(mqttHandler.status); assert.calledOnce(res.json); }); });
describe('room.destroy', () => { const brain = { addRoom: fake.returns(null), removeRoom: fake.returns(null), }; const room = new Room(brain); it('should destroy a room', async () => { await room.destroy('test-room'); assert.calledOnce(brain.removeRoom); }); it('should return room not found', async () => { const promise = room.destroy('room-does-not-exist'); return assertChai.isRejected(promise, 'Room not found'); }); });
describe('room.update', () => { const brain = { addRoom: fake.returns(null), removeRoom: fake.returns(null), }; const room = new Room(brain); it('should update a room', async () => { const newRoom = await room.update('test-room', { name: 'New name', }); expect(newRoom).to.have.property('name', 'New name'); expect(newRoom).to.have.property('selector', 'test-room'); assert.calledOnce(brain.removeRoom); assert.calledOnce(brain.addRoom); }); it('should return room not found', async () => { const promise = room.update('room-does-not-exist', { name: 'My test room', }); return assertChai.isRejected(promise, 'Room not found'); }); });
describe('POST /api/v1/service/mqtt/connect', () => { let controller; beforeEach(() => { controller = MqttController(mqttHandler); sinon.reset(); }); it('Connect test', async () => { const req = { body: { mqttURL: 'url', mqttUsername: 'username', mqttPassword: 'password', }, }; const res = { json: fake.returns(null), }; await controller['post /api/v1/service/mqtt/connect'].controller(req, res); assert.calledWith(mqttHandler.saveConfiguration, req.body); }); });
describe('POST /api/v1/service/mqtt/config/docker', () => { let controller; beforeEach(() => { controller = MqttController(mqttHandler); sinon.reset(); }); it('Install container', async () => { const req = {}; const res = { json: fake.returns(null), }; await controller['post /api/v1/service/mqtt/config/docker'].controller(req, res); assert.calledOnce(mqttHandler.installContainer); assert.calledOnce(res.json); }); });