diff --git a/.circleci/config.yml b/.circleci/config.yml index 5effc0bb2..cc6bd8d82 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -82,6 +82,9 @@ jobs: - run: name: Test - HTML sanitization command: npm run test:safehtml + - run: + name: Test - Helpers + command: npm run test:helpers - run: name: Test - Coverage command: npm run test:coverage diff --git a/package.json b/package.json index 77435216a..cbe66a69f 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "test:emojis": "jest tests/markdown/emojis.test.js --verbose --noStackTrace", "test:route": "jest tests/routes/static-pages.test.js --verbose", "test:safehtml": "jest tests/html/safeHTML.test.js --verbose", + "test:helpers": "jest tests/html/helpers.test.js --verbose", "phb": "node --experimental-require-module scripts/phb.js", "prod": "set NODE_ENV=production && npm run build", "postinstall": "npm run build", diff --git a/shared/helpers.js b/shared/helpers.js index db046b810..d20687843 100644 --- a/shared/helpers.js +++ b/shared/helpers.js @@ -229,5 +229,6 @@ export { printCurrentBrew, fetchThemeBundle, brewSnippetsToJSON, - debugTextMismatch + debugTextMismatch, + yamlSnippetsToText }; diff --git a/tests/html/helpers.test.js b/tests/html/helpers.test.js new file mode 100644 index 000000000..a81a62173 --- /dev/null +++ b/tests/html/helpers.test.js @@ -0,0 +1,114 @@ +import { + fetchThemeBundle, + brewSnippetsToJSON, + debugTextMismatch, + yamlSnippetsToText, +} from '../../shared/helpers.js'; + +import dedent from 'dedent'; + +// Marked.js adds line returns after closing tags on some default tokens. +// This removes those line returns for comparison sake. +String.prototype.trimReturns = function(){ + return this.replace(/\r?\n|\r/g, ''); +}; + +const emoji = 'df_d12_2'; + +const brewSnippetsThemeTest = [ + { + name : 'Test Theme', + snippets : dedent ` + \snippet First Theme Snippet + I am the first theme snippet! + + \snippet Second Theme Snippet + I am the second theme Snippet!`, + } +]; + +const brewSnippetsBrewTest = dedent` + \snippet First Brew Snippet + I am the first brew snippet! + + \snippet Second Brew Snippet + I am the second brew Snippet!`; + +describe(`brewSnippetsToJSON`, ()=>{ + it('converts raw brew snippets without theme snippets to JSON', function() { + const testMenuObject = { + groupName : 'Brew Snippets', + icon : 'fas fa-th-list', + view : 'text', + snippets : [{ + name : 'Test Snippets JSON without theme snippets', + subsnippets : [ + { + gen : 'I am the first brew snippet!\n', + name : 'First Brew Snippet' + }, { + gen : 'I am the second brew Snippet!', + name: 'Second Brew Snippet' + } + ]}] + }; + const rendered = brewSnippetsToJSON(`Test Snippets JSON without theme snippets`, brewSnippetsBrewTest, null, true); + expect(rendered).toStrictEqual(testMenuObject); + }); + + it('converts raw brew snippets with theme snippets to JSON', function() { + const testMenuObject = { + groupName : 'Brew Snippets', + icon : 'fas fa-th-list', + view : 'text', + snippets : [{ + gen : '', + icon : '', + name : 'Test Theme', + subsnippets : [ + { + gen : 'I am the first theme snippet!\n', + icon : '', + name : 'First Theme Snippet', + }, + { + gen : 'I am the second theme Snippet!', + icon : '', + name : 'Second Theme Snippet', + }, + ]}, + { + name : 'Test Snippets JSON with theme snippets', + subsnippets : [ + { + gen : 'I am the first brew snippet!\n', + name : 'First Brew Snippet' + }, + { + gen : 'I am the second brew Snippet!', + name: 'Second Brew Snippet' + } + ] + }]}; + const rendered = brewSnippetsToJSON(`Test Snippets JSON with theme snippets`, brewSnippetsBrewTest, brewSnippetsThemeTest, true); + expect(rendered).toStrictEqual(testMenuObject); + }); +}); + +describe(`YAMLSnippetsToText`, ()=>{ + it('converts brew snippet YAML to a string ', function() { + const brewSnippetsYAML = [{ + subsnippets : [ + { + gen : 'I am the first brew snippet!\n', + name : 'First Brew Snippet' + }, { + gen : 'I am the second brew Snippet!', + name: 'Second Brew Snippet' + } + ] + }]; + const rendered = yamlSnippetsToText(brewSnippetsYAML); + expect(rendered).toBe(`${brewSnippetsBrewTest}\n`); + }); +}); \ No newline at end of file