mirror of
https://github.com/Koenkk/zigbee2mqtt.git
synced 2026-10-23 06:12:23 +00:00
Allow easy mocking of stub logger callTransports function to receive the actual message
This commit is contained in:
1 parent
5b6f176e11
commit
de5b9d6235
2 files changed
+22
-38
No files matched your search
+7
-26
@@ -326,47 +326,28 @@ describe('Controller', () => {
|
||||
});
|
||||
|
||||
it('Handle mqtt message', async () => {
|
||||
class DummyTransport extends Transport {
|
||||
log(info, callback) {}
|
||||
}
|
||||
const transport = new DummyTransport();
|
||||
logger.setTransportsEnabled(true);
|
||||
let spyTransport = jest.spyOn(transport, 'log').mockImplementation();
|
||||
logger.addTransport(transport);
|
||||
const eventbus = controller.eventBus;
|
||||
let spyEventbusEmitMQTTMessage = jest.spyOn(eventbus, 'emitMQTTMessage').mockImplementation();
|
||||
|
||||
await controller.start();
|
||||
logger.debug.mockClear();
|
||||
await MQTT.events.message('dummytopic', 'dummymessage');
|
||||
expect(spyTransport).toHaveBeenCalledWith(
|
||||
{level: 'debug', message: "Received MQTT message on 'dummytopic' with data 'dummymessage'", namespace: LOG_MQTT_NS},
|
||||
expect.any(Function),
|
||||
);
|
||||
logger.removeTransport(transport);
|
||||
logger.setTransportsEnabled(false);
|
||||
expect(spyEventbusEmitMQTTMessage).toHaveBeenCalledWith({topic: 'dummytopic', message: "dummymessage"});
|
||||
expect(logger.callTransports).toHaveBeenCalledWith("debug", "Received MQTT message on 'dummytopic' with data 'dummymessage'", LOG_MQTT_NS);
|
||||
});
|
||||
|
||||
it('Skip MQTT messages on topic we published to', async () => {
|
||||
class DummyTransport extends Transport {
|
||||
log(info, callback) {}
|
||||
}
|
||||
const transport = new DummyTransport();
|
||||
logger.setTransportsEnabled(true);
|
||||
let spyTransport = jest.spyOn(transport, 'log').mockImplementation();
|
||||
logger.addTransport(transport);
|
||||
const eventbus = controller.eventBus;
|
||||
let spyEventbusEmitMQTTMessage = jest.spyOn(eventbus, 'emitMQTTMessage').mockImplementation();
|
||||
|
||||
await controller.start();
|
||||
logger.debug.mockClear();
|
||||
await MQTT.events.message('zigbee2mqtt/skip-this-topic', 'skipped');
|
||||
expect(spyTransport).toHaveBeenCalledWith(
|
||||
{level: 'debug', message: "Received MQTT message on 'zigbee2mqtt/skip-this-topic' with data 'skipped'", namespace: LOG_MQTT_NS},
|
||||
expect.any(Function),
|
||||
);
|
||||
expect(spyEventbusEmitMQTTMessage).toHaveBeenCalledWith({topic: 'zigbee2mqtt/skip-this-topic', message: "skipped"});
|
||||
logger.debug.mockClear();
|
||||
await controller.mqtt.publish('skip-this-topic', '', {});
|
||||
await MQTT.events.message('zigbee2mqtt/skip-this-topic', 'skipped');
|
||||
expect(logger.debug).toHaveBeenCalledTimes(0);
|
||||
logger.removeTransport(transport);
|
||||
logger.setTransportsEnabled(false);
|
||||
});
|
||||
|
||||
it('On zigbee event message', async () => {
|
||||
|
||||
+15
-12
@@ -5,21 +5,24 @@ let namespacedLevels = {};
|
||||
let transports = [];
|
||||
|
||||
let transportsEnabled = false;
|
||||
const callTransports = (level, messageOrLambda, namespace) => {
|
||||
if (transportsEnabled) {
|
||||
const message = messageOrLambda instanceof Function ? messageOrLambda() : messageOrLambda;
|
||||
for (const transport of transports) {
|
||||
transport.log({level, message, namespace}, () => {});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const mock = {
|
||||
callTransports:jest.fn().mockImplementation((level, message, namespace) => {
|
||||
if (transportsEnabled) {
|
||||
for (const transport of transports) {
|
||||
transport.log({level, message, namespace}, () => {});
|
||||
}
|
||||
}
|
||||
}),
|
||||
log: (level, messageOrLambda, namespace = 'z2m') => {
|
||||
const message = messageOrLambda instanceof Function ? messageOrLambda() : messageOrLambda;
|
||||
mock.callTransports(level, message, namespace)
|
||||
},
|
||||
init: jest.fn(),
|
||||
info: jest.fn().mockImplementation((messageOrLambda, namespace = 'z2m') => callTransports('info', messageOrLambda, namespace)),
|
||||
warning: jest.fn().mockImplementation((messageOrLambda, namespace = 'z2m') => callTransports('warning', messageOrLambda, namespace)),
|
||||
error: jest.fn().mockImplementation((messageOrLambda, namespace = 'z2m') => callTransports('error', messageOrLambda, namespace)),
|
||||
debug: jest.fn().mockImplementation((messageOrLambda, namespace = 'z2m') => callTransports('debug', messageOrLambda, namespace)),
|
||||
info: jest.fn().mockImplementation((messageOrLambda, namespace = 'z2m') => mock.log('info', messageOrLambda, namespace)),
|
||||
warning: jest.fn().mockImplementation((messageOrLambda, namespace = 'z2m') => mock.log('warning', messageOrLambda, namespace)),
|
||||
error: jest.fn().mockImplementation((messageOrLambda, namespace = 'z2m') => mock.log('error', messageOrLambda, namespace)),
|
||||
debug: jest.fn().mockImplementation((messageOrLambda, namespace = 'z2m') => mock.log('debug', messageOrLambda, namespace)),
|
||||
cleanup: jest.fn(),
|
||||
logOutput: jest.fn(),
|
||||
add: (transport) => transports.push(transport),
|
||||
|
||||
Reference in new issue
Block a user