chore(format): fix format issues in utils.spec.ts

from
374 problems down to 40
This commit is contained in:
Panagiotis Papadopoulos 2025-04-02 22:33:14 +02:00
parent 3f0dbb9063
commit 80ce77cdcf

View File

@ -61,17 +61,17 @@ describe.todo("#hash", () => {});
describe("#isEmptyOrWhitespace", () => { describe("#isEmptyOrWhitespace", () => {
const testCases: TestCase<typeof utils.isEmptyOrWhitespace>[] = [ const testCases: TestCase<typeof utils.isEmptyOrWhitespace>[] = [
["w/ 'null' it should return true", [null], true], [ "w/ 'null' it should return true", [ null ], true ],
["w/ 'null' it should return true", [null], true], [ "w/ 'null' it should return true", [ null ], true ],
["w/ undefined it should return true", [undefined], true], [ "w/ undefined it should return true", [ undefined ], true ],
["w/ empty string '' it should return true", [""], true], [ "w/ empty string '' it should return true", [ "" ], true ],
["w/ single whitespace string ' ' it should return true", [" "], true], [ "w/ single whitespace string ' ' it should return true", [ " " ], true ],
["w/ multiple whitespace string ' ' it should return true", [" "], true], [ "w/ multiple whitespace string ' ' it should return true", [ " " ], true ],
["w/ non-empty string ' t ' it should return false", [" t "], false] [ "w/ non-empty string ' t ' it should return false", [ " t " ], false ]
]; ];
testCases.forEach((testCase) => { testCases.forEach((testCase) => {
const [desc, fnParams, expected] = testCase; const [ desc, fnParams, expected ] = testCase;
it(desc, () => { it(desc, () => {
const result = utils.isEmptyOrWhitespace(...fnParams); const result = utils.isEmptyOrWhitespace(...fnParams);
expect(result).toStrictEqual(expected); expect(result).toStrictEqual(expected);
@ -81,18 +81,18 @@ describe("#isEmptyOrWhitespace", () => {
describe("#sanitizeSqlIdentifier", () => { describe("#sanitizeSqlIdentifier", () => {
const testCases: TestCase<typeof utils.sanitizeSqlIdentifier>[] = [ const testCases: TestCase<typeof utils.sanitizeSqlIdentifier>[] = [
["w/ 'test' it should not strip anything", ["test"], "test"], [ "w/ 'test' it should not strip anything", [ "test" ], "test" ],
["w/ 'test123' it should not strip anything", ["test123"], "test123"], [ "w/ 'test123' it should not strip anything", [ "test123" ], "test123" ],
["w/ 'tEst_TeSt' it should not strip anything", ["tEst_TeSt"], "tEst_TeSt"], [ "w/ 'tEst_TeSt' it should not strip anything", [ "tEst_TeSt" ], "tEst_TeSt" ],
["w/ 'test_test' it should not strip '_'", ["test_test"], "test_test"], [ "w/ 'test_test' it should not strip '_'", [ "test_test" ], "test_test" ],
["w/ 'test-' it should strip the '-'", ["test-"], "test"], [ "w/ 'test-' it should strip the '-'", [ "test-" ], "test" ],
["w/ 'test-test' it should strip the '-'", ["test-test"], "testtest"], [ "w/ 'test-test' it should strip the '-'", [ "test-test" ], "testtest" ],
["w/ 'test; --test' it should strip the '; --'", ["test; --test"], "testtest"], [ "w/ 'test; --test' it should strip the '; --'", [ "test; --test" ], "testtest" ],
["w/ 'test test' it should strip the ' '", ["test test"], "testtest"] [ "w/ 'test test' it should strip the ' '", [ "test test" ], "testtest" ]
]; ];
testCases.forEach((testCase) => { testCases.forEach((testCase) => {
const [desc, fnParams, expected] = testCase; const [ desc, fnParams, expected ] = testCase;
it(desc, () => { it(desc, () => {
const result = utils.sanitizeSqlIdentifier(...fnParams); const result = utils.sanitizeSqlIdentifier(...fnParams);
expect(result).toStrictEqual(expected); expect(result).toStrictEqual(expected);
@ -120,7 +120,7 @@ describe("#toObject", () => {
{ testPropA: "keyA", testPropB: "valueA" }, { testPropA: "keyA", testPropB: "valueA" },
{ testPropA: "keyB", testPropB: "valueB" } { testPropA: "keyB", testPropB: "valueB" }
]; ];
const fn: TestListFn = (testListEntry: TestListEntry) => [testListEntry.testPropA + "_fn", testListEntry.testPropB + "_fn"]; const fn: TestListFn = (testListEntry: TestListEntry) => [ testListEntry.testPropA + "_fn", testListEntry.testPropB + "_fn" ];
const result = utils.toObject(testList, fn); const result = utils.toObject(testList, fn);
expect(result).toStrictEqual({ expect(result).toStrictEqual({
@ -138,13 +138,13 @@ def</p>
<p>ghi</p>`; <p>ghi</p>`;
const testCases: TestCase<typeof utils.stripTags>[] = [ const testCases: TestCase<typeof utils.stripTags>[] = [
["should strip all tags and only return the content, leaving new lines and spaces in tact", [htmlWithNewlines], "abc\ndef\nghi"], [ "should strip all tags and only return the content, leaving new lines and spaces in tact", [ htmlWithNewlines ], "abc\ndef\nghi" ],
//TriliumNextTODO: should this actually insert a space between content to prevent concatenated text? //TriliumNextTODO: should this actually insert a space between content to prevent concatenated text?
["should strip all tags and only return the content", ["<h1>abc</h1><p>def</p>"], "abcdef"] [ "should strip all tags and only return the content", [ "<h1>abc</h1><p>def</p>" ], "abcdef" ]
]; ];
testCases.forEach((testCase) => { testCases.forEach((testCase) => {
const [desc, fnParams, expected] = testCase; const [ desc, fnParams, expected ] = testCase;
it(desc, () => { it(desc, () => {
const result = utils.stripTags(...fnParams); const result = utils.stripTags(...fnParams);
expect(result).toStrictEqual(expected); expect(result).toStrictEqual(expected);
@ -162,33 +162,33 @@ describe("#getContentDisposition", () => {
const testCases: TestCase<typeof utils.getContentDisposition>[] = [ const testCases: TestCase<typeof utils.getContentDisposition>[] = [
[ [
"when passed filename is empty, it should fallback to default value 'file'", "when passed filename is empty, it should fallback to default value 'file'",
[" "], [ " " ],
defaultFallBackDisposition defaultFallBackDisposition
], ],
[ [
"when passed filename '..' would cause sanitized filename to be empty, it should fallback to default value 'file'", "when passed filename '..' would cause sanitized filename to be empty, it should fallback to default value 'file'",
[".."], [ ".." ],
defaultFallBackDisposition defaultFallBackDisposition
], ],
// COM1 is a Windows specific "illegal filename" that sanitize filename strips away // COM1 is a Windows specific "illegal filename" that sanitize filename strips away
[ [
"when passed filename 'COM1' would cause sanitized filename to be empty, it should fallback to default value 'file'", "when passed filename 'COM1' would cause sanitized filename to be empty, it should fallback to default value 'file'",
["COM1"], [ "COM1" ],
defaultFallBackDisposition defaultFallBackDisposition
], ],
[ [
"sanitized passed filename should be returned URIEncoded", "sanitized passed filename should be returned URIEncoded",
["test file.csv"], [ "test file.csv" ],
`file; filename="test%20file.csv"; filename*=UTF-8''test%20file.csv` `file; filename="test%20file.csv"; filename*=UTF-8''test%20file.csv`
] ]
] ];
testCases.forEach(testCase => { testCases.forEach(testCase => {
const [desc, fnParams, expected] = testCase; const [ desc, fnParams, expected ] = testCase;
it(desc, () => { it(desc, () => {
const result = utils.getContentDisposition(...fnParams); const result = utils.getContentDisposition(...fnParams);
expect(result).toStrictEqual(expected); expect(result).toStrictEqual(expected);
}) });
}); });
}); });
@ -197,38 +197,38 @@ describe("#isStringNote", () => {
const testCases: TestCase<typeof utils.isStringNote>[] = [ const testCases: TestCase<typeof utils.isStringNote>[] = [
[ [
"w/ 'undefined' note type, but a string mime type, it should return true", "w/ 'undefined' note type, but a string mime type, it should return true",
[undefined, "application/javascript"], [ undefined, "application/javascript" ],
true true
], ],
[ [
"w/ non-string note type, it should return false", "w/ non-string note type, it should return false",
["image", "image/jpeg"], [ "image", "image/jpeg" ],
false false
], ],
[ [
"w/ string note type (text), it should return true", "w/ string note type (text), it should return true",
["text", "text/html"], [ "text", "text/html" ],
true true
], ],
[ [
"w/ string note type (code), it should return true", "w/ string note type (code), it should return true",
["code", "application/json"], [ "code", "application/json" ],
true true
], ],
[ [
"w/ non-string note type (file), but string mime type, it should return true", "w/ non-string note type (file), but string mime type, it should return true",
["file", "application/json"], [ "file", "application/json" ],
true true
], ],
[ [
"w/ non-string note type (file), but mime type starting with 'text/', it should return true", "w/ non-string note type (file), but mime type starting with 'text/', it should return true",
["file", "text/html"], [ "file", "text/html" ],
true true
], ]
]; ];
testCases.forEach((testCase) => { testCases.forEach((testCase) => {
const [desc, fnParams, expected] = testCase; const [ desc, fnParams, expected ] = testCase;
it(desc, () => { it(desc, () => {
const result = utils.isStringNote(...fnParams); const result = utils.isStringNote(...fnParams);
expect(result).toStrictEqual(expected); expect(result).toStrictEqual(expected);
@ -242,15 +242,15 @@ describe.todo("#replaceAll", () => {});
describe("#removeTextFileExtension", () => { describe("#removeTextFileExtension", () => {
const testCases: TestCase<typeof utils.removeTextFileExtension>[] = [ const testCases: TestCase<typeof utils.removeTextFileExtension>[] = [
["w/ 'test.md' it should strip '.md'", ["test.md"], "test"], [ "w/ 'test.md' it should strip '.md'", [ "test.md" ], "test" ],
["w/ 'test.markdown' it should strip '.markdown'", ["test.markdown"], "test"], [ "w/ 'test.markdown' it should strip '.markdown'", [ "test.markdown" ], "test" ],
["w/ 'test.html' it should strip '.html'", ["test.html"], "test"], [ "w/ 'test.html' it should strip '.html'", [ "test.html" ], "test" ],
["w/ 'test.htm' it should strip '.htm'", ["test.htm"], "test"], [ "w/ 'test.htm' it should strip '.htm'", [ "test.htm" ], "test" ],
["w/ 'test.zip' it should NOT strip '.zip'", ["test.zip"], "test.zip"] [ "w/ 'test.zip' it should NOT strip '.zip'", [ "test.zip" ], "test.zip" ]
]; ];
testCases.forEach((testCase) => { testCases.forEach((testCase) => {
const [desc, fnParams, expected] = testCase; const [ desc, fnParams, expected ] = testCase;
it(desc, () => { it(desc, () => {
const result = utils.removeTextFileExtension(...fnParams); const result = utils.removeTextFileExtension(...fnParams);
expect(result).toStrictEqual(expected); expect(result).toStrictEqual(expected);
@ -261,63 +261,63 @@ describe("#removeTextFileExtension", () => {
describe("#getNoteTitle", () => { describe("#getNoteTitle", () => {
const testCases: TestCase<typeof utils.getNoteTitle>[] = [ const testCases: TestCase<typeof utils.getNoteTitle>[] = [
[ [
"when file has no spaces, and no special file extension, it should return the filename unaltered", "when file has no spaces, and no special file extension, it should return the filename unaltered",
["test.json", true, undefined], [ "test.json", true, undefined ],
"test.json" "test.json"
], ],
[ [
"when replaceUnderscoresWithSpaces is false, it should keep the underscores in the title", "when replaceUnderscoresWithSpaces is false, it should keep the underscores in the title",
["test_file.json", false, undefined], [ "test_file.json", false, undefined ],
"test_file.json" "test_file.json"
], ],
[ [
"when replaceUnderscoresWithSpaces is true, it should replace the underscores in the title", "when replaceUnderscoresWithSpaces is true, it should replace the underscores in the title",
["test_file.json", true, undefined], [ "test_file.json", true, undefined ],
"test file.json" "test file.json"
], ],
[ [
"when filePath ends with one of the extra handled endings (.md), it should strip the file extension from the title", "when filePath ends with one of the extra handled endings (.md), it should strip the file extension from the title",
["test_file.md", false, undefined], [ "test_file.md", false, undefined ],
"test_file" "test_file"
], ],
[ [
"when filePath ends with one of the extra handled endings (.md) and replaceUnderscoresWithSpaces is true, it should strip the file extension from the title and replace underscores", "when filePath ends with one of the extra handled endings (.md) and replaceUnderscoresWithSpaces is true, it should strip the file extension from the title and replace underscores",
["test_file.md", true, undefined], [ "test_file.md", true, undefined ],
"test file" "test file"
], ],
[ [
"when filepath contains a full path, it should only return the basename of the file", "when filepath contains a full path, it should only return the basename of the file",
["Trilium Demo/Scripting examples/Statistics/Most cloned notes/template.zip", true, undefined], [ "Trilium Demo/Scripting examples/Statistics/Most cloned notes/template.zip", true, undefined ],
"template.zip" "template.zip"
], ],
[ [
"when filepath contains a full path and has extra handled ending (.html), it should only return the basename of the file and strip the file extension", "when filepath contains a full path and has extra handled ending (.html), it should only return the basename of the file and strip the file extension",
["Trilium Demo/Scripting examples/Statistics/Most cloned notes/template.html", true, undefined], [ "Trilium Demo/Scripting examples/Statistics/Most cloned notes/template.html", true, undefined ],
"template" "template"
], ],
[ [
"when a noteMeta object is passed, it should use the title from the noteMeta, if present", "when a noteMeta object is passed, it should use the title from the noteMeta, if present",
["test_file.md", true, { title: "some other title"}], [ "test_file.md", true, { title: "some other title" } ],
"some other title" "some other title"
],
[
"when a noteMeta object is passed, but the title prop is empty, it should try to handle the filename as if no noteMeta was passed",
["test_file.md", true, { title: ""}],
"test file"
], ],
[ [
"when a noteMeta object is passed, but the title prop is empty, it should try to handle the filename as if no noteMeta was passed", "when a noteMeta object is passed, but the title prop is empty, it should try to handle the filename as if no noteMeta was passed",
["test_file.json", false, { title: " "}], [ "test_file.md", true, { title: "" } ],
"test file"
],
[
"when a noteMeta object is passed, but the title prop is empty, it should try to handle the filename as if no noteMeta was passed",
[ "test_file.json", false, { title: " " } ],
"test_file.json" "test_file.json"
] ]
]; ];
testCases.forEach(testCase => { testCases.forEach(testCase => {
const [desc, fnParams, expected] = testCase; const [ desc, fnParams, expected ] = testCase;
it(desc, () => { it(desc, () => {
const result = utils.getNoteTitle(...fnParams); const result = utils.getNoteTitle(...fnParams);
expect(result).toStrictEqual(expected); expect(result).toStrictEqual(expected);
}); });
}); });
}); });
@ -389,15 +389,15 @@ describe("#deferred", () => {
describe("#removeDiacritic", () => { describe("#removeDiacritic", () => {
const testCases: TestCase<typeof utils.removeDiacritic>[] = [ const testCases: TestCase<typeof utils.removeDiacritic>[] = [
["w/ 'Äpfel' it should replace the 'Ä'", ["Äpfel"], "Apfel"], [ "w/ 'Äpfel' it should replace the 'Ä'", [ "Äpfel" ], "Apfel" ],
["w/ 'Été' it should replace the 'É' and 'é'", ["Été"], "Ete"], [ "w/ 'Été' it should replace the 'É' and 'é'", [ "Été" ], "Ete" ],
["w/ 'Fête' it should replace the 'ê'", ["Fête"], "Fete"], [ "w/ 'Fête' it should replace the 'ê'", [ "Fête" ], "Fete" ],
["w/ 'Αλφαβήτα' it should replace the 'ή'", ["Αλφαβήτα"], "Αλφαβητα"], [ "w/ 'Αλφαβήτα' it should replace the 'ή'", [ "Αλφαβήτα" ], "Αλφαβητα" ],
["w/ '' (empty string) it should return empty string", [""], ""] [ "w/ '' (empty string) it should return empty string", [ "" ], "" ]
]; ];
testCases.forEach((testCase) => { testCases.forEach((testCase) => {
const [desc, fnParams, expected] = testCase; const [ desc, fnParams, expected ] = testCase;
it(desc, () => { it(desc, () => {
const result = utils.removeDiacritic(...fnParams); const result = utils.removeDiacritic(...fnParams);
expect(result).toStrictEqual(expected); expect(result).toStrictEqual(expected);
@ -407,15 +407,15 @@ describe("#removeDiacritic", () => {
describe("#normalize", () => { describe("#normalize", () => {
const testCases: TestCase<typeof utils.normalize>[] = [ const testCases: TestCase<typeof utils.normalize>[] = [
["w/ 'Äpfel' it should replace the 'Ä' and return lowercased", ["Äpfel"], "apfel"], [ "w/ 'Äpfel' it should replace the 'Ä' and return lowercased", [ "Äpfel" ], "apfel" ],
["w/ 'Été' it should replace the 'É' and 'é' and return lowercased", ["Été"], "ete"], [ "w/ 'Été' it should replace the 'É' and 'é' and return lowercased", [ "Été" ], "ete" ],
["w/ 'FêTe' it should replace the 'ê' and return lowercased", ["FêTe"], "fete"], [ "w/ 'FêTe' it should replace the 'ê' and return lowercased", [ "FêTe" ], "fete" ],
["w/ 'ΑλΦαβήΤα' it should replace the 'ή' and return lowercased", ["ΑλΦαβήΤα"], "αλφαβητα"], [ "w/ 'ΑλΦαβήΤα' it should replace the 'ή' and return lowercased", [ "ΑλΦαβήΤα" ], "αλφαβητα" ],
["w/ '' (empty string) it should return empty string", [""], ""] [ "w/ '' (empty string) it should return empty string", [ "" ], "" ]
]; ];
testCases.forEach((testCase) => { testCases.forEach((testCase) => {
const [desc, fnParams, expected] = testCase; const [ desc, fnParams, expected ] = testCase;
it(desc, () => { it(desc, () => {
const result = utils.normalize(...fnParams); const result = utils.normalize(...fnParams);
expect(result).toStrictEqual(expected); expect(result).toStrictEqual(expected);
@ -425,21 +425,21 @@ describe("#normalize", () => {
describe("#toMap", () => { describe("#toMap", () => {
it("should return an instace of Map, with the correct size and keys, when supplied with a list and existing keys", () => { it("should return an instace of Map, with the correct size and keys, when supplied with a list and existing keys", () => {
const testList = [{title: "test", propA: "text", propB: 123 }, {title: "test2", propA: "prop2", propB: 456 }]; const testList = [ { title: "test", propA: "text", propB: 123 }, { title: "test2", propA: "prop2", propB: 456 } ];
const result = utils.toMap(testList, "title"); const result = utils.toMap(testList, "title");
expect(result).toBeInstanceOf(Map); expect(result).toBeInstanceOf(Map);
expect(result.size).toBe(2); expect(result.size).toBe(2);
expect(Array.from(result.keys())).toStrictEqual(["test", "test2"]); expect(Array.from(result.keys())).toStrictEqual([ "test", "test2" ]);
}); });
it("should return an instace of Map, with an empty size, when the supplied list does not contain the supplied key", () => { it("should return an instace of Map, with an empty size, when the supplied list does not contain the supplied key", () => {
const testList = [{title: "test", propA: "text", propB: 123 }, {title: "test2", propA: "prop2", propB: 456 }]; const testList = [ { title: "test", propA: "text", propB: 123 }, { title: "test2", propA: "prop2", propB: 456 } ];
//@ts-expect-error - key is non-existing on supplied list type //@ts-expect-error - key is non-existing on supplied list type
const result = utils.toMap(testList, "nonExistingKey"); const result = utils.toMap(testList, "nonExistingKey");
expect(result).toBeInstanceOf(Map); expect(result).toBeInstanceOf(Map);
expect(result.size).toBe(0); expect(result.size).toBe(0);
}); });
it.fails("should correctly handle duplicate keys? (currently it will overwrite the entry, so returned size will be 1 instead of 2)", () => { it.fails("should correctly handle duplicate keys? (currently it will overwrite the entry, so returned size will be 1 instead of 2)", () => {
const testList = [{title: "testDupeTitle", propA: "text", propB: 123 }, {title: "testDupeTitle", propA: "prop2", propB: 456 }]; const testList = [ { title: "testDupeTitle", propA: "text", propB: 123 }, { title: "testDupeTitle", propA: "prop2", propB: 456 } ];
const result = utils.toMap(testList, "title"); const result = utils.toMap(testList, "title");
expect(result).toBeInstanceOf(Map); expect(result).toBeInstanceOf(Map);
expect(result.size).toBe(2); expect(result.size).toBe(2);
@ -448,25 +448,25 @@ describe("#toMap", () => {
describe("#envToBoolean", () => { describe("#envToBoolean", () => {
const testCases: TestCase<typeof utils.envToBoolean>[] = [ const testCases: TestCase<typeof utils.envToBoolean>[] = [
["w/ 'true' it should return boolean 'true'", ["true"], true], [ "w/ 'true' it should return boolean 'true'", [ "true" ], true ],
["w/ 'True' it should return boolean 'true'", ["True"], true], [ "w/ 'True' it should return boolean 'true'", [ "True" ], true ],
["w/ 'TRUE' it should return boolean 'true'", ["TRUE"], true], [ "w/ 'TRUE' it should return boolean 'true'", [ "TRUE" ], true ],
["w/ 'true ' it should return boolean 'true'", ["true "], true], [ "w/ 'true ' it should return boolean 'true'", [ "true " ], true ],
["w/ 'false' it should return boolean 'false'", ["false"], false], [ "w/ 'false' it should return boolean 'false'", [ "false" ], false ],
["w/ 'False' it should return boolean 'false'", ["False"], false], [ "w/ 'False' it should return boolean 'false'", [ "False" ], false ],
["w/ 'FALSE' it should return boolean 'false'", ["FALSE"], false], [ "w/ 'FALSE' it should return boolean 'false'", [ "FALSE" ], false ],
["w/ 'false ' it should return boolean 'false'", ["false "], false], [ "w/ 'false ' it should return boolean 'false'", [ "false " ], false ],
["w/ 'whatever' (non-boolean string) it should return undefined", ["whatever"], undefined], [ "w/ 'whatever' (non-boolean string) it should return undefined", [ "whatever" ], undefined ],
["w/ '-' (non-boolean string) it should return undefined", ["-"], undefined], [ "w/ '-' (non-boolean string) it should return undefined", [ "-" ], undefined ],
["w/ '' (empty string) it should return undefined", [""], undefined], [ "w/ '' (empty string) it should return undefined", [ "" ], undefined ],
["w/ ' ' (white space string) it should return undefined", [" "], undefined], [ "w/ ' ' (white space string) it should return undefined", [ " " ], undefined ],
["w/ undefined it should return undefined", [undefined], undefined], [ "w/ undefined it should return undefined", [ undefined ], undefined ],
//@ts-expect-error - pass wrong type as param //@ts-expect-error - pass wrong type as param
["w/ number 1 it should return undefined", [1], undefined] [ "w/ number 1 it should return undefined", [ 1 ], undefined ]
]; ];
testCases.forEach((testCase) => { testCases.forEach((testCase) => {
const [desc, fnParams, expected] = testCase; const [ desc, fnParams, expected ] = testCase;
it(desc, () => { it(desc, () => {
const result = utils.envToBoolean(...fnParams); const result = utils.envToBoolean(...fnParams);
expect(result).toStrictEqual(expected); expect(result).toStrictEqual(expected);
@ -515,7 +515,7 @@ describe("#safeExtractMessageAndStackFromError", () => {
expect(actual[0]).toBe("Unknown Error"); expect(actual[0]).toBe("Unknown Error");
expect(actual[1]).toBeUndefined(); expect(actual[1]).toBeUndefined();
}); });
}) });
describe("#formatDownloadTitle", () => { describe("#formatDownloadTitle", () => {
//prettier-ignore //prettier-ignore
@ -523,105 +523,105 @@ describe("#formatDownloadTitle", () => {
// empty fileName tests // empty fileName tests
[ [
["", "text", ""], [ "", "text", "" ],
"untitled.html" "untitled.html"
], ],
[ [
["", "canvas", ""], [ "", "canvas", "" ],
"untitled.json" "untitled.json"
], ],
[ [
["", null, ""], [ "", null, "" ],
"untitled" "untitled"
], ],
// json extension from type tests // json extension from type tests
[ [
["test_file", "canvas", ""], [ "test_file", "canvas", "" ],
"test_file.json" "test_file.json"
], ],
[ [
["test_file", "relationMap", ""], [ "test_file", "relationMap", "" ],
"test_file.json" "test_file.json"
], ],
[ [
["test_file", "search", ""], [ "test_file", "search", "" ],
"test_file.json" "test_file.json"
], ],
// extension based on mime type // extension based on mime type
[ [
["test_file", null, "text/csv"], [ "test_file", null, "text/csv" ],
"test_file.csv" "test_file.csv"
], ],
[ [
["test_file_wo_ext", "image", "image/svg+xml"], [ "test_file_wo_ext", "image", "image/svg+xml" ],
"test_file_wo_ext.svg" "test_file_wo_ext.svg"
], ],
[ [
["test_file_wo_ext", "file", "application/json"], [ "test_file_wo_ext", "file", "application/json" ],
"test_file_wo_ext.json" "test_file_wo_ext.json"
], ],
[ [
["test_file_w_fake_ext.ext", "image", "image/svg+xml"], [ "test_file_w_fake_ext.ext", "image", "image/svg+xml" ],
"test_file_w_fake_ext.ext.svg" "test_file_w_fake_ext.ext.svg"
], ],
[ [
["test_file_w_correct_ext.svg", "image", "image/svg+xml"], [ "test_file_w_correct_ext.svg", "image", "image/svg+xml" ],
"test_file_w_correct_ext.svg" "test_file_w_correct_ext.svg"
], ],
[ [
["test_file_w_correct_ext.svgz", "image", "image/svg+xml"], [ "test_file_w_correct_ext.svgz", "image", "image/svg+xml" ],
"test_file_w_correct_ext.svgz" "test_file_w_correct_ext.svgz"
], ],
[ [
["test_file.zip", "file", "application/zip"], [ "test_file.zip", "file", "application/zip" ],
"test_file.zip" "test_file.zip"
], ],
[ [
["test_file", "file", "application/zip"], [ "test_file", "file", "application/zip" ],
"test_file.zip" "test_file.zip"
], ],
// application/octet-stream tests // application/octet-stream tests
[ [
["test_file", "file", "application/octet-stream"], [ "test_file", "file", "application/octet-stream" ],
"test_file" "test_file"
], ],
[ [
["test_file.zip", "file", "application/octet-stream"], [ "test_file.zip", "file", "application/octet-stream" ],
"test_file.zip" "test_file.zip"
], ],
[ [
["test_file.unknown", null, "application/octet-stream"], [ "test_file.unknown", null, "application/octet-stream" ],
"test_file.unknown" "test_file.unknown"
], ],
// sanitized filename tests // sanitized filename tests
[ [
["test/file", null, "application/octet-stream"], [ "test/file", null, "application/octet-stream" ],
"testfile" "testfile"
], ],
[ [
["test:file.zip", "file", "application/zip"], [ "test:file.zip", "file", "application/zip" ],
"testfile.zip" "testfile.zip"
], ],
[ [
[":::", "file", "application/zip"], [ ":::", "file", "application/zip" ],
".zip" ".zip"
], ],
[ [
[":::a", "file", "application/zip"], [ ":::a", "file", "application/zip" ],
"a.zip" "a.zip"
] ]
]; ];
testCases.forEach((testCase) => { testCases.forEach((testCase) => {
const [fnParams, expected] = testCase; const [ fnParams, expected ] = testCase;
return it(`With args '${JSON.stringify(fnParams)}', it should return '${expected}'`, () => { return it(`With args '${JSON.stringify(fnParams)}', it should return '${expected}'`, () => {
const actual = utils.formatDownloadTitle(...fnParams); const actual = utils.formatDownloadTitle(...fnParams);
expect(actual).toStrictEqual(expected); expect(actual).toStrictEqual(expected);