mirror of
https://github.com/gethomepage/homepage.git
synced 2026-04-10 12:11:23 -07:00
Chore: homepage tests (#6278)
This commit is contained in:
120
src/widgets/urbackup/proxy.test.js
Normal file
120
src/widgets/urbackup/proxy.test.js
Normal file
@@ -0,0 +1,120 @@
|
||||
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||
|
||||
import createMockRes from "test-utils/create-mock-res";
|
||||
|
||||
const { UrbackupServer, state, getServiceWidget } = vi.hoisted(() => {
|
||||
const state = { instances: [] };
|
||||
|
||||
const UrbackupServer = vi.fn((opts) => {
|
||||
const instance = {
|
||||
opts,
|
||||
getStatus: vi.fn(),
|
||||
getUsage: vi.fn(),
|
||||
};
|
||||
state.instances.push(instance);
|
||||
return instance;
|
||||
});
|
||||
|
||||
return {
|
||||
UrbackupServer,
|
||||
state,
|
||||
getServiceWidget: vi.fn(),
|
||||
};
|
||||
});
|
||||
|
||||
vi.mock("urbackup-server-api", () => ({
|
||||
UrbackupServer,
|
||||
}));
|
||||
|
||||
vi.mock("utils/config/service-helpers", () => ({
|
||||
default: getServiceWidget,
|
||||
}));
|
||||
|
||||
import urbackupProxyHandler from "./proxy";
|
||||
|
||||
describe("widgets/urbackup/proxy", () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
state.instances.length = 0;
|
||||
});
|
||||
|
||||
it("returns client statuses and maxDays without disk usage by default", async () => {
|
||||
getServiceWidget.mockResolvedValue({
|
||||
url: "http://ur",
|
||||
username: "u",
|
||||
password: "p",
|
||||
maxDays: 5,
|
||||
});
|
||||
|
||||
UrbackupServer.mockImplementationOnce((opts) => {
|
||||
const instance = {
|
||||
opts,
|
||||
getStatus: vi.fn().mockResolvedValue([{ id: 1 }]),
|
||||
getUsage: vi.fn(),
|
||||
};
|
||||
state.instances.push(instance);
|
||||
return instance;
|
||||
});
|
||||
|
||||
const req = { query: { group: "g", service: "svc", index: "0" } };
|
||||
const res = createMockRes();
|
||||
|
||||
await urbackupProxyHandler(req, res);
|
||||
|
||||
expect(UrbackupServer).toHaveBeenCalledWith({ url: "http://ur", username: "u", password: "p" });
|
||||
expect(state.instances[0].getUsage).not.toHaveBeenCalled();
|
||||
expect(res.statusCode).toBe(200);
|
||||
expect(res.body).toEqual({ clientStatuses: [{ id: 1 }], diskUsage: false, maxDays: 5 });
|
||||
});
|
||||
|
||||
it("fetches disk usage when requested via fields", async () => {
|
||||
getServiceWidget.mockResolvedValue({
|
||||
url: "http://ur",
|
||||
username: "u",
|
||||
password: "p",
|
||||
maxDays: 1,
|
||||
fields: ["totalUsed"],
|
||||
});
|
||||
|
||||
UrbackupServer.mockImplementationOnce((opts) => {
|
||||
const instance = {
|
||||
opts,
|
||||
getStatus: vi.fn().mockResolvedValue([{ id: 1 }]),
|
||||
getUsage: vi.fn().mockResolvedValue({ totalUsed: 123 }),
|
||||
};
|
||||
state.instances.push(instance);
|
||||
return instance;
|
||||
});
|
||||
|
||||
const req = { query: { group: "g", service: "svc", index: "0" } };
|
||||
const res = createMockRes();
|
||||
|
||||
await urbackupProxyHandler(req, res);
|
||||
|
||||
expect(state.instances[0].getUsage).toHaveBeenCalled();
|
||||
expect(res.statusCode).toBe(200);
|
||||
expect(res.body.diskUsage).toEqual({ totalUsed: 123 });
|
||||
});
|
||||
|
||||
it("returns 500 on server errors", async () => {
|
||||
getServiceWidget.mockResolvedValue({ url: "http://ur", username: "u", password: "p" });
|
||||
|
||||
UrbackupServer.mockImplementationOnce((opts) => {
|
||||
const instance = {
|
||||
opts,
|
||||
getStatus: vi.fn().mockRejectedValue(new Error("nope")),
|
||||
getUsage: vi.fn(),
|
||||
};
|
||||
state.instances.push(instance);
|
||||
return instance;
|
||||
});
|
||||
|
||||
const req = { query: { group: "g", service: "svc", index: "0" } };
|
||||
const res = createMockRes();
|
||||
|
||||
await urbackupProxyHandler(req, res);
|
||||
|
||||
expect(res.statusCode).toBe(500);
|
||||
expect(res.body).toEqual({ error: "Error communicating with UrBackup server" });
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user