From e1c949aa10c912fdb7b2c9c1f0beeecba8db5d94 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Sat, 18 Jan 2025 23:46:54 +0100 Subject: [PATCH] test(import/utils): add test for #handleH1/rework previous tests --- src/services/import/utils.spec.ts | 90 ++++++++++++++++++++++++------- 1 file changed, 71 insertions(+), 19 deletions(-) diff --git a/src/services/import/utils.spec.ts b/src/services/import/utils.spec.ts index 0da7dd6ca..ae6fe45b2 100644 --- a/src/services/import/utils.spec.ts +++ b/src/services/import/utils.spec.ts @@ -1,17 +1,17 @@ import { describe, it, expect } from "vitest"; import importUtils from "./utils.js"; +type TestCase any> = [desc: string, fnParams: Parameters, expected: ReturnType]; describe("#extractHtmlTitle", () => { - - const htmlWithNotTitle = ` + const htmlWithNoTitle = `
abc
`; - const htmlWithTitle = ` + const htmlWithTitle = ` Test Title @@ -20,8 +20,7 @@ describe("#extractHtmlTitle", () => { `; - - const htmlWithTitleWOpeningBracket = ` + const htmlWithTitleWOpeningBracket = ` Test < Title @@ -30,24 +29,77 @@ describe("#extractHtmlTitle", () => { `; - type TestCaseExtractHtmlTitle = [htmlContent: string, expected: string | null, description: string]; + type TestCaseExtractHtmlTitle = [htmlContent: string, expected: string | null, description: string]; - const testCases: TestCaseExtractHtmlTitle[] = [ - [htmlWithTitle, "Test Title", "with existing tag"], - [htmlWithTitleWOpeningBracket, null, "with existing <title> tag, that includes '<'"], - [htmlWithNotTitle, null, "without existing <title> tag"], - ["", null, "with empty content"] - ]; + // prettier-ignore + const testCases: TestCase<typeof importUtils.extractHtmlTitle>[] = [ + [ + "w/ existing <title> tag, it should return the content of the title tag", + [htmlWithTitle], + "Test Title" + ], + [ + // @TriliumNextTODO: this seems more like an unwanted behaviour to me – check if this needs rather fixing + "with existing <title> tag, that includes an opening HTML tag '<', it should return null", + [htmlWithTitleWOpeningBracket], + null + ], + [ + "w/o an existing <title> tag, it should reutrn null", + [htmlWithNoTitle], + null + ], + [ + "w/ empty string content, it should return null", + [""], + null + ] + ]; testCases.forEach((testCase) => { - return it(`${(testCase[2])}, it should return '${testCase[1]}'`, () => { - const [value, expected] = testCase; - const actual = importUtils.extractHtmlTitle(value); + const [desc, fnParams, expected] = testCase; + return it(desc, () => { + const actual = importUtils.extractHtmlTitle(...fnParams); expect(actual).toStrictEqual(expected); }); }); -}) +}); -describe.todo("#handleH1", () => { - //TODO -}) +describe("#handleH1", () => { + // prettier-ignore + const testCases: TestCase<typeof importUtils.handleH1>[] = [ + [ + "w/ single <h1> tag w/ identical text content as the title tag: the <h1> tag should be stripped", + ["<h1>Title</h1>", "Title"], + "" + ], + [ + "w/ multiple <h1> tags, with the fist matching the title tag: the first <h1> tag should be stripped and subsequent tags converted to <h2>", + ["<h1>Title</h1><h1>Header 1</h1><h1>Header 2</h1>", "Title"], + "<h2>Header 1</h2><h2>Header 2</h2>" + ], + [ + "w/ no <h1> tag and only <h2> tags, it should not cause any changes and return the same content", + ["<h2>Heading 1</h2><h2>Heading 2</h2>", "Title"], + "<h2>Heading 1</h2><h2>Heading 2</h2>" + ], + [ + "w/ multiple <h1> tags, and the 1st matching the title tag, it should strip ONLY the very first occurence of the <h1> tags in the returned content", + ["<h1>Topic ABC</h1><h1>Heading 1</h1><h1>Topic ABC</h1>", "Topic ABC"], + "<h2>Heading 1</h2><h2>Topic ABC</h2>" + ], + [ + "w/ multiple <h1> tags, and the 1st matching NOT the title tag, it should NOT strip any other <h1> tags", + ["<h1>Introduction</h1><h1>Topic ABC</h1><h1>Summary</h1>", "Topic ABC"], + "<h2>Introduction</h2><h2>Topic ABC</h2><h2>Summary</h2>" + ] + ]; + + testCases.forEach((testCase) => { + const [desc, fnParams, expected] = testCase; + return it(desc, () => { + const actual = importUtils.handleH1(...fnParams); + expect(actual).toStrictEqual(expected); + }); + }); +});