diff --git a/__tests__/index.test.ts b/__tests__/index.test.ts deleted file mode 100644 index 2ad152d3eced827b6d5842ad907213ca3e3bec86..0000000000000000000000000000000000000000 --- a/__tests__/index.test.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { describe, it, expect } from "@jest/globals"; -import {add} from "../src"; - -describe("index test", () => { - it("should calculate sum", () => { - const sum = add(2, 5); - expect(sum).toEqual(7); - }) -}) diff --git a/__tests__/outlookHtml.test.ts b/__tests__/outlookHtml.test.ts new file mode 100644 index 0000000000000000000000000000000000000000..6ff3540a557eaadd45c5da55917dae3ef4ab7ae5 --- /dev/null +++ b/__tests__/outlookHtml.test.ts @@ -0,0 +1,99 @@ +import { describe, test, expect } from "@jest/globals"; +import { JSDOM } from "jsdom"; +import HTMLNormalizer from "../src/HTMLNormalizer"; +import { EMAIL_VENDORS } from "../src/constants"; +const fs = require("fs"); +const path = require("path"); +const util = require("util"); + +// Test cases from https://code.vereign.com/alexey.lunin/outlook-files-upload + +const TESTS_GLOBAL_PATH = "/outlook-files-upload/uploads"; +const SENT_HTML_NAME = "s_initialHtmlContent.data"; +const RECEIVED_HTML_NAME = "r_htmlContent.data"; + +const getNormalizedTestCases = async ( + testCasesDirName: string +): Promise<Array<Array<string>>> => { + const testsPath = path.resolve( + __dirname, + `..${TESTS_GLOBAL_PATH}/${testCasesDirName}` + ); + + const testCasesDirs = fs.readdirSync(testsPath).filter(function (file) { + return fs.statSync(testsPath + "/" + file).isDirectory(); + }); + + const results = await Promise.allSettled( + testCasesDirs.map(async (dirName) => { + const sentHtml = ( + await util.promisify(fs.readFile)( + `${testsPath}/${dirName}/${SENT_HTML_NAME}` + ) + ).toString(); + + const receivedHtml = ( + await util.promisify(fs.readFile)( + `${testsPath}/${dirName}/${RECEIVED_HTML_NAME}` + ) + ).toString(); + + return { + sentHtml, + receivedHtml, + }; + }) + ); + + return Object.values(results) + .filter((result, index) => { + if (result.status === "fulfilled") { + return true; + } else { + console.log(`Invalid test case: ${testCasesDirs[index]}`); + return false; + } + }) + .map((result: any) => { + const sentHtml = result.value.sentHtml; + const receivedHtml = result.value.receivedHtml; + + const sentDOM = new JSDOM(sentHtml); + const receivedDOM = new JSDOM(receivedHtml); + + const sentNormalizedHtml = HTMLNormalizer.normalizeVendorHtml( + sentDOM.window.document, + EMAIL_VENDORS.OUTLOOK + ); + const receivedNormalizedHtml = HTMLNormalizer.normalizeVendorHtml( + receivedDOM.window.document, + EMAIL_VENDORS.OUTLOOK + ); + + return [sentNormalizedHtml, receivedNormalizedHtml]; + }); +}; + +describe("Outlook emails HTML normalization", () => { + test("Emails Chrome", async () => { + const normalizedCases = await getNormalizedTestCases("chrome"); + normalizedCases.forEach(([sent, received]) => { + expect(received).toContain(sent); + }); + }); + + // it("Emails Edge", () => { + // }) + // + // it("Emails Gmail", () => { + // }) + // + // it("Emails MacOS", () => { + // }) + // + // it("Emails Safari", () => { + // }) + // + // it("Emails Windows", () => { + // }) +}); diff --git a/outlook-files-upload b/outlook-files-upload index 92e510e217ecc2693ecd9b7dbddb3cba1c0645dc..ada9633a773c4c0c88f36adfa7ce7f022aababb3 160000 --- a/outlook-files-upload +++ b/outlook-files-upload @@ -1 +1 @@ -Subproject commit 92e510e217ecc2693ecd9b7dbddb3cba1c0645dc +Subproject commit ada9633a773c4c0c88f36adfa7ce7f022aababb3 diff --git a/src/HTMLNormalizer/index.ts b/src/HTMLNormalizer/index.ts index eddde0e98229002067914b228da6d8434bcc8c63..5a404bb97ec11626d161e4eb38928b5572c2c1f9 100644 --- a/src/HTMLNormalizer/index.ts +++ b/src/HTMLNormalizer/index.ts @@ -1,3 +1,5 @@ -import {normalizeVendorHtml} from "./HTMLNormalizer"; +import { normalizeVendorHtml } from "./HTMLNormalizer"; -export default normalizeVendorHtml; +export default { + normalizeVendorHtml, +}; diff --git a/tsconfig.json b/tsconfig.json index e880418b6314b5810989ea19b7e21fbe4241ce79..81779e45db08fbb0f3a3121ca5f40d59cb435034 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "module": "commonjs", - "target": "es2015", + "target": "es2020", "declaration": true, "outDir": "./dist", "allowJs": true