mirror of
https://github.com/gethomepage/homepage.git
synced 2026-04-09 19:51:20 -07:00
121 lines
3.2 KiB
JavaScript
121 lines
3.2 KiB
JavaScript
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" });
|
|
});
|
|
});
|