fix: classify Plex music releases correctly (#6977)

* fix: classify Plex music releases correctly

* test(plex): cover music release classification
This commit is contained in:
Thomas authored and GitHub committed 2026-10-03 22:32:45 +02:00
1 parent 55b203ad93
commit eec910aabb
3 files changed
+35 -1

No files matched your search

@@ -19,6 +19,8 @@ import { mediaReleasesWidget } from "@site/docs/widgets/media-releases";
<IntegrationCapabilites items={[{ widget: mediaServerWidget }, { widget: mediaReleasesWidget }]} />
The Media releases widget classifies Plex albums, artists, and tracks as Music.
### Adding the integration
<AddingIntegration />
@@ -606,7 +606,7 @@ const identitySchema = z.object({
}),
});
const mapType = (type: string): "movie" | "tv" | "unknown" => {
const mapType = (type: string): "movie" | "tv" | "music" | "unknown" => {
switch (type) {
case "movie":
return "movie";
@@ -614,6 +614,10 @@ const mapType = (type: string): "movie" | "tv" | "unknown" => {
case "season":
case "episode":
return "tv";
case "album":
case "artist":
case "track":
return "music";
default:
return "unknown";
}
@@ -71,6 +71,34 @@ beforeEach(() => {
});
describe("PlexIntegration.getMediaReleasesAsync", () => {
test.each([
["album", "music"],
["artist", "music"],
["track", "music"],
["movie", "movie"],
["show", "tv"],
["unsupported", "unknown"],
])("classifies %s releases as %s", async (type, expectedType) => {
mockFetch.mockImplementation((url) => {
const urlString = String(url);
if (urlString.endsWith("/identity")) {
return respond({ MediaContainer: { machineIdentifier: "server-id" } });
}
if (urlString.endsWith("/library/recentlyAdded")) {
return respond({ MediaContainer: { Metadata: [createMetadataItem(type, { type })] } });
}
if (urlString.endsWith("/library/sections")) {
return respond({ MediaContainer: { Directory: [] } });
}
throw new Error(`Unexpected Plex request: ${urlString}`);
});
const releases = await createIntegration().getMediaReleasesAsync();
expect(releases).toHaveLength(1);
expect(releases[0]).toMatchObject({ title: "Movie", type: expectedType });
});
test("uses the series title for TV seasons and episodes", async () => {
mockFetch.mockImplementation((url) => {
const urlString = String(url);