mirror of
https://github.com/wkulhanek/bonob.git
synced 2025-12-21 17:33:29 +01:00
Add years menu (#202)
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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([]),
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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: []});
|
||||
|
||||
Reference in New Issue
Block a user