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=&amp;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 &lt;pox@live.ru&gt;<br><b>Тема:</b> [[safari/02]] 02 Table/list/text formatting</font> <div>&nbsp;</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=&amp;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=&timestamp=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=&timestamp=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 &lt;pox@live.ru&gt;<br><b>Тема:</b> [[safari/02]] 02 Table/list/text formatting</font> <div>&nbsp;</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=&amp;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=&timestamp=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