messageQueue.spec.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { describe, expect, it } from "@jest/globals";
  2. import { MessageQueue } from "../../src/models/messageQueue.ts";
  3. import { MessageType } from "../../src/enums.ts";
  4. import type { IMessage } from "../../src/index.js";
  5. import { wait } from "../utils.ts";
  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).toBe(1);
  19. });
  20. });
  21. describe("#readMessage", () => {
  22. it("should return undefined for empty queue", () => {
  23. const queue = new MessageQueue();
  24. expect(queue.readMessage()).toBeUndefined();
  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()).toEqual(message);
  31. expect(queue.readMessage()).toBeUndefined();
  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()).toBe(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()).toBe(lastReadAt);
  47. queue.readMessage();
  48. expect(queue.getLastReadAt()).toBeGreaterThanOrEqual(lastReadAt + 10 - 2);
  49. });
  50. });
  51. });