« get me outta code hell

test: generateContributionLinks -> linkContribution - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/test/unit/content
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2023-06-13 12:54:20 -0300
committer(quasar) nebula <qznebula@protonmail.com>2023-06-13 12:54:20 -0300
commitba41071d9b6647b2e12a78de774a55aef5b87876 (patch)
tree434759eb6bb9d45a96995bbefbaef003a3d79990 /test/unit/content
parent2ce5ddd844603b1c3d8f220a12603677104b7545 (diff)
test: generateContributionLinks -> linkContribution
Diffstat (limited to 'test/unit/content')
-rw-r--r--test/unit/content/dependencies/linkContribution.js (renamed from test/unit/content/dependencies/generateContributionLinks.js)81
1 files changed, 47 insertions, 34 deletions
diff --git a/test/unit/content/dependencies/generateContributionLinks.js b/test/unit/content/dependencies/linkContribution.js
index 328adc0b..6f3150f7 100644
--- a/test/unit/content/dependencies/generateContributionLinks.js
+++ b/test/unit/content/dependencies/linkContribution.js
@@ -1,32 +1,31 @@
-// todo: this dependency was replaced with linkContribution, restructure test
-
 import t from 'tap';
 import {testContentFunctions} from '../../../lib/content-function.js';
 
-t.skip('generateContributionLinks (unit)', async t => {
-  const artist1 = {
+t.test('generateContributionLinks (unit)', async t => {
+  const who1 = {
     name: 'Clark Powell',
+    directory: 'clark-powell',
     urls: ['https://soundcloud.com/plazmataz'],
   };
 
-  const artist2 = {
+  const who2 = {
     name: 'Grounder & Scratch',
+    directory: 'the-big-baddies',
     urls: [],
   };
 
-  const artist3 = {
+  const who3 = {
     name: 'Toby Fox',
+    directory: 'toby-fox',
     urls: ['https://tobyfox.bandcamp.com/', 'https://toby.fox/'],
   };
 
-  const contributions = [
-    {who: artist1, what: null},
-    {who: artist2, what: 'Snooping'},
-    {who: artist3, what: 'Arrangement'},
-  ];
+  const what1 = null;
+  const what2 = 'Snooping';
+  const what3 = 'Arrangement';
 
   await testContentFunctions(t, 'generateContributionLinks (unit 1)', async (t, evaluate) => {
-    const config = {
+    const slots = {
       showContribution: true,
       showIcons: true,
     };
@@ -35,14 +34,14 @@ t.skip('generateContributionLinks (unit)', async t => {
       mock: evaluate.mock(mock => ({
         linkArtist: {
           relations: mock.function('linkArtist.relations', () => ({}))
-            .args([undefined, artist1]).next()
-            .args([undefined, artist2]).next()
-            .args([undefined, artist3]),
+            .args([undefined, who1]).next()
+            .args([undefined, who2]).next()
+            .args([undefined, who3]),
 
           data: mock.function('linkArtist.data', () => ({}))
-            .args([artist1]).next()
-            .args([artist2]).next()
-            .args([artist3]),
+            .args([who1]).next()
+            .args([who2]).next()
+            .args([who3]),
 
           // This can be tweaked to return a specific (mocked) template
           // for each artist if we need to test for slots in the future.
@@ -52,9 +51,9 @@ t.skip('generateContributionLinks (unit)', async t => {
 
         linkExternalAsIcon: {
           data: mock.function('linkExternalAsIcon.data', () => ({}))
-            .args([artist1.urls[0]]).next()
-            .args([artist3.urls[0]]).next()
-            .args([artist3.urls[1]]),
+            .args([who1.urls[0]]).next()
+            .args([who3.urls[0]]).next()
+            .args([who3.urls[1]]),
 
           generate: mock.function('linkExternalAsIcon.generate', () => 'icon')
             .repeat(3),
@@ -63,13 +62,18 @@ t.skip('generateContributionLinks (unit)', async t => {
     });
 
     evaluate({
-      name: 'generateContributionLinks',
-      args: [contributions, config],
+      name: 'linkContribution',
+      multiple: [
+        {args: [who1, what1]},
+        {args: [who2, what2]},
+        {args: [who3, what3]},
+      ],
+      slots,
     });
   });
 
   await testContentFunctions(t, 'generateContributionLinks (unit 2)', async (t, evaluate) => {
-    const config = {
+    const slots = {
       showContribution: false,
       showIcons: false,
     };
@@ -78,32 +82,41 @@ t.skip('generateContributionLinks (unit)', async t => {
       mock: evaluate.mock(mock => ({
         linkArtist: {
           relations: mock.function('linkArtist.relations', () => ({}))
-            .args([undefined, artist1]).next()
-            .args([undefined, artist2]).next()
-            .args([undefined, artist3]),
+            .args([undefined, who1]).next()
+            .args([undefined, who2]).next()
+            .args([undefined, who3]),
 
           data: mock.function('linkArtist.data', () => ({}))
-            .args([artist1]).next()
-            .args([artist2]).next()
-            .args([artist3]),
+            .args([who1]).next()
+            .args([who2]).next()
+            .args([who3]),
 
           generate: mock.function(() => 'artist link')
             .repeat(3),
         },
 
+        // Even though icons are hidden, these are still called! The dependency
+        // tree is the same since whether or not the external icon links are
+        // shown is dependent on a slot, which is undefined and arbitrary at
+        // relations/data time (it might change on a whim at generate time).
         linkExternalAsIcon: {
           data: mock.function('linkExternalAsIcon.data', () => ({}))
-            .neverCalled(),
+            .repeat(3),
 
           generate: mock.function('linkExternalAsIcon.generate', () => 'icon')
-            .neverCalled(),
+            .repeat(3),
         },
       })),
     });
 
     evaluate({
-      name: 'generateContributionLinks',
-      args: [contributions, config],
+      name: 'linkContribution',
+      multiple: [
+        {args: [who1, what1]},
+        {args: [who2, what2]},
+        {args: [who3, what3]},
+      ],
+      slots,
     });
   });
 });