Files
Termix/plugins/file-manager/tests/backend/routes.test.ts
T

69 lines
2.0 KiB
TypeScript

import { afterEach, beforeEach, describe, expect, it } from "vitest";
import { startServer, type TestServer } from "./helpers.js";
let server: TestServer;
beforeEach(async () => {
server = await startServer();
});
afterEach(async () => {
await server.close();
});
describe("recent/pinned/shortcuts", () => {
it("round-trips a recent file", async () => {
server.db.sqlite.exec("INSERT INTO ssh_data (id) VALUES (1)");
const add = await server.request("POST", "/recent", {
body: { hostId: 1, path: "/etc/hosts", name: "hosts" },
});
expect(add.status).toBe(200);
const list = await server.request("GET", "/recent?hostId=1");
expect(list.status).toBe(200);
expect(list.body).toEqual([
expect.objectContaining({ name: "hosts", path: "/etc/hosts" }),
]);
});
it("refuses to pin the same path twice", async () => {
server.db.sqlite.exec("INSERT INTO ssh_data (id) VALUES (1)");
const first = await server.request("POST", "/pinned", {
body: { hostId: 1, path: "/var/log", name: "logs" },
});
expect(first.status).toBe(200);
const second = await server.request("POST", "/pinned", {
body: { hostId: 1, path: "/var/log", name: "logs" },
});
expect(second.status).toBe(409);
});
});
describe("file-manager.use", () => {
it("refuses every route without it", async () => {
await server.close();
server = await startServer({ permissions: [] });
for (const [method, path] of [
["GET", "/status?sessionId=x"],
["POST", "/connect"],
["GET", "/recent?hostId=1"],
["POST", "/recent"],
["GET", "/pinned?hostId=1"],
["POST", "/pinned"],
["GET", "/shortcuts?hostId=1"],
["POST", "/shortcuts"],
["GET", "/activeTransfers"],
] as const) {
const res = await server.request(method, path, {
body: { hostId: 1, path: "/tmp", name: "tmp" },
});
expect(res.status, `${method} ${path}`).toBe(403);
expect(res.body.required).toBe("file-manager.use");
}
});
});