Files
Termix/plugins/wake-on-lan/tests/backend/routes.test.ts
T

66 lines
1.9 KiB
TypeScript

import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import type { PluginHostSummary } from "@termix/plugin-sdk/backend";
import { startServer, type TestServer } from "./helpers.js";
vi.mock("../../src/backend/magic-packet.js", async () => {
const actual = await vi.importActual<
typeof import("../../src/backend/magic-packet.js")
>("../../src/backend/magic-packet.js");
return { ...actual, sendMagicPacket: vi.fn().mockResolvedValue(undefined) };
});
const HOST: PluginHostSummary = {
id: 1,
userId: "user-1",
name: "server",
ip: "10.0.0.5",
port: 22,
username: "root",
tags: null,
folder: null,
authType: "password",
};
describe("POST /host/:id/wake", () => {
let server: TestServer;
beforeEach(() => {
vi.clearAllMocks();
});
afterEach(async () => {
await server?.close();
});
it("sends the packet for a configured host", async () => {
server = await startServer({ hosts: [HOST] });
await server.mock.ctx.settings.setHost(
1,
"macAddress",
"aa:bb:cc:dd:ee:ff",
);
const response = await server.request("POST", "/host/1/wake");
expect(response.status).toBe(200);
expect(response.body).toEqual({ success: true });
});
it("404s for an unknown host", async () => {
server = await startServer({ hosts: [] });
const response = await server.request("POST", "/host/999/wake");
expect(response.status).toBe(404);
});
it("400s when no MAC address is configured", async () => {
server = await startServer({ hosts: [HOST] });
const response = await server.request("POST", "/host/1/wake");
expect(response.status).toBe(400);
});
it("denies a caller without wake-on-lan.send", async () => {
server = await startServer({ hosts: [HOST], permissions: [] });
const response = await server.request("POST", "/host/1/wake");
expect(response.status).toBe(403);
});
});