messageQueue.ts 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { expect } from 'chai';
  2. import { MessageQueue } from '../../src/models/messageQueue';
  3. import { MessageType } from '../../src/enums';
  4. import { IMessage } from '../../src/models/message';
  5. import { wait } from '../utils';
  6. describe('MessageQueue', () => {
  7. const createTestMessage = (): IMessage => {
  8. return {
  9. type: MessageType.OPEN,
  10. src: 'src',
  11. dst: 'dst'
  12. };
  13. };
  14. describe('#addMessage', () => {
  15. it('should add message to queue', () => {
  16. const queue = new MessageQueue();
  17. queue.addMessage(createTestMessage());
  18. expect(queue.getMessages().length).to.eq(1);
  19. });
  20. });
  21. describe('#readMessage', () => {
  22. it('should return undefined for empty queue', () => {
  23. const queue = new MessageQueue();
  24. expect(queue.readMessage()).to.be.undefined;
  25. });
  26. it('should return message if any exists in queue', () => {
  27. const queue = new MessageQueue();
  28. const message = createTestMessage();
  29. queue.addMessage(message);
  30. expect(queue.readMessage()).to.deep.eq(message);
  31. expect(queue.readMessage()).to.be.undefined;
  32. });
  33. });
  34. describe('#getLastReadAt', () => {
  35. it('should not be changed if no messages when read', () => {
  36. const queue = new MessageQueue();
  37. const lastReadAt = queue.getLastReadAt();
  38. queue.readMessage();
  39. expect(queue.getLastReadAt()).to.be.eq(lastReadAt);
  40. });
  41. it('should be changed when read message', async () => {
  42. const queue = new MessageQueue();
  43. const lastReadAt = queue.getLastReadAt();
  44. queue.addMessage(createTestMessage());
  45. await wait(10);
  46. expect(queue.getLastReadAt()).to.be.eq(lastReadAt);
  47. queue.readMessage();
  48. expect(queue.getLastReadAt()).to.be.gte(lastReadAt + 10);
  49. });
  50. });
  51. });