« get me outta code hell

coverArtDate and Thing unit tests - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2022-02-13 16:30:49 -0400
committer(quasar) nebula <qznebula@protonmail.com>2022-02-13 16:30:49 -0400
commit5bb1f8573990e5c5c92f416f7fda9811547c0580 (patch)
tree96c48a253bc5af280dc4e86cdf8cfb42e9505903 /src
parentcd5c1775883712ed52a135d8d24bfd2db698a832 (diff)
coverArtDate and Thing unit tests
Diffstat (limited to 'src')
-rw-r--r--src/data/things.js27
-rwxr-xr-xsrc/upd8.js10
2 files changed, 32 insertions, 5 deletions
diff --git a/src/data/things.js b/src/data/things.js
index b5d6f10..e061d58 100644
--- a/src/data/things.js
+++ b/src/data/things.js
@@ -252,6 +252,9 @@ Thing.common = {
     })
 };
 
+// Get a reference to a thing (e.g. track:showtime-piano-refrain), using its
+// constructor's [Thing.referenceType] as the prefix. This will throw an error
+// if the thing's directory isn't yet provided/computable.
 Thing.getReference = function(thing) {
     if (!thing.constructor[Thing.referenceType])
         throw TypeError(`Passed Thing is ${thing.constructor.name}, which provides no [Thing.referenceType]`);
@@ -398,7 +401,6 @@ Track.propertyDescriptors = {
 
     urls: Thing.common.urls(),
     dateFirstReleased: Thing.common.simpleDate(),
-    coverArtDate: Thing.common.simpleDate(),
 
     hasCoverArt: Thing.common.flag(true),
     hasURLs: Thing.common.flag(true),
@@ -451,9 +453,32 @@ Track.propertyDescriptors = {
         }
     },
 
+    coverArtDate: {
+        flags: {update: true, expose: true},
+
+        update: {validate: isDate},
+
+        expose: {
+            dependencies: ['albumData', 'dateFirstReleased'],
+            transform: (coverArtDate, { albumData, dateFirstReleased, [Track.instance]: track }) => (
+                coverArtDate ??
+                dateFirstReleased ??
+                albumData?.find(album => album.tracks.includes(track))?.trackArtDate ??
+                albumData?.find(album => album.tracks.includes(track))?.date ??
+                null
+            )
+        }
+    },
+
     // Previously known as: (track).artists
     artistContribs: Thing.common.dynamicContribs('artistContribsByRef'),
 
+    // Previously known as: (track).contributors
+    contributorContribs: Thing.common.dynamicContribs('contributorContribsByRef'),
+
+    // Previously known as: (track).coverArtists
+    coverArtistContribs: Thing.common.dynamicContribs('coverArtistContribsByRef'),
+
     artTags: {
         flags: {expose: true},
 
diff --git a/src/upd8.js b/src/upd8.js
index de79a0f..d2f1b08 100755
--- a/src/upd8.js
+++ b/src/upd8.js
@@ -2780,10 +2780,12 @@ async function main() {
     console.log(WD.trackData[0].name, WD.trackData[0].album.name);
     console.log(WD.albumData[0].name, WD.albumData[0].tracks[0].name);
     console.log(WD.trackData[0].artistContribs[0].who.name);
-    console.log(
-        (WD.albumData
-            .find(album => album.name === 'Alternia')
-            .artistContribs[0].who.name));
+    const demoAlbum1 = WD.albumData.find(album => album.name === 'Alternia');
+    const demoAlbum2 = WD.albumData.find(album => album.name === 'Homestuck Vol. 5');
+    console.log(demoAlbum1.artistContribs[0]?.who.name);
+    console.log(demoAlbum2.tracks[0].name,
+        demoAlbum2.tracks[0].date,
+        demoAlbum2.tracks[0].coverArtDate);
 
     return;