IKHSAN
EN Read in EnglishID

homeio

Publik

Fork dari doctor-io/homeio

Branch
main
Commit terakhir
958d74616 Oktober 2026

helper-client.test.ts

Buka raw
import { EventEmitter } from "node:events";
import { beforeEach, describe, expect, it, vi } from "vitest";

const createConnectionMock = vi.fn();

vi.mock("node:net", () => ({
  default: {
    createConnection: (...args: unknown[]) => createConnectionMock(...args),
  },
}));

import {
  getNetworkStatusFromHelper,
} from "@/lib/server/modules/network/helper-client";
import type { NetworkHelperError } from "@/lib/server/modules/network/helper-client";

class MockSocket extends EventEmitter {
  write = vi.fn((payload: string) => {
    const request = JSON.parse(payload.trim()) as { id: string };
    queueMicrotask(() => {
      this.emit(
        "data",
        Buffer.from(
          `${JSON.stringify({
            id: request.id,
            ok: true,
            result: {
              connected: true,
              iface: "wlan0",
              ssid: "HomeNet",
              ipv4: "192.168.1.12",
              signalPercent: 66,
            },
          })}\n`,
        ),
      );
    });

    return true;
  });

  end = vi.fn();
  destroy = vi.fn(() => {
    this.emit("close");
  });
}

describe("network helper client", () => {
  beforeEach(() => {
    vi.clearAllMocks();
  });

  it("encodes helper call and decodes success response", async () => {
    createConnectionMock.mockImplementation(() => {
      const socket = new MockSocket();
      queueMicrotask(() => {
        socket.emit("connect");
      });
      return socket;
    });

    const status = await getNetworkStatusFromHelper({
      requestId: "req-1",
    });

    expect(status.connected).toBe(true);
    expect(status.ssid).toBe("HomeNet");
  });

  it("maps socket unavailable errors to helper_unavailable", async () => {
    createConnectionMock.mockImplementation(() => {
      const socket = new MockSocket();
      queueMicrotask(() => {
        const error = Object.assign(new Error("missing socket"), {
          code: "ENOENT",
        });
        socket.emit("error", error);
      });
      return socket;
    });

    await expect(getNetworkStatusFromHelper()).rejects.toMatchObject({
      code: "helper_unavailable",
      statusCode: 503,
    } satisfies Partial<NetworkHelperError>);
  });
});
byte
2.203
baris
88
Jenis
ts
Commit terakhir
16 Oktober 2026