fix(plex): an episode with no number is named by its title on every card
The cards, the up-next card and the mark-next label printed a question mark where Plex has no number; the player's header already showed the title alone. One helper (episodeNumbers/episodeName) for every place.
This commit is contained in:
@@ -11,7 +11,11 @@ vi.mock("react-i18next", async (importOriginal) => {
|
||||
const actual = await importOriginal<typeof import("react-i18next")>();
|
||||
return {
|
||||
...actual,
|
||||
useTranslation: () => ({ i18n: { language: "en" }, t: (key: string) => key }),
|
||||
// The key, and the episode a "next" line names after a colon (`{ name }`).
|
||||
useTranslation: () => ({
|
||||
i18n: { language: "en" },
|
||||
t: (key: string, o?: { name?: string }) => (o?.name ? `${key}:${o.name}` : key),
|
||||
}),
|
||||
};
|
||||
});
|
||||
|
||||
@@ -155,8 +159,8 @@ describe("PlexPosterCard with a next episode", () => {
|
||||
/>,
|
||||
);
|
||||
expect(playGlyph(container)).not.toBeNull();
|
||||
expect(screen.getByText("plex.nextUp")).toBeTruthy();
|
||||
fireEvent.click(screen.getByRole("button", { name: "plex.markNextWatched" }));
|
||||
expect(screen.getByText("plex.nextUp:S6·E16")).toBeTruthy();
|
||||
fireEvent.click(screen.getByRole("button", { name: "plex.markNextWatched:S6·E16" }));
|
||||
expect(onToggleWatched).toHaveBeenCalledWith(next);
|
||||
// The episode's own add ("Add episode"), not the show's.
|
||||
fireEvent.click(screen.getByRole("button", { name: "plex.playlist.addEpisode" }));
|
||||
@@ -370,6 +374,34 @@ describe("PlexPosterCard on a shelf", () => {
|
||||
});
|
||||
});
|
||||
|
||||
// An episode Plex has no number for (a special) is named by its title alone, as the player's own
|
||||
// header names it — the cards printed a question mark where the number was missing.
|
||||
describe("an episode card with no number for the episode", () => {
|
||||
const special: PlexCard = {
|
||||
...episode(),
|
||||
title: "The Special",
|
||||
show_id: "sh",
|
||||
show_title: "Show",
|
||||
season_number: 0,
|
||||
episode_number: null,
|
||||
};
|
||||
|
||||
it("names a show's episode by its title alone", () => {
|
||||
render(<PlexPosterCard card={special} onOpen={vi.fn()} />);
|
||||
expect(screen.queryByText("plex.episodeLine")).toBeNull();
|
||||
expect(screen.getByText("The Special")).toBeTruthy();
|
||||
});
|
||||
|
||||
it("names the next episode by its title alone", () => {
|
||||
const show: PlexCard = { id: "sh", type: "show", title: "Show", thumb: "", season_count: 6 };
|
||||
render(
|
||||
<PlexPosterCard card={show} next={special} onOpen={vi.fn()} onToggleWatched={vi.fn()} />,
|
||||
);
|
||||
expect(screen.getByText("plex.nextUp:The Special")).toBeTruthy();
|
||||
expect(screen.getByRole("button", { name: "plex.markNextWatched:The Special" })).toBeTruthy();
|
||||
});
|
||||
});
|
||||
|
||||
// A card fetched the detail page's 400px poster for its ~144px picture. It offers the
|
||||
// proxy's small cut too and lets the browser pick by its width.
|
||||
describe("a Plex card's picture", () => {
|
||||
|
||||
Reference in New Issue
Block a user