From 2ce923876663fcbdd2c9aaec96692592a066436c Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Fri, 8 Sep 2023 09:08:51 -0300 Subject: test: Album.coverArtDate (unit) The last test is deliberately failing. --- test/unit/data/things/album.js | 61 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 test/unit/data/things/album.js (limited to 'test/unit/data/things/album.js') diff --git a/test/unit/data/things/album.js b/test/unit/data/things/album.js new file mode 100644 index 00000000..358abb3b --- /dev/null +++ b/test/unit/data/things/album.js @@ -0,0 +1,61 @@ +import t from 'tap'; + +import {linkAndBindWikiData} from '#test-lib'; +import thingConstructors from '#things'; + +const { + Album, + Artist, + Thing, + Track, +} = thingConstructors; + +function stubArtistAndContribs() { + const artist = new Artist(); + artist.name = `Test Artist`; + + const contribs = [{who: `Test Artist`, what: null}]; + const badContribs = [{who: `Figment of Your Imagination`, what: null}]; + + return {artist, contribs, badContribs}; +} + +t.test(`Album.coverArtDate`, t => { + t.plan(6); + + const album = new Album(); + const {artist, contribs, badContribs} = stubArtistAndContribs(); + + linkAndBindWikiData({ + albumData: [album], + artistData: [artist], + }); + + t.equal(album.coverArtDate, null, + `Album.coverArtDate #1: defaults to null`); + + album.date = new Date('2012-10-25'); + + t.equal(album.coverArtDate, null, + `Album.coverArtDate #2: is null if coverArtistContribs empty (1/2)`); + + album.coverArtDate = new Date('2011-04-13'); + + t.equal(album.coverArtDate, null, + `Album.coverArtDate #3: is null if coverArtistContribs empty (2/2)`); + + album.coverArtistContribs = contribs; + + t.same(album.coverArtDate, new Date('2011-04-13'), + `Album.coverArtDate #4: is own value`); + + album.coverArtDate = null; + + t.same(album.coverArtDate, new Date(`2012-10-25`), + `Album.coverArtDate #5: inherits album release date`); + + album.coverArtistContribs = badContribs; + + t.equal(album.coverArtDate, null, + `Album.coverArtDate #6: is null if coverArtistContribs resolves empty`); +}); -- cgit 1.3.0-6-gf8a5 From 3344a16a02a2c680d9e9eaf27c81890e17b9b5f4 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Fri, 8 Sep 2023 09:12:42 -0300 Subject: test: Album.coverArtFileExtension (unit) Most of these currently fail. --- test/unit/data/things/album.js | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'test/unit/data/things/album.js') diff --git a/test/unit/data/things/album.js b/test/unit/data/things/album.js index 358abb3b..42f73082 100644 --- a/test/unit/data/things/album.js +++ b/test/unit/data/things/album.js @@ -59,3 +59,39 @@ t.test(`Album.coverArtDate`, t => { t.equal(album.coverArtDate, null, `Album.coverArtDate #6: is null if coverArtistContribs resolves empty`); }); + +t.test(`Album.coverArtFileExtension`, t => { + t.plan(5); + + const album = new Album(); + const {artist, contribs, badContribs} = stubArtistAndContribs(); + + linkAndBindWikiData({ + albumData: [album], + artistData: [artist], + }); + + t.equal(album.coverArtFileExtension, null, + `Album.coverArtFileExtension #1: is null if coverArtistContribs empty (1/2)`); + + album.coverArtFileExtension = 'png'; + + t.equal(album.coverArtFileExtension, null, + `Album.coverArtFileExtension #2: is null if coverArtistContribs empty (2/2)`); + + album.coverArtFileExtension = null; + album.coverArtistContribs = contribs; + + t.equal(album.coverArtFileExtension, 'jpg', + `Album.coverArtFileExtension #3: defaults to jpg`); + + album.coverArtFileExtension = 'png'; + + t.equal(album.coverArtFileExtension, 'png', + `Album.coverArtFileExtension #4: is own value`); + + album.coverArtistContribs = badContribs; + + t.equal(album.coverArtFileExtension, null, + `Album.coverArtFileExtension #5: is null if coverArtistContribs resolves empty`); +}); -- cgit 1.3.0-6-gf8a5 From f82c43f594ee5eadde34c05d45b9ce7a14301a87 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Fri, 8 Sep 2023 11:30:27 -0300 Subject: test: Album.tracks (unit) --- test/unit/data/things/album.js | 50 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) (limited to 'test/unit/data/things/album.js') diff --git a/test/unit/data/things/album.js b/test/unit/data/things/album.js index 42f73082..63d787e5 100644 --- a/test/unit/data/things/album.js +++ b/test/unit/data/things/album.js @@ -6,7 +6,6 @@ import thingConstructors from '#things'; const { Album, Artist, - Thing, Track, } = thingConstructors; @@ -20,6 +19,13 @@ function stubArtistAndContribs() { return {artist, contribs, badContribs}; } +function stubTrack(directory = 'foo') { + const track = new Track(); + track.directory = directory; + + return track; +} + t.test(`Album.coverArtDate`, t => { t.plan(6); @@ -95,3 +101,45 @@ t.test(`Album.coverArtFileExtension`, t => { t.equal(album.coverArtFileExtension, null, `Album.coverArtFileExtension #5: is null if coverArtistContribs resolves empty`); }); + +t.test(`Album.tracks`, t => { + t.plan(4); + + const album = new Album(); + const track1 = stubTrack('track1'); + const track2 = stubTrack('track2'); + const track3 = stubTrack('track3'); + + linkAndBindWikiData({ + albumData: [album], + trackData: [track1, track2, track3], + }); + + t.same(album.tracks, [], + `Album.tracks #1: defaults to empty array`); + + album.trackSections = [ + {tracks: ['track:track1', 'track:track2', 'track:track3']}, + ]; + + t.same(album.tracks, [track1, track2, track3], + `Album.tracks #2: pulls tracks from one track section`); + + album.trackSections = [ + {tracks: ['track:track1']}, + {tracks: ['track:track2', 'track:track3']}, + ]; + + t.same(album.tracks, [track1, track2, track3], + `Album.tracks #3: pulls tracks from multiple track sections`); + + album.trackSections = [ + {tracks: ['track:track1', 'track:does-not-exist']}, + {tracks: ['track:this-one-neither', 'track:track2']}, + {tracks: ['track:effectively-empty-section']}, + {tracks: ['track:track3']}, + ]; + + t.same(album.tracks, [track1, track2, track3], + `Album.tracks #4: filters out references without matches`); +}); -- cgit 1.3.0-6-gf8a5 From f4305e5ab0a64a648f39c647b817a4ba09848f11 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Fri, 8 Sep 2023 12:34:48 -0300 Subject: test: Album.trackSections (unit) --- test/unit/data/things/album.js | 68 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) (limited to 'test/unit/data/things/album.js') diff --git a/test/unit/data/things/album.js b/test/unit/data/things/album.js index 63d787e5..3593074a 100644 --- a/test/unit/data/things/album.js +++ b/test/unit/data/things/album.js @@ -143,3 +143,71 @@ t.test(`Album.tracks`, t => { t.same(album.tracks, [track1, track2, track3], `Album.tracks #4: filters out references without matches`); }); + +t.test(`Album.trackSections`, t => { + t.plan(5); + + const album = new Album(); + const track1 = stubTrack('track1'); + const track2 = stubTrack('track2'); + const track3 = stubTrack('track3'); + const track4 = stubTrack('track4'); + + linkAndBindWikiData({ + albumData: [album], + trackData: [track1, track2, track3, track4], + }); + + album.trackSections = [ + {tracks: ['track:track1', 'track:track2']}, + {tracks: ['track:track3', 'track:track4']}, + ]; + + t.match(album.trackSections, [ + {tracks: [track1, track2]}, + {tracks: [track3, track4]}, + ], `Album.trackSections #1: exposes tracks`); + + t.match(album.trackSections, [ + {tracks: [track1, track2], startIndex: 0}, + {tracks: [track3, track4], startIndex: 2}, + ], `Album.trackSections #2: exposes startIndex`); + + album.color = '#123456'; + + album.trackSections = [ + {tracks: ['track:track1'], color: null}, + {tracks: ['track:track2'], color: '#abcdef'}, + {tracks: ['track:track3'], color: null}, + ]; + + t.match(album.trackSections, [ + {tracks: [track1], color: '#123456'}, + {tracks: [track2], color: '#abcdef'}, + {tracks: [track3], color: '#123456'}, + ], `Album.trackSections #3: exposes color, inherited from album`); + + album.trackSections = [ + {tracks: ['track:track1'], dateOriginallyReleased: null}, + {tracks: ['track:track2'], dateOriginallyReleased: new Date('2009-04-11')}, + {tracks: ['track:track3'], dateOriginallyReleased: null}, + ]; + + t.match(album.trackSections, [ + {tracks: [track1], dateOriginallyReleased: null}, + {tracks: [track2], dateOriginallyReleased: new Date('2009-04-11')}, + {tracks: [track3], dateOriginallyReleased: null}, + ], `Album.trackSections #4: exposes dateOriginallyReleased, if present`); + + album.trackSections = [ + {tracks: ['track:track1'], isDefaultTrackSection: true}, + {tracks: ['track:track2'], isDefaultTrackSection: false}, + {tracks: ['track:track3'], isDefaultTrackSection: null}, + ]; + + t.match(album.trackSections, [ + {tracks: [track1], isDefaultTrackSection: true}, + {tracks: [track2], isDefaultTrackSection: false}, + {tracks: [track3], isDefaultTrackSection: false}, + ], `Album.trackSections #5: exposes isDefaultTrackSection, defaults to false`); +}); -- cgit 1.3.0-6-gf8a5 From 666ce1d6c2e1b93e34222c2b2b999ff32a1c6ca8 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Sat, 9 Sep 2023 18:24:53 -0300 Subject: test: Album.{banner,wallpaper}{FileExtension,Style} Also Album.bannerDimensions. --- test/unit/data/things/album.js | 160 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) (limited to 'test/unit/data/things/album.js') diff --git a/test/unit/data/things/album.js b/test/unit/data/things/album.js index 3593074a..240150b0 100644 --- a/test/unit/data/things/album.js +++ b/test/unit/data/things/album.js @@ -26,6 +26,101 @@ function stubTrack(directory = 'foo') { return track; } +t.test(`Album.bannerDimensions`, t => { + t.plan(4); + + const album = new Album(); + const {artist, contribs, badContribs} = stubArtistAndContribs(); + + linkAndBindWikiData({ + albumData: [album], + artistData: [artist], + }); + + t.equal(album.bannerDimensions, null, + `Album.bannerDimensions #1: defaults to null`); + + album.bannerDimensions = [1200, 275]; + + t.equal(album.bannerDimensions, null, + `Album.bannerDimensions #2: is null if bannerArtistContribs empty`); + + album.bannerArtistContribs = badContribs; + + t.equal(album.bannerDimensions, null, + `Album.bannerDimensions #3: is null if bannerArtistContribs resolves empty`); + + album.bannerArtistContribs = contribs; + + t.same(album.bannerDimensions, [1200, 275], + `Album.bannerDimensions #4: is own value`); +}); + +t.test(`Album.bannerFileExtension`, t => { + t.plan(5); + + const album = new Album(); + const {artist, contribs, badContribs} = stubArtistAndContribs(); + + linkAndBindWikiData({ + albumData: [album], + artistData: [artist], + }); + + t.equal(album.bannerFileExtension, null, + `Album.bannerFileExtension #1: defaults to null`); + + album.bannerFileExtension = 'png'; + + t.equal(album.bannerFileExtension, null, + `Album.bannerFileExtension #2: is null if bannerArtistContribs empty`); + + album.bannerArtistContribs = badContribs; + + t.equal(album.bannerFileExtension, null, + `Album.bannerFileExtension #3: is null if bannerArtistContribs resolves empty`); + + album.bannerArtistContribs = contribs; + + t.equal(album.bannerFileExtension, 'png', + `Album.bannerFileExtension #4: is own value`); + + album.bannerFileExtension = null; + + t.equal(album.bannerFileExtension, 'jpg', + `Album.bannerFileExtension #5: defaults to jpg`); +}); + +t.test(`Album.bannerStyle`, t => { + t.plan(4); + + const album = new Album(); + const {artist, contribs, badContribs} = stubArtistAndContribs(); + + linkAndBindWikiData({ + albumData: [album], + artistData: [artist], + }); + + t.equal(album.bannerStyle, null, + `Album.bannerStyle #1: defaults to null`); + + album.bannerStyle = `opacity: 0.5`; + + t.equal(album.bannerStyle, null, + `Album.bannerStyle #2: is null if bannerArtistContribs empty`); + + album.bannerArtistContribs = badContribs; + + t.equal(album.bannerStyle, null, + `Album.bannerStyle #3: is null if bannerArtistContribs resolves empty`); + + album.bannerArtistContribs = contribs; + + t.equal(album.bannerStyle, `opacity: 0.5`, + `Album.bannerStyle #4: is own value`); +}); + t.test(`Album.coverArtDate`, t => { t.plan(6); @@ -211,3 +306,68 @@ t.test(`Album.trackSections`, t => { {tracks: [track3], isDefaultTrackSection: false}, ], `Album.trackSections #5: exposes isDefaultTrackSection, defaults to false`); }); + +t.test(`Album.wallpaperFileExtension`, t => { + t.plan(5); + + const album = new Album(); + const {artist, contribs, badContribs} = stubArtistAndContribs(); + + linkAndBindWikiData({ + albumData: [album], + artistData: [artist], + }); + + t.equal(album.wallpaperFileExtension, null, + `Album.wallpaperFileExtension #1: defaults to null`); + + album.wallpaperFileExtension = 'png'; + + t.equal(album.wallpaperFileExtension, null, + `Album.wallpaperFileExtension #2: is null if wallpaperArtistContribs empty`); + + album.wallpaperArtistContribs = contribs; + + t.equal(album.wallpaperFileExtension, 'png', + `Album.wallpaperFileExtension #3: is own value`); + + album.wallpaperFileExtension = null; + + t.equal(album.wallpaperFileExtension, 'jpg', + `Album.wallpaperFileExtension #4: defaults to jpg`); + + album.wallpaperArtistContribs = badContribs; + + t.equal(album.wallpaperFileExtension, null, + `Album.wallpaperFileExtension #5: is null if wallpaperArtistContribs resolves empty`); +}); + +t.test(`Album.wallpaperStyle`, t => { + t.plan(4); + + const album = new Album(); + const {artist, contribs, badContribs} = stubArtistAndContribs(); + + linkAndBindWikiData({ + albumData: [album], + artistData: [artist], + }); + + t.equal(album.wallpaperStyle, null, + `Album.wallpaperStyle #1: defaults to null`); + + album.wallpaperStyle = `opacity: 0.5`; + + t.equal(album.wallpaperStyle, null, + `Album.wallpaperStyle #2: is null if wallpaperArtistContribs empty`); + + album.wallpaperArtistContribs = badContribs; + + t.equal(album.wallpaperStyle, null, + `Album.wallpaperStyle #3: is null if wallpaperArtistContribs resolves empty`); + + album.wallpaperArtistContribs = contribs; + + t.equal(album.wallpaperStyle, `opacity: 0.5`, + `Album.wallpaperStyle #4: is own value`); +}); -- cgit 1.3.0-6-gf8a5 From b06c194fc02da22564bcb165db33282f411859a3 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Sat, 9 Sep 2023 18:31:09 -0300 Subject: data, test: filter out empty track sections Also test unmatched track references. --- test/unit/data/things/album.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'test/unit/data/things/album.js') diff --git a/test/unit/data/things/album.js b/test/unit/data/things/album.js index 240150b0..0695fdb6 100644 --- a/test/unit/data/things/album.js +++ b/test/unit/data/things/album.js @@ -240,7 +240,7 @@ t.test(`Album.tracks`, t => { }); t.test(`Album.trackSections`, t => { - t.plan(5); + t.plan(6); const album = new Album(); const track1 = stubTrack('track1'); @@ -305,6 +305,20 @@ t.test(`Album.trackSections`, t => { {tracks: [track2], isDefaultTrackSection: false}, {tracks: [track3], isDefaultTrackSection: false}, ], `Album.trackSections #5: exposes isDefaultTrackSection, defaults to false`); + + album.trackSections = [ + {tracks: ['track:track1', 'track:track2', 'track:snooping'], color: '#112233'}, + {tracks: ['track:track3', 'track:as-usual'], color: '#334455'}, + {tracks: [], color: '#bbbbba'}, + {tracks: ['track:icy', 'track:chilly', 'track:frigid'], color: '#556677'}, + {tracks: ['track:track4'], color: '#778899'}, + ]; + + t.match(album.trackSections, [ + {tracks: [track1, track2], color: '#112233'}, + {tracks: [track3], color: '#334455'}, + {tracks: [track4], color: '#778899'}, + ], `Album.trackSections #6: filters out references without matches & empty sections`); }); t.test(`Album.wallpaperFileExtension`, t => { -- cgit 1.3.0-6-gf8a5 From dfcf911501211bbfc64b8ce6a964b70c6406447f Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Sun, 1 Oct 2023 09:41:57 -0300 Subject: test: test missing tracks property in album.trackSections --- test/unit/data/things/album.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'test/unit/data/things/album.js') diff --git a/test/unit/data/things/album.js b/test/unit/data/things/album.js index 0695fdb6..c5f7fa98 100644 --- a/test/unit/data/things/album.js +++ b/test/unit/data/things/album.js @@ -198,7 +198,7 @@ t.test(`Album.coverArtFileExtension`, t => { }); t.test(`Album.tracks`, t => { - t.plan(4); + t.plan(5); const album = new Album(); const track1 = stubTrack('track1'); @@ -237,6 +237,18 @@ t.test(`Album.tracks`, t => { t.same(album.tracks, [track1, track2, track3], `Album.tracks #4: filters out references without matches`); + + album.trackSections = [ + {tracks: ['track:track1']}, + {}, + {tracks: ['track:track2']}, + {}, + {}, + {tracks: ['track:track3']}, + ]; + + t.same(album.tracks, [track1, track2, track3], + `Album.tracks #5: skips missing tracks property`); }); t.test(`Album.trackSections`, t => { -- cgit 1.3.0-6-gf8a5 From a60c8906ed7580a21527c9f96cd0e6e277978263 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Sun, 1 Oct 2023 17:58:56 -0300 Subject: data, test: expose track section names --- test/unit/data/things/album.js | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'test/unit/data/things/album.js') diff --git a/test/unit/data/things/album.js b/test/unit/data/things/album.js index c5f7fa98..76a2b90f 100644 --- a/test/unit/data/things/album.js +++ b/test/unit/data/things/album.js @@ -252,7 +252,7 @@ t.test(`Album.tracks`, t => { }); t.test(`Album.trackSections`, t => { - t.plan(6); + t.plan(7); const album = new Album(); const track1 = stubTrack('track1'); @@ -280,6 +280,18 @@ t.test(`Album.trackSections`, t => { {tracks: [track3, track4], startIndex: 2}, ], `Album.trackSections #2: exposes startIndex`); + album.trackSections = [ + {name: 'First section', tracks: ['track:track1']}, + {name: 'Second section', tracks: ['track:track2']}, + {tracks: ['track:track3']}, + ]; + + t.match(album.trackSections, [ + {name: 'First section', tracks: [track1]}, + {name: 'Second section', tracks: [track2]}, + {name: 'Unnamed Track Section', tracks: [track3]}, + ], `Album.trackSections #3: exposes name, with fallback value`); + album.color = '#123456'; album.trackSections = [ @@ -292,7 +304,7 @@ t.test(`Album.trackSections`, t => { {tracks: [track1], color: '#123456'}, {tracks: [track2], color: '#abcdef'}, {tracks: [track3], color: '#123456'}, - ], `Album.trackSections #3: exposes color, inherited from album`); + ], `Album.trackSections #4: exposes color, inherited from album`); album.trackSections = [ {tracks: ['track:track1'], dateOriginallyReleased: null}, @@ -304,7 +316,7 @@ t.test(`Album.trackSections`, t => { {tracks: [track1], dateOriginallyReleased: null}, {tracks: [track2], dateOriginallyReleased: new Date('2009-04-11')}, {tracks: [track3], dateOriginallyReleased: null}, - ], `Album.trackSections #4: exposes dateOriginallyReleased, if present`); + ], `Album.trackSections #5: exposes dateOriginallyReleased, if present`); album.trackSections = [ {tracks: ['track:track1'], isDefaultTrackSection: true}, @@ -316,7 +328,7 @@ t.test(`Album.trackSections`, t => { {tracks: [track1], isDefaultTrackSection: true}, {tracks: [track2], isDefaultTrackSection: false}, {tracks: [track3], isDefaultTrackSection: false}, - ], `Album.trackSections #5: exposes isDefaultTrackSection, defaults to false`); + ], `Album.trackSections #6: exposes isDefaultTrackSection, defaults to false`); album.trackSections = [ {tracks: ['track:track1', 'track:track2', 'track:snooping'], color: '#112233'}, @@ -330,7 +342,7 @@ t.test(`Album.trackSections`, t => { {tracks: [track1, track2], color: '#112233'}, {tracks: [track3], color: '#334455'}, {tracks: [track4], color: '#778899'}, - ], `Album.trackSections #6: filters out references without matches & empty sections`); + ], `Album.trackSections #7: filters out references without matches & empty sections`); }); t.test(`Album.wallpaperFileExtension`, t => { -- cgit 1.3.0-6-gf8a5