108 lines
2.7 KiB
JavaScript
108 lines
2.7 KiB
JavaScript
import { sortItems } from '../../src/js/util/arrays';
|
|
|
|
describe('sortItems', () => {
|
|
describe('date sorting', () => {
|
|
it('should prefer a date embedded in the filename over the tag date', () => {
|
|
const tracks = [
|
|
{
|
|
name: 'Talk Python',
|
|
uri: 'file:///media/podcasts/563-2026-09-22-EVE-Online.mp3',
|
|
release_date: '2023-10-13',
|
|
},
|
|
{
|
|
name: 'Up First',
|
|
uri: 'file:///media/podcasts/2026-09-01_Up%20First.mp3',
|
|
release_date: '2026-09-01',
|
|
},
|
|
];
|
|
|
|
expect(sortItems(tracks, 'date').map((track) => track.name)).toEqual([
|
|
'Up First',
|
|
'Talk Python',
|
|
]);
|
|
});
|
|
|
|
it('should fall back to the tag date when the filename has no date', () => {
|
|
const tracks = [
|
|
{
|
|
name: 'Newer',
|
|
uri: 'spotify:track:newer',
|
|
release_date: '2001-05-01',
|
|
},
|
|
{
|
|
name: 'Older',
|
|
uri: 'spotify:track:older',
|
|
release_date: '1999-01-01',
|
|
},
|
|
];
|
|
|
|
expect(sortItems(tracks, 'date').map((track) => track.name)).toEqual([
|
|
'Older',
|
|
'Newer',
|
|
]);
|
|
});
|
|
|
|
it('should sort year-only tag dates within their year', () => {
|
|
const tracks = [
|
|
{
|
|
name: 'Year only',
|
|
uri: 'spotify:track:year',
|
|
release_date: '2026',
|
|
},
|
|
{
|
|
name: 'Previous year',
|
|
uri: 'spotify:track:previous',
|
|
release_date: '2025-12-31',
|
|
},
|
|
];
|
|
|
|
expect(sortItems(tracks, 'date').map((track) => track.name)).toEqual([
|
|
'Previous year',
|
|
'Year only',
|
|
]);
|
|
});
|
|
|
|
it('should sort tracks sharing a date by album and track number', () => {
|
|
const tracks = [
|
|
{
|
|
name: 'Second',
|
|
uri: 'file:///media/podcasts/2026-09-22_second.mp3',
|
|
album: { name: 'Podcast' },
|
|
track_number: 2,
|
|
},
|
|
{
|
|
name: 'First',
|
|
uri: 'file:///media/podcasts/2026-09-22_first.mp3',
|
|
album: { name: 'Podcast' },
|
|
track_number: 1,
|
|
},
|
|
];
|
|
|
|
expect(sortItems(tracks, 'date').map((track) => track.name)).toEqual([
|
|
'First',
|
|
'Second',
|
|
]);
|
|
});
|
|
|
|
it('should reverse the order', () => {
|
|
const tracks = [
|
|
{
|
|
name: 'Talk Python',
|
|
uri: 'file:///media/podcasts/563-2026-09-22-EVE-Online.mp3',
|
|
release_date: '2023-10-13',
|
|
},
|
|
{
|
|
name: 'Up First',
|
|
uri: 'file:///media/podcasts/2026-09-01_Up%20First.mp3',
|
|
release_date: '2026-09-01',
|
|
},
|
|
];
|
|
|
|
expect(sortItems(tracks, 'date', true).map((track) => track.name)).toEqual([
|
|
'Talk Python',
|
|
'Up First',
|
|
]);
|
|
});
|
|
});
|
|
});
|