mirror of
https://github.com/gethomepage/homepage.git
synced 2026-04-04 09:11:21 -07:00
Chore: merge Overseerr into Seerr, add aliases (#6330)
This commit is contained in:
@@ -8,7 +8,6 @@ const MAX_ALLOWED_FIELDS = 4;
|
||||
|
||||
export default function Component({ service }) {
|
||||
const { widget } = service;
|
||||
|
||||
widget.fields = widget?.fields?.length ? widget.fields.slice(0, MAX_ALLOWED_FIELDS) : seerrDefaultFields;
|
||||
const isIssueEnabled = widget.fields.includes("issues");
|
||||
|
||||
@@ -21,11 +20,12 @@ export default function Component({ service }) {
|
||||
if (!statsData || (isIssueEnabled && !issueData)) {
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="seerr.pending" />
|
||||
<Block label="seerr.approved" />
|
||||
<Block label="seerr.available" />
|
||||
<Block label="seerr.completed" />
|
||||
<Block label="seerr.issues" />
|
||||
<Block field="seerr.pending" label="seerr.pending" />
|
||||
<Block field="seerr.approved" label="seerr.approved" />
|
||||
<Block field="seerr.available" label="seerr.available" />
|
||||
<Block field="seerr.completed" label="seerr.completed" />
|
||||
<Block field="seerr.processing" label="seerr.processing" />
|
||||
<Block field="seerr.issues" label="seerr.issues" />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
@@ -38,11 +38,12 @@ export default function Component({ service }) {
|
||||
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="seerr.pending" value={statsData.pending} />
|
||||
<Block label="seerr.approved" value={statsData.approved} />
|
||||
<Block label="seerr.available" value={statsData.available} />
|
||||
<Block label="seerr.completed" value={statsData.completed} />
|
||||
<Block label="seerr.issues" value={`${issueData?.open} / ${issueData?.total}`} />
|
||||
<Block field="seerr.pending" label="seerr.pending" value={statsData.pending} />
|
||||
<Block field="seerr.approved" label="seerr.approved" value={statsData.approved} />
|
||||
<Block field="seerr.available" label="seerr.available" value={statsData.available} />
|
||||
<Block field="seerr.completed" label="seerr.completed" value={statsData.completed} />
|
||||
<Block field="seerr.processing" label="seerr.processing" value={statsData.processing} />
|
||||
<Block field="seerr.issues" label="seerr.issues" value={`${issueData?.open} / ${issueData?.total}`} />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -30,9 +30,59 @@ describe("widgets/seerr/component", () => {
|
||||
expect(screen.getByText("seerr.approved")).toBeInTheDocument();
|
||||
expect(screen.getByText("seerr.completed")).toBeInTheDocument();
|
||||
expect(screen.queryByText("seerr.available")).toBeNull();
|
||||
expect(screen.queryByText("seerr.processing")).toBeNull();
|
||||
expect(screen.queryByText("seerr.issues")).toBeNull();
|
||||
});
|
||||
|
||||
it("supports jellyseerr as a legacy alias to seerr", () => {
|
||||
useWidgetAPI
|
||||
.mockReturnValueOnce({ data: undefined, error: undefined }) // request/count
|
||||
.mockReturnValueOnce({ data: undefined, error: undefined }); // issue/count disabled (endpoint = "")
|
||||
|
||||
const service = { widget: { type: "jellyseerr", url: "http://x" } };
|
||||
const { container } = renderWithProviders(<Component service={service} />, { settings: { hideErrors: false } });
|
||||
|
||||
expect(service.widget.fields).toEqual(seerrDefaultFields);
|
||||
expect(useWidgetAPI.mock.calls[1][1]).toBe("");
|
||||
expect(container.querySelectorAll(".service-block")).toHaveLength(3);
|
||||
expect(screen.getByText("seerr.pending")).toBeInTheDocument();
|
||||
expect(screen.getByText("seerr.approved")).toBeInTheDocument();
|
||||
expect(screen.getByText("seerr.completed")).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it("supports overseerr as a legacy alias with the same default fields", () => {
|
||||
useWidgetAPI
|
||||
.mockReturnValueOnce({ data: undefined, error: undefined }) // request/count
|
||||
.mockReturnValueOnce({ data: undefined, error: undefined }); // issue/count disabled (endpoint = "")
|
||||
|
||||
const service = { widget: { type: "overseerr", url: "http://x" } };
|
||||
const { container } = renderWithProviders(<Component service={service} />, { settings: { hideErrors: false } });
|
||||
|
||||
expect(service.widget.fields).toEqual(seerrDefaultFields);
|
||||
expect(useWidgetAPI.mock.calls[1][1]).toBe("");
|
||||
expect(container.querySelectorAll(".service-block")).toHaveLength(3);
|
||||
expect(screen.getByText("seerr.pending")).toBeInTheDocument();
|
||||
expect(screen.getByText("seerr.approved")).toBeInTheDocument();
|
||||
expect(screen.getByText("seerr.completed")).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it("keeps processing as a separate optional field", () => {
|
||||
useWidgetAPI
|
||||
.mockReturnValueOnce({ data: { pending: 1, processing: 2, approved: 3, available: 4 }, error: undefined })
|
||||
.mockReturnValueOnce({ data: undefined, error: undefined }); // issue/count disabled (endpoint = "")
|
||||
|
||||
const service = {
|
||||
widget: { type: "overseerr", url: "http://x", fields: ["pending", "processing", "approved", "available"] },
|
||||
};
|
||||
const { container } = renderWithProviders(<Component service={service} />, { settings: { hideErrors: false } });
|
||||
|
||||
expect(useWidgetAPI.mock.calls[1][1]).toBe("");
|
||||
expect(container.querySelectorAll(".service-block")).toHaveLength(4);
|
||||
expect(screen.getByText("seerr.processing")).toBeInTheDocument();
|
||||
expect(screen.getByText("2")).toBeInTheDocument();
|
||||
expect(screen.queryByText("seerr.completed")).toBeNull();
|
||||
});
|
||||
|
||||
it("renders issues when enabled (and calls the issue/count endpoint)", () => {
|
||||
useWidgetAPI
|
||||
.mockReturnValueOnce({ data: { pending: 1, approved: 2, available: 3, completed: 4 }, error: undefined })
|
||||
|
||||
Reference in New Issue
Block a user