diff options
Diffstat (limited to 'test/unit/data/things/album.js')
-rw-r--r-- | test/unit/data/things/album.js | 321 |
1 files changed, 125 insertions, 196 deletions
diff --git a/test/unit/data/things/album.js b/test/unit/data/things/album.js index 06265b09..a64488f7 100644 --- a/test/unit/data/things/album.js +++ b/test/unit/data/things/album.js @@ -1,62 +1,27 @@ import t from 'tap'; -import {linkAndBindWikiData} from '#test-lib'; import thingConstructors from '#things'; -const { - Album, - ArtTag, - Artist, - Track, - TrackSection, -} = thingConstructors; - -function stubArtTag(tagName = `Test Art Tag`) { - const tag = new ArtTag(); - tag.name = tagName; - - return tag; -} - -function stubArtistAndContribs() { - const artist = new Artist(); - artist.name = `Test Artist`; - - const contribs = [{artist: `Test Artist`, annotation: null}]; - const badContribs = [{artist: `Figment of Your Imagination`, annotation: null}]; - - return {artist, contribs, badContribs}; -} - -function stubTrack(directory = 'foo') { - const track = new Track(); - track.directory = directory; - - return track; -} - -function stubTrackSection(album, tracks, directory = 'baz') { - const trackSection = new TrackSection(); - trackSection.unqualifiedDirectory = directory; - trackSection.tracks = tracks.map(t => Thing.getReference(t)); - trackSection.ownTrackData = tracks; - trackSection.ownAlbumData = [album]; - return trackSection; -} +import { + linkAndBindWikiData, + stubArtistAndContribs, + stubThing, + stubWikiData, +} from '#test-lib'; t.test(`Album.artTags`, t => { + const {Album, ArtTag} = thingConstructors; + t.plan(3); - const {artist, contribs} = stubArtistAndContribs(); - const album = new Album(); - const tag1 = stubArtTag(`Tag 1`); - const tag2 = stubArtTag(`Tag 2`); + const wikiData = stubWikiData(); - const {XXX_decacheWikiData} = linkAndBindWikiData({ - albumData: [album], - artistData: [artist], - artTagData: [tag1, tag2], - }); + const {contribs} = stubArtistAndContribs(wikiData); + const album = stubThing(wikiData, Album); + const tag1 = stubThing(wikiData, ArtTag, {name: `Tag 1`}); + const tag2 = stubThing(wikiData, ArtTag, {name: `Tag 2`}); + + linkAndBindWikiData(wikiData); t.same(album.artTags, [], `artTags #1: defaults to empty array`); @@ -73,15 +38,16 @@ t.test(`Album.artTags`, t => { }); t.test(`Album.bannerDimensions`, t => { + const {Album} = thingConstructors; + t.plan(4); - const album = new Album(); - const {artist, contribs, badContribs} = stubArtistAndContribs(); + const wikiData = stubWikiData(); - linkAndBindWikiData({ - albumData: [album], - artistData: [artist], - }); + const album = stubThing(wikiData, Album); + const {contribs, badContribs} = stubArtistAndContribs(wikiData); + + linkAndBindWikiData(wikiData); t.equal(album.bannerDimensions, null, `Album.bannerDimensions #1: defaults to null`); @@ -103,15 +69,16 @@ t.test(`Album.bannerDimensions`, t => { }); t.test(`Album.bannerFileExtension`, t => { + const {Album} = thingConstructors; + t.plan(5); - const album = new Album(); - const {artist, contribs, badContribs} = stubArtistAndContribs(); + const wikiData = stubWikiData(); + + const album = stubThing(wikiData, Album); + const {contribs, badContribs} = stubArtistAndContribs(wikiData); - linkAndBindWikiData({ - albumData: [album], - artistData: [artist], - }); + linkAndBindWikiData(wikiData); t.equal(album.bannerFileExtension, null, `Album.bannerFileExtension #1: defaults to null`); @@ -138,15 +105,16 @@ t.test(`Album.bannerFileExtension`, t => { }); t.test(`Album.bannerStyle`, t => { + const {Album} = thingConstructors; + t.plan(4); - const album = new Album(); - const {artist, contribs, badContribs} = stubArtistAndContribs(); + const wikiData = stubWikiData(); + + const album = stubThing(wikiData, Album); + const {contribs, badContribs} = stubArtistAndContribs(wikiData); - linkAndBindWikiData({ - albumData: [album], - artistData: [artist], - }); + linkAndBindWikiData(wikiData); t.equal(album.bannerStyle, null, `Album.bannerStyle #1: defaults to null`); @@ -168,15 +136,16 @@ t.test(`Album.bannerStyle`, t => { }); t.test(`Album.coverArtDate`, t => { + const {Album} = thingConstructors; + t.plan(6); - const album = new Album(); - const {artist, contribs, badContribs} = stubArtistAndContribs(); + const wikiData = stubWikiData(); + + const album = stubThing(wikiData, Album); + const {contribs, badContribs} = stubArtistAndContribs(wikiData); - linkAndBindWikiData({ - albumData: [album], - artistData: [artist], - }); + linkAndBindWikiData(wikiData); t.equal(album.coverArtDate, null, `Album.coverArtDate #1: defaults to null`); @@ -208,15 +177,16 @@ t.test(`Album.coverArtDate`, t => { }); t.test(`Album.coverArtFileExtension`, t => { + const {Album} = thingConstructors; + t.plan(5); - const album = new Album(); - const {artist, contribs, badContribs} = stubArtistAndContribs(); + const wikiData = stubWikiData(); - linkAndBindWikiData({ - albumData: [album], - artistData: [artist], - }); + const album = stubThing(wikiData, Album); + const {contribs, badContribs} = stubArtistAndContribs(wikiData); + + linkAndBindWikiData(wikiData); t.equal(album.coverArtFileExtension, null, `Album.coverArtFileExtension #1: is null if coverArtistContribs empty (1/2)`); @@ -244,136 +214,105 @@ t.test(`Album.coverArtFileExtension`, t => { }); t.test(`Album.tracks`, t => { - t.plan(5); + const {Album, Track, TrackSection} = thingConstructors; - const album = new Album(); + t.plan(4); + + let wikiData = stubWikiData(); + + const album = stubThing(wikiData, Album); album.directory = 'foo'; - const track1 = stubTrack('track1'); - const track2 = stubTrack('track2'); - const track3 = stubTrack('track3'); + const track1 = stubThing(wikiData, Track, {directory: 'track1'}); + const track2 = stubThing(wikiData, Track, {directory: 'track2'}); + const track3 = stubThing(wikiData, Track, {directory: 'track3'}); const tracks = [track1, track2, track3]; - const section1 = stubTrackSection(album, [], 'section1'); - const section2 = stubTrackSection(album, [], 'section2'); - const section3 = stubTrackSection(album, [], 'section3'); - const section4 = stubTrackSection(album, [], 'section4'); - const section5 = stubTrackSection(album, [], 'section5'); - const section6 = stubTrackSection(album, [], 'section6'); + const section1 = stubThing(wikiData, TrackSection, {unqualifiedDirectory: 'section1'}); + const section2 = stubThing(wikiData, TrackSection, {unqualifiedDirectory: 'section2'}); + const section3 = stubThing(wikiData, TrackSection, {unqualifiedDirectory: 'section3'}); + const section4 = stubThing(wikiData, TrackSection, {unqualifiedDirectory: 'section4'}); + const section5 = stubThing(wikiData, TrackSection, {unqualifiedDirectory: 'section5'}); + const section6 = stubThing(wikiData, TrackSection, {unqualifiedDirectory: 'section6'}); const sections = [section1, section2, section3, section4, section5, section6]; - const section1_ref = `unqualified-track-section:section1`; - const section2_ref = `unqualified-track-section:section2`; - const section3_ref = `unqualified-track-section:section3`; - const section4_ref = `unqualified-track-section:section4`; - const section5_ref = `unqualified-track-section:section5`; - const section6_ref = `unqualified-track-section:section6`; + wikiData = null; for (const track of tracks) { track.albumData = [album]; } for (const section of sections) { - section.ownAlbumData = [album]; + section.albumData = [album]; } t.same(album.tracks, [], `Album.tracks #1: defaults to empty array`); - section1.tracks = ['track:track1', 'track:track2', 'track:track3']; - section1.ownTrackData = [track1, track2, track3]; + section1.tracks = [track1, track2, track3]; - album.trackSections = [section1_ref]; - album.ownTrackSectionData = [section1]; + album.trackSections = [section1]; t.same(album.tracks, [track1, track2, track3], `Album.tracks #2: pulls tracks from one track section`); - section1.tracks = ['track:track1']; - section2.tracks = ['track:track2', 'track:track3']; + section1.tracks = [track1]; + section2.tracks = [track2, track3]; - section1.ownTrackData = [track1]; - section2.ownTrackData = [track2, track3]; - - album.trackSections = [section1_ref, section2_ref]; - album.ownTrackSectionData = [section1, section2]; + album.trackSections = [section1, section2]; t.same(album.tracks, [track1, track2, track3], `Album.tracks #3: pulls tracks from multiple track sections`); - section1.tracks = ['track:track1', 'track:does-not-exist']; - section2.tracks = ['track:this-one-neither', 'track:track2']; - section3.tracks = ['track:effectively-empty-section']; - section4.tracks = ['track:track3']; - - section1.ownTrackData = [track1]; - section2.ownTrackData = [track2]; - section3.ownTrackData = []; - section4.ownTrackData = [track3]; - - album.trackSections = [section1_ref, section2_ref, section3_ref, section4_ref]; - album.ownTrackSectionData = [section1, section2, section3, section4]; - - t.same(album.tracks, [track1, track2, track3], - `Album.tracks #4: filters out references without matches`); - - section1.tracks = ['track:track1']; + section1.tracks = [track1]; section2.tracks = []; - section3.tracks = ['track:track2']; + section3.tracks = [track2]; section4.tracks = []; section5.tracks = []; - section6.tracks = ['track:track3']; + section6.tracks = [track3]; - section1.ownTrackData = [track1]; - section2.ownTrackData = []; - section3.ownTrackData = [track2]; - section4.ownTrackData = []; - section5.ownTrackData = []; - section6.ownTrackData = [track3]; - - album.trackSections = [section1_ref, section2_ref, section3_ref, section4_ref, section5_ref, section6_ref]; - album.ownTrackSectionData = [section1, section2, section3, section4, section5, section6]; + album.trackSections = [section1, section2, section3, section4, section5, section6]; t.same(album.tracks, [track1, track2, track3], - `Album.tracks #5: skips empty track sections`); + `Album.tracks #4: skips empty track sections`); }); t.test(`Album.trackSections`, t => { + const {Album, Track, TrackSection} = thingConstructors; + t.plan(7); - const album = new Album(); + let wikiData = stubWikiData(); - const track1 = stubTrack('track1'); - const track2 = stubTrack('track2'); - const track3 = stubTrack('track3'); - const track4 = stubTrack('track4'); + const album = stubThing(wikiData, Album); + + const track1 = stubThing(wikiData, Track, {directory: 'track1'}); + const track2 = stubThing(wikiData, Track, {directory: 'track2'}); + const track3 = stubThing(wikiData, Track, {directory: 'track3'}); + const track4 = stubThing(wikiData, Track, {directory: 'track4'}); const tracks = [track1, track2, track3, track4]; - const section1 = stubTrackSection(album, [], 'section1'); - const section2 = stubTrackSection(album, [], 'section2'); - const section3 = stubTrackSection(album, [], 'section3'); - const section4 = stubTrackSection(album, [], 'section4'); - const section5 = stubTrackSection(album, [], 'section5'); + const section1 = stubThing(wikiData, TrackSection, {unqualifiedDirectory: 'section1'}); + const section2 = stubThing(wikiData, TrackSection, {unqualifiedDirectory: 'section2'}); + const section3 = stubThing(wikiData, TrackSection, {unqualifiedDirectory: 'section3'}); + const section4 = stubThing(wikiData, TrackSection, {unqualifiedDirectory: 'section4'}); + const section5 = stubThing(wikiData, TrackSection, {unqualifiedDirectory: 'section5'}); const sections = [section1, section2, section3, section4, section5]; - const section1_ref = `unqualified-track-section:section1`; - const section2_ref = `unqualified-track-section:section2`; - const section3_ref = `unqualified-track-section:section3`; - const section4_ref = `unqualified-track-section:section4`; - const section5_ref = `unqualified-track-section:section5`; + wikiData = null; for (const track of tracks) { track.albumData = [album]; } - section1.tracks = ['track:track1', 'track:track2']; - section2.tracks = ['track:track3', 'track:track4']; + for (const section of sections) { + section.albumData = [album]; + } - section1.ownTrackData = [track1, track2]; - section2.ownTrackData = [track3, track4]; + section1.tracks = [track1, track2]; + section2.tracks = [track3, track4]; - album.trackSections = [section1_ref, section2_ref]; - album.ownTrackSectionData = [section1, section2]; + album.trackSections = [section1, section2]; t.match(album.trackSections, [ {tracks: [track1, track2]}, @@ -385,19 +324,14 @@ t.test(`Album.trackSections`, t => { {tracks: [track3, track4], startIndex: 2}, ], `Album.trackSections #2: exposes startIndex`); - section1.tracks = ['track:track1']; - section2.tracks = ['track:track2']; - section3.tracks = ['track:track3']; - - section1.ownTrackData = [track1]; - section2.ownTrackData = [track2]; - section3.ownTrackData = [track3]; + section1.tracks = [track1]; + section2.tracks = [track2]; + section3.tracks = [track3]; section1.name = 'First section'; section2.name = 'Second section'; - album.trackSections = [section1_ref, section2_ref, section3_ref]; - album.ownTrackSectionData = [section1, section2, section3]; + album.trackSections = [section1, section2, section3]; t.match(album.trackSections, [ {name: 'First section', tracks: [track1]}, @@ -411,7 +345,7 @@ t.test(`Album.trackSections`, t => { // XXX_decacheWikiData album.trackSections = []; - album.trackSections = [section1_ref, section2_ref, section3_ref]; + album.trackSections = [section1, section2, section3]; t.match(album.trackSections, [ {tracks: [track1], color: '#123456'}, @@ -423,7 +357,7 @@ t.test(`Album.trackSections`, t => { // XXX_decacheWikiData album.trackSections = []; - album.trackSections = [section1_ref, section2_ref, section3_ref]; + album.trackSections = [section1, section2, section3]; t.match(album.trackSections, [ {tracks: [track1], dateOriginallyReleased: null}, @@ -436,7 +370,7 @@ t.test(`Album.trackSections`, t => { // XXX_decacheWikiData album.trackSections = []; - album.trackSections = [section1_ref, section2_ref, section3_ref]; + album.trackSections = [section1, section2, section3]; t.match(album.trackSections, [ {tracks: [track1], isDefaultTrackSection: true}, @@ -444,17 +378,11 @@ t.test(`Album.trackSections`, t => { {tracks: [track3], isDefaultTrackSection: false}, ], `Album.trackSections #6: exposes isDefaultTrackSection, defaults to false`); - section1.tracks = ['track:track1', 'track:track2', 'track:snooping']; - section2.tracks = ['track:track3', 'track:as-usual']; + section1.tracks = [track1, track2]; + section2.tracks = [track3]; section3.tracks = []; - section4.tracks = ['track:icy', 'track:chilly', 'track:frigid']; - section5.tracks = ['track:track4']; - - section1.ownTrackData = [track1, track2]; - section2.ownTrackData = [track3]; - section3.ownTrackData = []; - section4.ownTrackData = []; - section5.ownTrackData = [track4]; + section4.tracks = []; + section5.tracks = [track4]; section1.color = '#112233'; section2.color = '#334455'; @@ -462,8 +390,7 @@ t.test(`Album.trackSections`, t => { section4.color = '#556677'; section5.color = '#778899'; - album.trackSections = [section1_ref, section2_ref, section3_ref, section4_ref, section5_ref]; - album.ownTrackSectionData = [section1, section2, section3, section4, section5]; + album.trackSections = [section1, section2, section3, section4, section5]; t.match(album.trackSections, [ {tracks: [track1, track2], color: '#112233'}, @@ -471,19 +398,20 @@ t.test(`Album.trackSections`, t => { {tracks: [], color: '#bbbbba'}, {tracks: [], color: '#556677'}, {tracks: [track4], color: '#778899'}, - ], `Album.trackSections #7: filters out references without matches, keeps empty sections`); + ], `Album.trackSections #7: keeps empty sections`); }); t.test(`Album.wallpaperFileExtension`, t => { + const {Album} = thingConstructors; + t.plan(5); - const album = new Album(); - const {artist, contribs, badContribs} = stubArtistAndContribs(); + const wikiData = stubWikiData(); + + const album = stubThing(wikiData, Album); + const {contribs, badContribs} = stubArtistAndContribs(wikiData); - linkAndBindWikiData({ - albumData: [album], - artistData: [artist], - }); + linkAndBindWikiData(wikiData); t.equal(album.wallpaperFileExtension, null, `Album.wallpaperFileExtension #1: defaults to null`); @@ -510,15 +438,16 @@ t.test(`Album.wallpaperFileExtension`, t => { }); t.test(`Album.wallpaperStyle`, t => { + const {Album} = thingConstructors; + t.plan(4); - const album = new Album(); - const {artist, contribs, badContribs} = stubArtistAndContribs(); + const wikiData = stubWikiData(); + + const album = stubThing(wikiData, Album); + const {contribs, badContribs} = stubArtistAndContribs(wikiData); - linkAndBindWikiData({ - albumData: [album], - artistData: [artist], - }); + linkAndBindWikiData(wikiData); t.equal(album.wallpaperStyle, null, `Album.wallpaperStyle #1: defaults to null`); |