« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/test/unit/data/things/album.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/unit/data/things/album.js')
-rw-r--r--test/unit/data/things/album.js321
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`);