Skip to content
Snippets Groups Projects
Select Git revision
  • 15497230d09de90b1e74fceba2a641fc8292021a
  • master default protected
2 results

mqtt-client-service.test.js

Blame
  • mqtt-client-service.test.js 2.81 KiB
    /**
     * @jest-environment jsdom
    */
    import '@testing-library/jest-dom';
    
    import MqttClientService from '../mqtt-client-service';
    
    let subscribeTopicAndValidate = (topic, callback) => {
      let token = MqttClientService.instance.subscribeToTopic(topic, callback);
      expect(token).toBeDefined();
      expect(token.topic).toBe(topic);
      expect(token.callback).toBe(callback);
      expect(MqttClientService.instance.subTokensMap.get(topic).includes(token)).toBeTruthy();
    
      return token;
    };
    
    let unsubscribeAndValidate = (token) => {
      MqttClientService.instance.unsubscribe(token);
      expect(MqttClientService.instance.subTokensMap.get(token.topic).includes(token)).toBeFalsy();
    };
    
    test('sub/unsub', async () => {
      let topicA = 'topic/A';
      let topicB = 'topic/B';
    
      let sub1Callback = jest.fn();
      let sub1Token = subscribeTopicAndValidate(topicA, sub1Callback);
      let sub2Callback = jest.fn();
      let sub2Token = subscribeTopicAndValidate(topicA, sub2Callback);
      let sub3Callback = jest.fn();
      let sub3Token = subscribeTopicAndValidate(topicB, sub3Callback);
    
      expect(MqttClientService.instance.subTokensMap.get(topicA).length).toBe(2);
      expect(MqttClientService.instance.subTokensMap.get(topicB).length).toBe(1);
    
      MqttClientService.instance.onMessage(topicA, {});
      MqttClientService.instance.onMessage(topicB, {});
      expect(sub1Token.callback).toHaveBeenCalledTimes(1);
      expect(sub2Token.callback).toHaveBeenCalledTimes(1);
      expect(sub3Token.callback).toHaveBeenCalledTimes(1);
    
      unsubscribeAndValidate(sub1Token);
      expect(MqttClientService.instance.subTokensMap.get(topicA).length).toBe(1);
      expect(MqttClientService.instance.subTokensMap.get(topicB).length).toBe(1);
    
      MqttClientService.instance.onMessage(topicA, {});
      MqttClientService.instance.onMessage(topicB, {});
      expect(sub1Token.callback).toHaveBeenCalledTimes(1);
      expect(sub2Token.callback).toHaveBeenCalledTimes(2);
      expect(sub3Token.callback).toHaveBeenCalledTimes(2);
    
      unsubscribeAndValidate(sub2Token);
      expect(MqttClientService.instance.subTokensMap.get(topicA).length).toBe(0);
      expect(MqttClientService.instance.subTokensMap.get(topicB).length).toBe(1);
    
      MqttClientService.instance.onMessage(topicA, {});
      MqttClientService.instance.onMessage(topicB, {});
      expect(sub1Token.callback).toHaveBeenCalledTimes(1);
      expect(sub2Token.callback).toHaveBeenCalledTimes(2);
      expect(sub3Token.callback).toHaveBeenCalledTimes(3);
    
      unsubscribeAndValidate(sub3Token);
      expect(MqttClientService.instance.subTokensMap.get(topicA).length).toBe(0);
      expect(MqttClientService.instance.subTokensMap.get(topicB).length).toBe(0);
    
      MqttClientService.instance.onMessage(topicA, {});
      MqttClientService.instance.onMessage(topicB, {});
      expect(sub1Token.callback).toHaveBeenCalledTimes(1);
      expect(sub2Token.callback).toHaveBeenCalledTimes(2);
      expect(sub3Token.callback).toHaveBeenCalledTimes(3);
    });