forked from syntaxbullet/AuroraBot-discord
63 lines
2.4 KiB
TypeScript
63 lines
2.4 KiB
TypeScript
import { describe, expect, it } from "bun:test";
|
|
import { router } from "./router";
|
|
|
|
describe("Web Router", () => {
|
|
it("should return home page on /", async () => {
|
|
const req = new Request("http://localhost/");
|
|
const res = await router(req);
|
|
expect(res.status).toBe(200);
|
|
expect(res.headers.get("Content-Type")).toBe("text/html");
|
|
const text = await res.text();
|
|
expect(text).toContain("Aurora Web");
|
|
expect(text).toContain("Uptime:");
|
|
expect(text).toContain('id="uptime-display"');
|
|
});
|
|
|
|
it("should return dashboard page on /dashboard", async () => {
|
|
const req = new Request("http://localhost/dashboard");
|
|
const res = await router(req);
|
|
expect(res.status).toBe(200);
|
|
expect(await res.text()).toContain("Live Activity");
|
|
});
|
|
|
|
it("should return health check on /health", async () => {
|
|
const req = new Request("http://localhost/health");
|
|
const res = await router(req);
|
|
expect(res.status).toBe(200);
|
|
expect(res.headers.get("Content-Type")).toBe("application/json");
|
|
const data = await res.json();
|
|
expect(data).toHaveProperty("status", "ok");
|
|
});
|
|
|
|
it("should block path traversal", async () => {
|
|
// Attempts to go up two directories to reach the project root or src
|
|
const req = new Request("http://localhost/public/../../package.json");
|
|
const res = await router(req);
|
|
// Should be 403 Forbidden or 404 Not Found (our logical change makes it 403)
|
|
expect([403, 404]).toContain(res.status);
|
|
});
|
|
|
|
it("should serve existing static file", async () => {
|
|
// We know style.css exists in src/web/public
|
|
const req = new Request("http://localhost/public/style.css");
|
|
const res = await router(req);
|
|
expect(res.status).toBe(200);
|
|
if (res.status === 200) {
|
|
const text = await res.text();
|
|
expect(text).toContain("body");
|
|
}
|
|
});
|
|
|
|
it("should not serve static files on non-GET methods", async () => {
|
|
const req = new Request("http://localhost/public/style.css", { method: "POST" });
|
|
const res = await router(req);
|
|
expect(res.status).toBe(404);
|
|
});
|
|
|
|
it("should return 404 for unknown routes", async () => {
|
|
const req = new Request("http://localhost/unknown");
|
|
const res = await router(req);
|
|
expect(res.status).toBe(404);
|
|
});
|
|
});
|