Add years menu (#202)

This commit is contained in:
Jonathan Virga
2024-04-23 02:06:18 +02:00
committed by GitHub
parent e7f5f5871e
commit 0488f398c1
8 changed files with 159 additions and 7 deletions

View File

@@ -166,6 +166,12 @@ export const SAMPLE_GENRES = [
];
export const randomGenre = () => SAMPLE_GENRES[randomInt(SAMPLE_GENRES.length)];
export const aYear = (year: string) => ({ id: year, year });
export const Y2024 = aYear("2024");
export const Y2023 = aYear("2023");
export const Y1969 = aYear("1969");
export function aTrack(fields: Partial<Track> = {}): Track {
const id = uuid();
const artist = anArtist();

View File

@@ -163,6 +163,7 @@ export class InMemoryMusicService implements MusicService {
topSongs: async (_: string) => Promise.resolve([]),
radioStations: async () => Promise.resolve([]),
radioStation: async (_: string) => Promise.reject("Unsupported operation"),
years: async () => Promise.resolve([]),
});
}

View File

@@ -39,6 +39,9 @@ import {
ROCK,
TRIP_HOP,
PUNK,
Y2024,
Y2023,
Y1969,
aPlaylist,
aRadioStation,
} from "./builders";
@@ -575,6 +578,8 @@ describe("wsdl api", () => {
artists: jest.fn(),
artist: jest.fn(),
genres: jest.fn(),
years: jest.fn(),
year: jest.fn(),
playlists: jest.fn(),
playlist: jest.fn(),
album: jest.fn(),
@@ -1153,6 +1158,12 @@ describe("wsdl api", () => {
albumArtURI: iconArtURI(bonobUrl, "genres").href(),
itemType: "container",
},
{
id: "years",
title: "Years",
albumArtURI: iconArtURI(bonobUrl, "music").href(),
itemType: "container",
},
{
id: "recentlyAdded",
title: "Recently added",
@@ -1247,6 +1258,12 @@ describe("wsdl api", () => {
albumArtURI: iconArtURI(bonobUrl, "genres").href(),
itemType: "container",
},
{
id: "years",
title: "Jaren",
albumArtURI: iconArtURI(bonobUrl, "music").href(),
itemType: "container",
},
{
id: "recentlyAdded",
title: "Onlangs toegevoegd",
@@ -1324,7 +1341,7 @@ describe("wsdl api", () => {
expect(result[0]).toEqual(
getMetadataResult({
mediaCollection: expectedGenres.map((genre) => ({
itemType: "container",
itemType: "albumList",
id: `genre:${genre.id}`,
title: genre.name,
albumArtURI: iconArtURI(
@@ -1349,7 +1366,7 @@ describe("wsdl api", () => {
expect(result[0]).toEqual(
getMetadataResult({
mediaCollection: [PUNK, ROCK].map((genre) => ({
itemType: "container",
itemType: "albumList",
id: `genre:${genre.id}`,
title: genre.name,
albumArtURI: iconArtURI(
@@ -1365,6 +1382,64 @@ describe("wsdl api", () => {
});
});
describe("asking for a year", () => {
const expectedYears = [Y1969, Y2023, Y2024];
beforeEach(() => {
musicLibrary.years.mockResolvedValue(expectedYears);
});
describe("asking for all years", () => {
it("should return a collection of years", async () => {
const result = await ws.getMetadataAsync({
id: `years`,
index: 0,
count: 100,
});
expect(result[0]).toEqual(
getMetadataResult({
mediaCollection: expectedYears.map((year) => ({
itemType: "albumList",
id: `year:${year.id}`,
title: year.year,
albumArtURI: iconArtURI(
bonobUrl,
"music",
).href(),
})),
index: 0,
total: expectedYears.length,
})
);
});
});
describe("asking for a page of years", () => {
it("should return just that page", async () => {
const result = await ws.getMetadataAsync({
id: `years`,
index: 1,
count: 2,
});
expect(result[0]).toEqual(
getMetadataResult({
mediaCollection: [Y2023, Y2024].map((year) => ({
itemType: "albumList",
id: `year:${year.id}`,
title: year.year,
albumArtURI: iconArtURI(
bonobUrl,
"music"
).href(),
})),
index: 1,
total: expectedYears.length,
})
);
});
});
});
describe("asking for playlists", () => {
const playlist1 = aPlaylist({ id: "1", name: "pl1", entries: []});
const playlist2 = aPlaylist({ id: "2", name: "pl2", entries: []});