From ba41071d9b6647b2e12a78de774a55aef5b87876 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Tue, 13 Jun 2023 12:54:20 -0300 Subject: test: generateContributionLinks -> linkContribution --- test/snapshot/generateContributionLinks.js | 55 ---------- test/snapshot/linkContribution.js | 54 +++++++++ .../dependencies/generateContributionLinks.js | 109 ------------------ test/unit/content/dependencies/linkContribution.js | 122 +++++++++++++++++++++ 4 files changed, 176 insertions(+), 164 deletions(-) delete mode 100644 test/snapshot/generateContributionLinks.js create mode 100644 test/snapshot/linkContribution.js delete mode 100644 test/unit/content/dependencies/generateContributionLinks.js create mode 100644 test/unit/content/dependencies/linkContribution.js (limited to 'test') diff --git a/test/snapshot/generateContributionLinks.js b/test/snapshot/generateContributionLinks.js deleted file mode 100644 index 3283d3b2..00000000 --- a/test/snapshot/generateContributionLinks.js +++ /dev/null @@ -1,55 +0,0 @@ -// todo: this dependency was replaced with linkContribution, restructure test -// remove generateContributionLinks.js.test.cjs snapshot file too! - -import t from 'tap'; -import {testContentFunctions} from '../lib/content-function.js'; - -t.skip('generateContributionLinks (snapshot)'); - -void (() => testContentFunctions(t, 'generateContributionLinks (snapshot)', async (t, evaluate) => { - const artist1 = { - name: 'Clark Powell', - directory: 'clark-powell', - urls: ['https://soundcloud.com/plazmataz'], - }; - - const artist2 = { - name: 'Grounder & Scratch', - directory: 'the-big-baddies', - urls: [], - }; - - const artist3 = { - 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'}, - ]; - - await evaluate.load(); - - evaluate.snapshot('showContribution & showIcons', { - name: 'generateContributionLinks', - args: [contributions, {showContribution: true, showIcons: true}], - }); - - evaluate.snapshot('only showContribution', { - name: 'generateContributionLinks', - args: [contributions, {showContribution: true, showIcons: false}], - }); - - evaluate.snapshot('only showIcons', { - name: 'generateContributionLinks', - args: [contributions, {showContribution: false, showIcons: true}], - }); - - evaluate.snapshot('no accents', { - name: 'generateContributionLinks', - args: [contributions, {showContribution: false, showIcons: false}], - }); -})); diff --git a/test/snapshot/linkContribution.js b/test/snapshot/linkContribution.js new file mode 100644 index 00000000..758fa264 --- /dev/null +++ b/test/snapshot/linkContribution.js @@ -0,0 +1,54 @@ +import t from 'tap'; +import {testContentFunctions} from '../lib/content-function.js'; + +testContentFunctions(t, 'linkContribution (snapshot)', async (t, evaluate) => { + const who1 = { + name: 'Clark Powell', + directory: 'clark-powell', + urls: ['https://soundcloud.com/plazmataz'], + }; + + const who2 = { + name: 'Grounder & Scratch', + directory: 'the-big-baddies', + urls: [], + }; + + const who3 = { + name: 'Toby Fox', + directory: 'toby-fox', + urls: ['https://tobyfox.bandcamp.com/', 'https://toby.fox/'], + }; + + const what1 = null; + const what2 = 'Snooping'; + const what3 = 'Arrangement'; + + await evaluate.load(); + + const quickSnapshot = (message, slots) => + evaluate.snapshot(message, { + name: 'linkContribution', + multiple: [ + {args: [who1, what1]}, + {args: [who2, what2]}, + {args: [who3, what3]}, + ], + slots, + }); + + quickSnapshot('showContribution & showIcons', { + showContribution: true, + showIcons: true, + }); + + quickSnapshot('only showContribution', { + showContribution: true, + }); + + quickSnapshot('only showIcons', { + showIcons: true, + }); + + quickSnapshot('no accents', {}); +}); diff --git a/test/unit/content/dependencies/generateContributionLinks.js b/test/unit/content/dependencies/generateContributionLinks.js deleted file mode 100644 index 328adc0b..00000000 --- a/test/unit/content/dependencies/generateContributionLinks.js +++ /dev/null @@ -1,109 +0,0 @@ -// 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 = { - name: 'Clark Powell', - urls: ['https://soundcloud.com/plazmataz'], - }; - - const artist2 = { - name: 'Grounder & Scratch', - urls: [], - }; - - const artist3 = { - name: 'Toby Fox', - urls: ['https://tobyfox.bandcamp.com/', 'https://toby.fox/'], - }; - - const contributions = [ - {who: artist1, what: null}, - {who: artist2, what: 'Snooping'}, - {who: artist3, what: 'Arrangement'}, - ]; - - await testContentFunctions(t, 'generateContributionLinks (unit 1)', async (t, evaluate) => { - const config = { - showContribution: true, - showIcons: true, - }; - - await evaluate.load({ - mock: evaluate.mock(mock => ({ - linkArtist: { - relations: mock.function('linkArtist.relations', () => ({})) - .args([undefined, artist1]).next() - .args([undefined, artist2]).next() - .args([undefined, artist3]), - - data: mock.function('linkArtist.data', () => ({})) - .args([artist1]).next() - .args([artist2]).next() - .args([artist3]), - - // This can be tweaked to return a specific (mocked) template - // for each artist if we need to test for slots in the future. - generate: mock.function('linkArtist.generate', () => 'artist link') - .repeat(3), - }, - - linkExternalAsIcon: { - data: mock.function('linkExternalAsIcon.data', () => ({})) - .args([artist1.urls[0]]).next() - .args([artist3.urls[0]]).next() - .args([artist3.urls[1]]), - - generate: mock.function('linkExternalAsIcon.generate', () => 'icon') - .repeat(3), - } - })), - }); - - evaluate({ - name: 'generateContributionLinks', - args: [contributions, config], - }); - }); - - await testContentFunctions(t, 'generateContributionLinks (unit 2)', async (t, evaluate) => { - const config = { - showContribution: false, - showIcons: false, - }; - - await evaluate.load({ - mock: evaluate.mock(mock => ({ - linkArtist: { - relations: mock.function('linkArtist.relations', () => ({})) - .args([undefined, artist1]).next() - .args([undefined, artist2]).next() - .args([undefined, artist3]), - - data: mock.function('linkArtist.data', () => ({})) - .args([artist1]).next() - .args([artist2]).next() - .args([artist3]), - - generate: mock.function(() => 'artist link') - .repeat(3), - }, - - linkExternalAsIcon: { - data: mock.function('linkExternalAsIcon.data', () => ({})) - .neverCalled(), - - generate: mock.function('linkExternalAsIcon.generate', () => 'icon') - .neverCalled(), - }, - })), - }); - - evaluate({ - name: 'generateContributionLinks', - args: [contributions, config], - }); - }); -}); diff --git a/test/unit/content/dependencies/linkContribution.js b/test/unit/content/dependencies/linkContribution.js new file mode 100644 index 00000000..6f3150f7 --- /dev/null +++ b/test/unit/content/dependencies/linkContribution.js @@ -0,0 +1,122 @@ +import t from 'tap'; +import {testContentFunctions} from '../../../lib/content-function.js'; + +t.test('generateContributionLinks (unit)', async t => { + const who1 = { + name: 'Clark Powell', + directory: 'clark-powell', + urls: ['https://soundcloud.com/plazmataz'], + }; + + const who2 = { + name: 'Grounder & Scratch', + directory: 'the-big-baddies', + urls: [], + }; + + const who3 = { + name: 'Toby Fox', + directory: 'toby-fox', + urls: ['https://tobyfox.bandcamp.com/', 'https://toby.fox/'], + }; + + const what1 = null; + const what2 = 'Snooping'; + const what3 = 'Arrangement'; + + await testContentFunctions(t, 'generateContributionLinks (unit 1)', async (t, evaluate) => { + const slots = { + showContribution: true, + showIcons: true, + }; + + await evaluate.load({ + mock: evaluate.mock(mock => ({ + linkArtist: { + relations: mock.function('linkArtist.relations', () => ({})) + .args([undefined, who1]).next() + .args([undefined, who2]).next() + .args([undefined, who3]), + + data: mock.function('linkArtist.data', () => ({})) + .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. + generate: mock.function('linkArtist.generate', () => 'artist link') + .repeat(3), + }, + + linkExternalAsIcon: { + data: mock.function('linkExternalAsIcon.data', () => ({})) + .args([who1.urls[0]]).next() + .args([who3.urls[0]]).next() + .args([who3.urls[1]]), + + generate: mock.function('linkExternalAsIcon.generate', () => 'icon') + .repeat(3), + } + })), + }); + + evaluate({ + name: 'linkContribution', + multiple: [ + {args: [who1, what1]}, + {args: [who2, what2]}, + {args: [who3, what3]}, + ], + slots, + }); + }); + + await testContentFunctions(t, 'generateContributionLinks (unit 2)', async (t, evaluate) => { + const slots = { + showContribution: false, + showIcons: false, + }; + + await evaluate.load({ + mock: evaluate.mock(mock => ({ + linkArtist: { + relations: mock.function('linkArtist.relations', () => ({})) + .args([undefined, who1]).next() + .args([undefined, who2]).next() + .args([undefined, who3]), + + data: mock.function('linkArtist.data', () => ({})) + .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', () => ({})) + .repeat(3), + + generate: mock.function('linkExternalAsIcon.generate', () => 'icon') + .repeat(3), + }, + })), + }); + + evaluate({ + name: 'linkContribution', + multiple: [ + {args: [who1, what1]}, + {args: [who2, what2]}, + {args: [who3, what3]}, + ], + slots, + }); + }); +}); -- cgit 1.3.0-6-gf8a5