mirror of
https://github.com/gethomepage/homepage.git
synced 2026-04-11 12:41:21 -07:00
Chore: homepage tests (#6278)
This commit is contained in:
140
src/__tests__/pages/api/widgets/resources.test.js
Normal file
140
src/__tests__/pages/api/widgets/resources.test.js
Normal file
@@ -0,0 +1,140 @@
|
||||
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||
|
||||
import createMockRes from "test-utils/create-mock-res";
|
||||
|
||||
const { si, logger } = vi.hoisted(() => ({
|
||||
si: {
|
||||
currentLoad: vi.fn(),
|
||||
fsSize: vi.fn(),
|
||||
mem: vi.fn(),
|
||||
cpuTemperature: vi.fn(),
|
||||
time: vi.fn(),
|
||||
networkStats: vi.fn(),
|
||||
networkInterfaceDefault: vi.fn(),
|
||||
},
|
||||
logger: {
|
||||
debug: vi.fn(),
|
||||
warn: vi.fn(),
|
||||
},
|
||||
}));
|
||||
|
||||
vi.mock("utils/logger", () => ({
|
||||
default: () => logger,
|
||||
}));
|
||||
|
||||
vi.mock("systeminformation", () => ({ default: si }));
|
||||
|
||||
import handler from "pages/api/widgets/resources";
|
||||
|
||||
describe("pages/api/widgets/resources", () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
});
|
||||
|
||||
it("returns CPU load data", async () => {
|
||||
si.currentLoad.mockResolvedValueOnce({ currentLoad: 12.34, avgLoad: 1.23 });
|
||||
|
||||
const req = { query: { type: "cpu" } };
|
||||
const res = createMockRes();
|
||||
|
||||
await handler(req, res);
|
||||
|
||||
expect(res.statusCode).toBe(200);
|
||||
expect(res.body.cpu).toEqual({ usage: 12.34, load: 1.23 });
|
||||
});
|
||||
|
||||
it("returns 404 when requested disk target does not exist", async () => {
|
||||
si.fsSize.mockResolvedValueOnce([{ mount: "/" }]);
|
||||
|
||||
const req = { query: { type: "disk", target: "/missing" } };
|
||||
const res = createMockRes();
|
||||
|
||||
await handler(req, res);
|
||||
|
||||
expect(res.statusCode).toBe(404);
|
||||
expect(res.body).toEqual({ error: "Resource not available." });
|
||||
expect(logger.warn).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("returns disk info for the requested mount", async () => {
|
||||
si.fsSize.mockResolvedValueOnce([{ mount: "/data", size: 1 }]);
|
||||
|
||||
const req = { query: { type: "disk", target: "/data" } };
|
||||
const res = createMockRes();
|
||||
|
||||
await handler(req, res);
|
||||
|
||||
expect(res.statusCode).toBe(200);
|
||||
expect(res.body.drive).toEqual({ mount: "/data", size: 1 });
|
||||
});
|
||||
|
||||
it("returns memory, cpu temp and uptime", async () => {
|
||||
si.mem.mockResolvedValueOnce({ total: 10 });
|
||||
si.cpuTemperature.mockResolvedValueOnce({ main: 50 });
|
||||
si.time.mockResolvedValueOnce({ uptime: 123 });
|
||||
|
||||
const resMem = createMockRes();
|
||||
await handler({ query: { type: "memory" } }, resMem);
|
||||
expect(resMem.statusCode).toBe(200);
|
||||
expect(resMem.body.memory).toEqual({ total: 10 });
|
||||
|
||||
const resTemp = createMockRes();
|
||||
await handler({ query: { type: "cputemp" } }, resTemp);
|
||||
expect(resTemp.statusCode).toBe(200);
|
||||
expect(resTemp.body.cputemp).toEqual({ main: 50 });
|
||||
|
||||
const resUptime = createMockRes();
|
||||
await handler({ query: { type: "uptime" } }, resUptime);
|
||||
expect(resUptime.statusCode).toBe(200);
|
||||
expect(resUptime.body.uptime).toBe(123);
|
||||
});
|
||||
|
||||
it("returns 404 when requested network interface does not exist", async () => {
|
||||
si.networkStats.mockResolvedValueOnce([{ iface: "en0" }]);
|
||||
|
||||
const req = { query: { type: "network", interfaceName: "missing" } };
|
||||
const res = createMockRes();
|
||||
|
||||
await handler(req, res);
|
||||
|
||||
expect(res.statusCode).toBe(404);
|
||||
expect(res.body).toEqual({ error: "Interface not found" });
|
||||
});
|
||||
|
||||
it("returns default interface network stats", async () => {
|
||||
si.networkStats.mockResolvedValueOnce([{ iface: "en0", rx_bytes: 1 }]);
|
||||
si.networkInterfaceDefault.mockResolvedValueOnce("en0");
|
||||
|
||||
const req = { query: { type: "network" } };
|
||||
const res = createMockRes();
|
||||
|
||||
await handler(req, res);
|
||||
|
||||
expect(res.statusCode).toBe(200);
|
||||
expect(res.body.interface).toBe("en0");
|
||||
expect(res.body.network).toEqual({ iface: "en0", rx_bytes: 1 });
|
||||
});
|
||||
|
||||
it("returns 404 when the default interface cannot be found in networkStats", async () => {
|
||||
si.networkStats.mockResolvedValueOnce([{ iface: "en0", rx_bytes: 1 }]);
|
||||
si.networkInterfaceDefault.mockResolvedValueOnce("en1");
|
||||
|
||||
const req = { query: { type: "network" } };
|
||||
const res = createMockRes();
|
||||
|
||||
await handler(req, res);
|
||||
|
||||
expect(res.statusCode).toBe(404);
|
||||
expect(res.body).toEqual({ error: "Default interface not found" });
|
||||
});
|
||||
|
||||
it("returns 400 for an invalid type", async () => {
|
||||
const req = { query: { type: "nope" } };
|
||||
const res = createMockRes();
|
||||
|
||||
await handler(req, res);
|
||||
|
||||
expect(res.statusCode).toBe(400);
|
||||
expect(res.body).toEqual({ error: "invalid type" });
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user