« 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/composite
diff options
context:
space:
mode:
Diffstat (limited to 'test/unit/data/composite')
-rw-r--r--test/unit/data/composite/data/withUniqueItemsOnly.js84
-rw-r--r--test/unit/data/composite/wiki-data/withParsedCommentaryEntries.js16
2 files changed, 92 insertions, 8 deletions
diff --git a/test/unit/data/composite/data/withUniqueItemsOnly.js b/test/unit/data/composite/data/withUniqueItemsOnly.js
new file mode 100644
index 00000000..965b14b5
--- /dev/null
+++ b/test/unit/data/composite/data/withUniqueItemsOnly.js
@@ -0,0 +1,84 @@
+import t from 'tap';
+
+import {compositeFrom, input} from '#composite';
+import {exposeDependency} from '#composite/control-flow';
+import {withUniqueItemsOnly} from '#composite/data';
+
+t.test(`withUniqueItemsOnly: basic behavior`, t => {
+  t.plan(3);
+
+  const composite = compositeFrom({
+    compose: false,
+
+    steps: [
+      withUniqueItemsOnly({
+        list: 'list',
+      }),
+
+      exposeDependency({dependency: '#list'}),
+    ],
+  });
+
+  t.match(composite, {
+    expose: {
+      dependencies: ['list'],
+    },
+  });
+
+  t.same(composite.expose.compute({
+    list: ['apple', 'banana', 'banana', 'banana', 'apple', 'watermelon'],
+  }), ['apple', 'banana', 'watermelon']);
+
+  t.same(composite.expose.compute({
+    list: [],
+  }), []);
+});
+
+t.test(`withUniqueItemsOnly: output shapes & values`, t => {
+  t.plan(2 * 3 ** 1);
+
+  const dependencies = {
+    ['list_dependency']:
+      [1, 1, 2, 3, 3, 4, 'foo', false, false, 4],
+    [input('list_neither')]:
+      [8, 8, 7, 6, 6, 5, 'bar', true, true, 5],
+  };
+
+  const mapLevel1 = [
+    ['list_dependency', {
+      '#list_dependency': [1, 2, 3, 4, 'foo', false],
+    }],
+    [input.value([-1, -1, 'interesting', 'very', 'interesting']), {
+      '#uniqueItems': [-1, 'interesting', 'very'],
+    }],
+    [input('list_neither'), {
+      '#uniqueItems': [8, 7, 6, 5, 'bar', true],
+    }],
+  ];
+
+  for (const [listInput, outputDict] of mapLevel1) {
+    const step = withUniqueItemsOnly({
+      list: listInput,
+    });
+
+    quickCheckOutputs(step, outputDict);
+  }
+
+  function quickCheckOutputs(step, outputDict) {
+    t.same(
+      Object.keys(step.toDescription().outputs),
+      Object.keys(outputDict));
+
+    const composite = compositeFrom({
+      compose: false,
+      steps: [step, {
+        dependencies: Object.keys(outputDict),
+        compute: dependencies => dependencies,
+      }],
+    });
+
+    t.same(
+      composite.expose.compute(dependencies),
+      outputDict);
+  }
+});
diff --git a/test/unit/data/composite/wiki-data/withParsedCommentaryEntries.js b/test/unit/data/composite/wiki-data/withParsedCommentaryEntries.js
index 50570de6..babe4fae 100644
--- a/test/unit/data/composite/wiki-data/withParsedCommentaryEntries.js
+++ b/test/unit/data/composite/wiki-data/withParsedCommentaryEntries.js
@@ -41,7 +41,7 @@ t.test(`withParsedCommentaryEntries: basic behavior`, t => {
     },
   });
 
-  t.match(composite.expose.compute({
+  t.same(composite.expose.compute({
     artistData,
     from:
       `<i>Mobius Trip:</i>\n` +
@@ -49,7 +49,7 @@ t.test(`withParsedCommentaryEntries: basic behavior`, t => {
       `Very cool.\n`,
   }), [
     {
-      artist: artist1,
+      artists: [artist1],
       artistDisplayText: null,
       annotation: null,
       date: null,
@@ -57,7 +57,7 @@ t.test(`withParsedCommentaryEntries: basic behavior`, t => {
     },
   ]);
 
-  t.match(composite.expose.compute({
+  t.same(composite.expose.compute({
     artistData,
     from:
       `<i>Mobius Trip|Moo-bius Trip:</i> (music, art, 12 January 2015)\n` +
@@ -67,32 +67,32 @@ t.test(`withParsedCommentaryEntries: basic behavior`, t => {
       `Second commentary entry. Yes. So cool.\n` +
       `<i>Mystery Artist:</i> (pingas, August 25, 2023)\n` +
       `Oh no.. Oh dear...\n` +
-      `<i>Mobius Trip:</i>\n` +
+      `<i>Mobius Trip, Hadron Kaleido:</i>\n` +
       `And back around we go.`,
   }), [
     {
-      artist: artist1,
+      artists: [artist1],
       artistDisplayText: `Moo-bius Trip`,
       annotation: `music, art`,
       date: new Date('12 January 2015'),
       body: `First commentary entry.\nVery cool.`,
     },
     {
-      artist: artist2,
+      artists: [artist2],
       artistDisplayText: `<b>[[artist:hadron-kaleido|The Ol' Hadron]]</b>`,
       annotation: `moral support`,
       date: new Date('4 April 2022'),
       body: `Second commentary entry. Yes. So cool.`,
     },
     {
-      artist: null,
+      artists: [],
       artistDisplayText: null,
       annotation: `pingas`,
       date: new Date('25 August 2023'),
       body: `Oh no.. Oh dear...`,
     },
     {
-      artist: artist1,
+      artists: [artist1, artist2],
       artistDisplayText: null,
       annotation: null,
       date: null,