fix: classify Plex music releases correctly (#6977)
* fix: classify Plex music releases correctly * test(plex): cover music release classification
This commit is contained in:
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);
|
||||
|
||||
Reference in new issue
Block a user