homeio
PublicForked from doctor-io/homeio
protocol.test.ts
import { describe, expect, it } from "vitest";
import {
ALLOWED_METHODS,
HelperProtocolError,
parseRpcRequest,
toErrorPayload,
} from "@/services/dbus-helper/protocol.mjs";
describe("dbus helper protocol", () => {
it("enforces method allowlist", () => {
expect(ALLOWED_METHODS.has("network.getStatus")).toBe(true);
expect(ALLOWED_METHODS.has("network.reboot")).toBe(false);
expect(() =>
parseRpcRequest(
JSON.stringify({
id: "1",
method: "network.reboot",
}),
),
).toThrow(HelperProtocolError);
});
it("validates connect and disconnect parameters", () => {
const connect = parseRpcRequest(
JSON.stringify({
id: "1",
method: "network.connect",
params: {
ssid: "HomeNet",
password: "secret",
},
}),
);
expect(connect.method).toBe("network.connect");
expect(connect.params).toEqual({
ssid: "HomeNet",
password: "secret",
});
const disconnect = parseRpcRequest(
JSON.stringify({
id: "2",
method: "network.disconnect",
params: {
iface: "wlan0",
},
}),
);
expect(disconnect.params).toEqual({
iface: "wlan0",
});
});
it("maps structured errors to protocol payloads", () => {
const payload = toErrorPayload({
code: "auth_failed",
message: "Invalid Wi-Fi password",
});
expect(payload).toEqual({
code: "auth_failed",
message: "Invalid Wi-Fi password",
});
});
});