« get me outta code hell

test: generateAlbumTrackList (snapshot, unit) - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2023-06-24 17:41:24 -0300
committer(quasar) nebula <qznebula@protonmail.com>2023-06-24 17:41:24 -0300
commit324b74cef03ca5f21e938ed3bb9a43e564b377fa (patch)
tree9746b8d31739a379dd7a49effb06e09c3b9bd8a5
parent47d504251c084e601b946866e572519b2612b13c (diff)
test: generateAlbumTrackList (snapshot, unit)
-rw-r--r--tap-snapshots/test/snapshot/generateAlbumTrackList.js.test.cjs30
-rw-r--r--test/snapshot/generateAlbumTrackList.js41
-rw-r--r--test/unit/content/dependencies/generateAlbumTrackList.js40
3 files changed, 111 insertions, 0 deletions
diff --git a/tap-snapshots/test/snapshot/generateAlbumTrackList.js.test.cjs b/tap-snapshots/test/snapshot/generateAlbumTrackList.js.test.cjs
new file mode 100644
index 00000000..14316988
--- /dev/null
+++ b/tap-snapshots/test/snapshot/generateAlbumTrackList.js.test.cjs
@@ -0,0 +1,30 @@
+/* IMPORTANT
+ * This snapshot file is auto-generated, but designed for humans.
+ * It should be checked into source control and tracked carefully.
+ * Re-generate by setting TAP_SNAPSHOT=1 and running tests.
+ * Make sure to inspect the output below.  Do not ignore changes!
+ */
+'use strict'
+exports[`test/snapshot/generateAlbumTrackList.js TAP generateAlbumTrackList (snapshot) > basic behavior, default track section 1`] = `
+<ul>
+    <li>Item: Track 1</li>
+    <li>Item: Track 2</li>
+    <li>Item: Track 3</li>
+    <li>Item: Track 4</li>
+</ul>
+`
+
+exports[`test/snapshot/generateAlbumTrackList.js TAP generateAlbumTrackList (snapshot) > basic behavior, with track sections 1`] = `
+<dl class="album-group-list">
+    <dt class="content-heading" tabindex="0">First section (~1:30):</dt>
+    <dd>
+        <ul>
+            <li>Item: Track 1</li>
+            <li>Item: Track 2</li>
+            <li>Item: Track 3</li>
+        </ul>
+    </dd>
+    <dt class="content-heading" tabindex="0">Second section (0:05):</dt>
+    <dd><ul><li>Item: Track 4</li></ul></dd>
+</dl>
+`
diff --git a/test/snapshot/generateAlbumTrackList.js b/test/snapshot/generateAlbumTrackList.js
new file mode 100644
index 00000000..055f189e
--- /dev/null
+++ b/test/snapshot/generateAlbumTrackList.js
@@ -0,0 +1,41 @@
+import t from 'tap';
+import {testContentFunctions} from '../lib/content-function.js';
+
+testContentFunctions(t, 'generateAlbumTrackList (snapshot)', async (t, evaluate) => {
+  await evaluate.load({
+    mock: {
+      generateAlbumTrackListItem: {
+        extraDependencies: ['html'],
+        data: track => track.name,
+        generate: (name, {html}) =>
+          html.tag('li', `Item: ${name}`),
+      },
+    },
+  });
+
+  const tracks = [
+    {name: 'Track 1', duration: 20},
+    {name: 'Track 2', duration: 30},
+    {name: 'Track 3', duration: 40},
+    {name: 'Track 4', duration: 5},
+  ];
+
+  evaluate.snapshot('basic behavior, with track sections', {
+    name: 'generateAlbumTrackList',
+    args: [{
+      trackSections: [
+        {name: 'First section', tracks: tracks.slice(0, 3)},
+        {name: 'Second section', tracks: tracks.slice(3)},
+      ],
+      tracks,
+    }],
+  });
+
+  evaluate.snapshot('basic behavior, default track section', {
+    name: 'generateAlbumTrackList',
+    args: [{
+      trackSections: [{isDefaultTrackSection: true, tracks}],
+      tracks,
+    }],
+  });
+});
diff --git a/test/unit/content/dependencies/generateAlbumTrackList.js b/test/unit/content/dependencies/generateAlbumTrackList.js
new file mode 100644
index 00000000..80b086ca
--- /dev/null
+++ b/test/unit/content/dependencies/generateAlbumTrackList.js
@@ -0,0 +1,40 @@
+import t from 'tap';
+import {testContentFunctions} from '../../../lib/content-function.js';
+
+testContentFunctions(t, 'generateAlbumTrackList (unit)', async (t, evaluate) => {
+  await evaluate.load({
+    mock: {
+      generateAlbumTrackListItem: {
+        extraDependencies: ['html'],
+        data: track => track.name,
+        generate: (name, {html}) =>
+          html.tag('li', `Item: ${name}`),
+      },
+    },
+  });
+
+  let readDuration = false;
+
+  const track = (name, duration) => ({
+    name,
+    get duration() {
+      readDuration = true;
+      return duration;
+    },
+  });
+
+  const tracks = [
+    track('Track 1', 30),
+    track('Track 2', 15),
+  ];
+
+  evaluate({
+    name: 'generateAlbumTrackList',
+    args: [{
+      trackSections: [{isDefaultTrackSection: true, tracks}],
+      tracks,
+    }],
+  });
+
+  t.notOk(readDuration, 'expect no access to track.duration property');
+});