From 8a1740168b260cd2f7a9ab6e8befff489943d2b1 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Tue, 28 Mar 2023 19:50:16 -0300 Subject: test (unit): generateContributionLinks --- .../dependencies/generateContributionLinks.js | 120 +++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 test/unit/content/dependencies/generateContributionLinks.js (limited to 'test/unit/content/dependencies/generateContributionLinks.js') diff --git a/test/unit/content/dependencies/generateContributionLinks.js b/test/unit/content/dependencies/generateContributionLinks.js new file mode 100644 index 00000000..a0bb64ec --- /dev/null +++ b/test/unit/content/dependencies/generateContributionLinks.js @@ -0,0 +1,120 @@ +import t from 'tap'; +import {testContentFunctions} from '../../../lib/content-function.js'; + +t.test('generateContributionLinks (unit)', async t => { + await testContentFunctions(t, 'generateContributionLinks (unit 1)', async (t, evaluate) => { + 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'}, + ]; + + 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(() => 'artist link') + .repeat(3), + }, + })), + }); + + evaluate({ + name: 'generateContributionLinks', + args: [contributions, config], + extraDependencies: evaluate.mock(mock => ({ + iconifyURL: mock.function(() => 'icon') + .args([artist1.urls[0], undefined]).next() + .args([artist3.urls[0], undefined]).next() + .args([artist3.urls[1], undefined]), + })), + }); + }); + + await testContentFunctions(t, 'generateContributionLinks (unit 2)', async (t, evaluate) => { + 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'}, + ]; + + 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), + }, + })), + }); + + evaluate({ + name: 'generateContributionLinks', + args: [contributions, config], + extraDependencies: evaluate.mock(mock => ({ + iconifyURL: mock.function(() => 'icon') + .neverCalled(), + })), + }); + }); +}); -- cgit 1.3.0-6-gf8a5