neet/masto.js

View on GitHub
src/adapters/ws/web-socket-subscription.spec.ts

Summary

Maintainability
A
0 mins
Test Coverage
import getPort from "get-port";
import { WebSocketServer } from "isomorphic-ws";

import { createLogger } from "../logger";
import { SerializerNativeImpl } from "../serializers";
import { WebSocketConnectorImpl } from "./web-socket-connector";
import { WebSocketSubscription } from "./web-socket-subscription";

describe("WebSocketSubscription", () => {
  it("doesn't do anything if no connection was established", async () => {
    const logger = createLogger();

    const subscription = new WebSocketSubscription(
      new WebSocketConnectorImpl(
        { constructorParameters: ["ws://localhost:0"] },
        logger,
      ),
      new SerializerNativeImpl(),
      "public",
      logger,
    );

    const res = subscription.unsubscribe();
    expect(res).toBeUndefined();
  });

  it("implements async iterator", async () => {
    const logger = createLogger();
    const port = await getPort();
    const server = new WebSocketServer({ port });

    server.on("connection", (socket) => {
      socket.on("message", () => {
        socket.send(
          JSON.stringify({
            stream: ["public"],
            event: "delete",
            payload: "123",
          }),
        );
      });
    });

    const connection = new WebSocketConnectorImpl(
      { constructorParameters: [`ws://localhost:${port}`] },
      logger,
    );
    const subscription = new WebSocketSubscription(
      connection,
      new SerializerNativeImpl(),
      "public",
      logger,
    );

    let value!: string;
    for await (const message of subscription) {
      value = message.payload as string;
      break;
    }

    expect(value).toBe("123");

    connection.close();
    server.close();
  });
});