@@ -7,6 +7,8 @@ function createTrack(
77 artistName : string ,
88 albumName : string | null = 'Test Album' ,
99 releaseDate : string | null = '2024-01-01' ,
10+ discNumber : number = 1 ,
11+ trackNumber : number = 1 ,
1012 id = Math . random ( ) . toString ( 36 ) . substring ( 7 ) ,
1113) : SpotifyApi . PlaylistTrackObject {
1214 return {
@@ -67,8 +69,8 @@ function createTrack(
6769 external_urls : { spotify : '' } ,
6870 type : 'track' ,
6971 popularity : 50 ,
70- track_number : 1 ,
71- disc_number : 1 ,
72+ track_number : trackNumber ,
73+ disc_number : discNumber ,
7274 preview_url : null ,
7375 available_markets : [ ] ,
7476 is_playable : true ,
@@ -83,6 +85,8 @@ function createTrack(
8385function createMultiArtistTrack (
8486 name : string ,
8587 artistNames : string [ ] ,
88+ discNumber : number = 1 ,
89+ trackNumber : number = 1 ,
8690) : SpotifyApi . PlaylistTrackObject {
8791 return {
8892 added_at : '2023-01-01' ,
@@ -140,8 +144,8 @@ function createMultiArtistTrack(
140144 external_urls : { spotify : '' } ,
141145 type : 'track' ,
142146 popularity : 50 ,
143- track_number : 1 ,
144- disc_number : 1 ,
147+ track_number : trackNumber ,
148+ disc_number : discNumber ,
145149 preview_url : null ,
146150 available_markets : [ ] ,
147151 is_playable : true ,
@@ -338,6 +342,94 @@ describe('sortTracks', () => {
338342 ) . toBe ( '2020-05-15' )
339343 } )
340344 } )
345+
346+ describe ( 'disc_number sorting' , ( ) => {
347+ test ( 'should sort by disc_number ascending' , ( ) => {
348+ const tracks = [
349+ createTrack ( 'Song 1' , 'Artist' , 'Album' , '2024-01-01' , 2 , 1 ) ,
350+ createTrack ( 'Song 2' , 'Artist' , 'Album' , '2024-01-01' , 1 , 1 ) ,
351+ createTrack ( 'Song 3' , 'Artist' , 'Album' , '2024-01-01' , 3 , 1 ) ,
352+ ]
353+
354+ const sortRules : SortRule [ ] = [ [ 'disc_number' , 'asc' ] ]
355+ sortTracks ( tracks , sortRules )
356+
357+ expect (
358+ ( tracks [ 0 ] ?. track as SpotifyApi . TrackObjectFull ) . disc_number ,
359+ ) . toBe ( 1 )
360+ expect (
361+ ( tracks [ 1 ] ?. track as SpotifyApi . TrackObjectFull ) . disc_number ,
362+ ) . toBe ( 2 )
363+ expect (
364+ ( tracks [ 2 ] ?. track as SpotifyApi . TrackObjectFull ) . disc_number ,
365+ ) . toBe ( 3 )
366+ } )
367+
368+ test ( 'should sort by disc_number descending' , ( ) => {
369+ const tracks = [
370+ createTrack ( 'Song 1' , 'Artist' , 'Album' , '2024-01-01' , 1 , 1 ) ,
371+ createTrack ( 'Song 2' , 'Artist' , 'Album' , '2024-01-01' , 2 , 1 ) ,
372+ createTrack ( 'Song 3' , 'Artist' , 'Album' , '2024-01-01' , 3 , 1 ) ,
373+ ]
374+
375+ const sortRules : SortRule [ ] = [ [ 'disc_number' , 'desc' ] ]
376+ sortTracks ( tracks , sortRules )
377+
378+ expect (
379+ ( tracks [ 0 ] ?. track as SpotifyApi . TrackObjectFull ) . disc_number ,
380+ ) . toBe ( 3 )
381+ expect (
382+ ( tracks [ 1 ] ?. track as SpotifyApi . TrackObjectFull ) . disc_number ,
383+ ) . toBe ( 2 )
384+ expect (
385+ ( tracks [ 2 ] ?. track as SpotifyApi . TrackObjectFull ) . disc_number ,
386+ ) . toBe ( 1 )
387+ } )
388+ } )
389+
390+ describe ( 'track_number sorting' , ( ) => {
391+ test ( 'should sort by track_number ascending' , ( ) => {
392+ const tracks = [
393+ createTrack ( 'Song 3' , 'Artist' , 'Album' , '2024-01-01' , 1 , 3 ) ,
394+ createTrack ( 'Song 1' , 'Artist' , 'Album' , '2024-01-01' , 1 , 1 ) ,
395+ createTrack ( 'Song 2' , 'Artist' , 'Album' , '2024-01-01' , 1 , 2 ) ,
396+ ]
397+
398+ const sortRules : SortRule [ ] = [ [ 'track_number' , 'asc' ] ]
399+ sortTracks ( tracks , sortRules )
400+
401+ expect (
402+ ( tracks [ 0 ] ?. track as SpotifyApi . TrackObjectFull ) . track_number ,
403+ ) . toBe ( 1 )
404+ expect (
405+ ( tracks [ 1 ] ?. track as SpotifyApi . TrackObjectFull ) . track_number ,
406+ ) . toBe ( 2 )
407+ expect (
408+ ( tracks [ 2 ] ?. track as SpotifyApi . TrackObjectFull ) . track_number ,
409+ ) . toBe ( 3 )
410+ } )
411+
412+ test ( 'should sort by track_number descending' , ( ) => {
413+ const tracks = [
414+ createTrack ( 'Song 1' , 'Artist' , 'Album' , '2024-01-01' , 1 , 1 ) ,
415+ createTrack ( 'Song 2' , 'Artist' , 'Album' , '2024-01-01' , 1 , 2 ) ,
416+ createTrack ( 'Song 3' , 'Artist' , 'Album' , '2024-01-01' , 1 , 3 ) ,
417+ ]
418+
419+ const sortRules : SortRule [ ] = [ [ 'track_number' , 'desc' ] ]
420+ sortTracks ( tracks , sortRules )
421+
422+ expect (
423+ ( tracks [ 0 ] ?. track as SpotifyApi . TrackObjectFull ) . track_number ,
424+ ) . toBe ( 3 )
425+ expect (
426+ ( tracks [ 1 ] ?. track as SpotifyApi . TrackObjectFull ) . track_number ,
427+ ) . toBe ( 2 )
428+ expect (
429+ ( tracks [ 2 ] ?. track as SpotifyApi . TrackObjectFull ) . track_number ,
430+ ) . toBe ( 1 )
431+ } )
432+ } )
341433 } )
342434
343435 describe ( 'multi-rule sorting' , ( ) => {
0 commit comments