From 1266d50e80bc1d6b00e503d7269868563e43f0a8 Mon Sep 17 00:00:00 2001 From: igor <igor.markin@vereign.com> Date: Fri, 27 Nov 2020 12:43:29 +0300 Subject: [PATCH] Update test cases directory structure --- .../chrome/20/r_htmlContent.html | 2 + .../chrome/20/r_plainContent.data | 28 +++++ .../chrome/20/s_htmlContent.html | 2 + .../chrome/20/s_plainContent.data | 25 +++++ __tests__/outlook-outlook.test.ts | 94 ++++++++++++++++ __tests__/outlookHtml.test.ts | 101 ------------------ 6 files changed, 151 insertions(+), 101 deletions(-) create mode 100644 __tests__/files/outlook-outlook/chrome/20/r_htmlContent.html create mode 100644 __tests__/files/outlook-outlook/chrome/20/r_plainContent.data create mode 100644 __tests__/files/outlook-outlook/chrome/20/s_htmlContent.html create mode 100644 __tests__/files/outlook-outlook/chrome/20/s_plainContent.data create mode 100644 __tests__/outlook-outlook.test.ts delete mode 100644 __tests__/outlookHtml.test.ts diff --git a/__tests__/files/outlook-outlook/chrome/20/r_htmlContent.html b/__tests__/files/outlook-outlook/chrome/20/r_htmlContent.html new file mode 100644 index 0000000..b5dc772 --- /dev/null +++ b/__tests__/files/outlook-outlook/chrome/20/r_htmlContent.html @@ -0,0 +1,2 @@ +<html><head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style></head><body dir="ltr"><span><div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">[[edge/20]] 20 Reply with: just a text<br></div><div><br><div id="x_test-for-us"><a href="https://office.test.vereign.com/?q=CiBQVwVPopbwQW-wlQ6nikCcodsA8sQmysY--ZJYi00w7RIgZ-OvWpZp2yZYpqsavrWVwr0XboQ0dyJai1Lo8_VpFPw=&timestamp=1605767661627" target="_blank"><img class="x_qrcode.png" name="x_qrcode.png" id="x_qrcode.png" alt="qrcode.png" width="160" src="cid:2a94f531-9c0a-44d8-ad54-875bd57e6f04"> </a></div><br></div><div id="x_appendonsend"></div><div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)"><br></div><hr tabindex="-1" style="display:inline-block; width:98%"><div id="x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>От:</b> Outlook Alex<br><b>Отправлено:</b> 19 ноября 2020 г. 7:54<br><b>Кому:</b> Alexey Lunin <pox@live.ru><br><b>Тема:</b> [[safari/02]] 02 Table/list/text formatting</font> <div> </div></div><div dir="ltr"><span><div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">[[safari/02]] 02 Table/list/<b>text</b> <i>formatting</i><br></div><div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)"><table cellspacing="0" cellpadding="1" style="border-collapse:collapse"><tbody><tr style="background-color:rgb(255,255,255)"><td style="width:120px; border:1px solid rgb(171,171,171)">TAble</td><td style="width:120px; border:1px solid rgb(171,171,171)">list</td><td style="width:120px; border:1px solid rgb(171,171,171)"><ol><li>list</li><ol style="list-style:lower-alpha"><li>sublist</li><ol style="list-style:lower-roman"><li>subsublist</li></ol><li>sublist</li></ol><li>list</li><li><br></li></ol></td></tr><tr style="background-color:rgb(255,255,255)"><td style="width:120px; border:1px solid rgb(171,171,171)"><br></td><td style="width:120px; border:1px solid rgb(171,171,171)"><br></td><td style="width:120px; border:1px solid rgb(171,171,171)">formatting</td></tr></tbody></table><br></div><div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)"><sup>надстрочный</sup><sub>по<strike>дстрочный текст</strike></sub></div><div><br><div id="x_x_x_test-for-us"><a href="https://office.test.vereign.com/?q=CiBBpcdVAz67tw2e7yclaMZg6l_dZmj6_1q2jJepp9oD9BIgol66H18XklqUCLn78xkSMwYvFeDyBWEYuVaWIz4OR48=&timestamp=1605765243753" target="_blank"><img class="x_x_x_qrcode.png" name="x_x_x_qrcode.png" id="x_x_x_qrcode.png" alt="qrcode.png" width="160" src="cid:2a94f531-9c0a-44d8-ad54-875bd57e6f04"> </a></div><br></div></span></div></span></body></html> \ No newline at end of file diff --git a/__tests__/files/outlook-outlook/chrome/20/r_plainContent.data b/__tests__/files/outlook-outlook/chrome/20/r_plainContent.data new file mode 100644 index 0000000..a300ddd --- /dev/null +++ b/__tests__/files/outlook-outlook/chrome/20/r_plainContent.data @@ -0,0 +1,28 @@ +[[edge/20]] 20 Reply with: just a text + +[qrcode.png] <https://office.test.vereign.com/?q=CiBQVwVPopbwQW-wlQ6nikCcodsA8sQmysY--ZJYi00w7RIgZ-OvWpZp2yZYpqsavrWVwr0XboQ0dyJai1Lo8_VpFPw=×tamp=1605767661627> + + +________________________________ +От: Outlook Alex +Отправлено: 19 ноября 2020 г. 7:54 +Кому: Alexey Lunin <pox@live.ru> +Тема: [[safari/02]] 02 Table/list/text formatting + +[[safari/02]] 02 Table/list/text formatting +TAble list + + 1. list + * sublist + * subsublist + * sublist + 2. list + 3. + + +formatting + +надстрочныйподстрочный текст + +[qrcode.png] <https://office.test.vereign.com/?q=CiBBpcdVAz67tw2e7yclaMZg6l_dZmj6_1q2jJepp9oD9BIgol66H18XklqUCLn78xkSMwYvFeDyBWEYuVaWIz4OR48=×tamp=1605765243753> + diff --git a/__tests__/files/outlook-outlook/chrome/20/s_htmlContent.html b/__tests__/files/outlook-outlook/chrome/20/s_htmlContent.html new file mode 100644 index 0000000..b562eb5 --- /dev/null +++ b/__tests__/files/outlook-outlook/chrome/20/s_htmlContent.html @@ -0,0 +1,2 @@ +<html><head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style></head><body dir="ltr"><div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">[[edge/20]] 20 Reply with: just a text<br></div><div id="appendonsend"></div><div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)"><br></div><hr tabindex="-1" style="display:inline-block; width:98%"><div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>От:</b> Outlook Alex<br><b>Отправлено:</b> 19 ноября 2020 г. 7:54<br><b>Кому:</b> Alexey Lunin <pox@live.ru><br><b>Тема:</b> [[safari/02]] 02 Table/list/text formatting</font> <div> </div></div><div dir="ltr"><span><div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">[[safari/02]] 02 Table/list/<b>text</b> <i>formatting</i><br></div><div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)"><table cellspacing="0" cellpadding="1" style="border-collapse:collapse"><tbody><tr style="background-color:rgb(255,255,255)"><td style="width:120px; border:1px solid rgb(171,171,171)">TAble</td><td style="width:120px; border:1px solid rgb(171,171,171)">list</td><td style="width:120px; border:1px solid rgb(171,171,171)"><ol><li>list</li><ol style="list-style:lower-alpha"><li>sublist</li><ol style="list-style:lower-roman"><li>subsublist</li></ol><li>sublist</li></ol><li>list</li><li><br></li></ol></td></tr><tr style="background-color:rgb(255,255,255)"><td style="width:120px; border:1px solid rgb(171,171,171)"><br></td><td style="width:120px; border:1px solid rgb(171,171,171)"><br></td><td style="width:120px; border:1px solid rgb(171,171,171)">formatting</td></tr></tbody></table><br></div><div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)"><sup>надстрочный</sup><sub>по<strike>дстрочный текст</strike></sub></div><div><br><div id="x_x_test-for-us"><a href="https://office.test.vereign.com/?q=CiBBpcdVAz67tw2e7yclaMZg6l_dZmj6_1q2jJepp9oD9BIgol66H18XklqUCLn78xkSMwYvFeDyBWEYuVaWIz4OR48=&timestamp=1605765243753" target="_blank"><img class="x_x_qrcode.png" name="x_x_qrcode.png" id="x_x_qrcode.png" alt="qrcode.png" width="160" src="cid:2a94f531-9c0a-44d8-ad54-875bd57e6f04"> </a></div><br></div></span></div></body></html> \ No newline at end of file diff --git a/__tests__/files/outlook-outlook/chrome/20/s_plainContent.data b/__tests__/files/outlook-outlook/chrome/20/s_plainContent.data new file mode 100644 index 0000000..ce5af92 --- /dev/null +++ b/__tests__/files/outlook-outlook/chrome/20/s_plainContent.data @@ -0,0 +1,25 @@ +[[edge/20]] 20 Reply with: just a text + +________________________________ +От: Outlook Alex +Отправлено: 19 ноября 2020 г. 7:54 +Кому: Alexey Lunin <pox@live.ru> +Тема: [[safari/02]] 02 Table/list/text formatting + +[[safari/02]] 02 Table/list/text formatting +TAble list + + 1. list + * sublist + * subsublist + * sublist + 2. list + 3. + + +formatting + +надстрочныйподстрочный текст + +[qrcode.png] <https://office.test.vereign.com/?q=CiBBpcdVAz67tw2e7yclaMZg6l_dZmj6_1q2jJepp9oD9BIgol66H18XklqUCLn78xkSMwYvFeDyBWEYuVaWIz4OR48=×tamp=1605765243753> + diff --git a/__tests__/outlook-outlook.test.ts b/__tests__/outlook-outlook.test.ts new file mode 100644 index 0000000..b74e510 --- /dev/null +++ b/__tests__/outlook-outlook.test.ts @@ -0,0 +1,94 @@ +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 testsPath = path.resolve(__dirname, `..${TESTS_GLOBAL_PATH}`); +const getTestCasesDirs = (testCasesPath: string) => { + return fs.readdirSync(testCasesPath).filter(function (file) { + return fs.statSync(testCasesPath + "/" + file).isDirectory(); + }); +}; + +const getNormalizedHtml = ( + testCasePath: string +): { + sentHtml: string; + receivedHtml: string; +} => { + const sentHtml = fs + .readFileSync(`${testCasePath}/${SENT_HTML_NAME}`) + .toString(); + const receivedHtml = fs + .readFileSync(`${testCasePath}/${RECEIVED_HTML_NAME}`) + .toString(); + + 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 { + sentHtml: sentNormalizedHtml, + receivedHtml: receivedNormalizedHtml, + }; +}; + +describe("Outlook emails HTML normalization", () => { + const describeTestCases = (casesName: string) => () => { + const testsCasesPath = testsPath + "/" + casesName; + const testCasesDirs = getTestCasesDirs(testsCasesPath); + + test.each(testCasesDirs)("Case %s", (dirName: string) => { + const testCasePath = testsCasesPath + "/" + dirName; + let normalizedHtmls; + try { + normalizedHtmls = getNormalizedHtml(testCasePath); + } catch (e) { + console.log("Invalid test case: " + dirName); + return; + } + + const { sentHtml, receivedHtml } = normalizedHtmls; + + expect(receivedHtml.length).toBeGreaterThan(0); + expect(sentHtml.length).toBeGreaterThan(0); + expect(receivedHtml).toContain(sentHtml); + }); + }; + + describe("Emails Chrome", describeTestCases("chrome")); + describe("Emails Edge", describeTestCases("edge")); + //describe("Emails Gmail", describeTestCases("gmail")); + + // it("Emails Edge", () => { + // }) + // + // it("Emails Gmail", () => { + // }) + // + // it("Emails MacOS", () => { + // }) + // + // it("Emails Safari", () => { + // }) + // + // it("Emails Windows", () => { + // }) +}); diff --git a/__tests__/outlookHtml.test.ts b/__tests__/outlookHtml.test.ts deleted file mode 100644 index 5ce7f0a..0000000 --- a/__tests__/outlookHtml.test.ts +++ /dev/null @@ -1,101 +0,0 @@ -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.length).toBeGreaterThan(0); - expect(sent.length).toBeGreaterThan(0); - expect(received).toContain(sent); - }); - }); - - // it("Emails Edge", () => { - // }) - // - // it("Emails Gmail", () => { - // }) - // - // it("Emails MacOS", () => { - // }) - // - // it("Emails Safari", () => { - // }) - // - // it("Emails Windows", () => { - // }) -}); -- GitLab