diff --git a/__tests__/files/gmail-gmail/one/21/r_htmlContent.html b/__tests__/files/gmail-gmail/one/21/r_htmlContent.html index a2ee3ed1cf8bff4be86974899ac260c7586b91df..c3701da9c42a88a9e75013bfefe83ee2f65375bf 100644 --- a/__tests__/files/gmail-gmail/one/21/r_htmlContent.html +++ b/__tests__/files/gmail-gmail/one/21/r_htmlContent.html @@ -1,3 +1,29 @@ -<div dir="ltr"><br>Forwarding an email with history.<br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">---------- Forwarded message ---------<br>From: <strong class="gmail_sendername" dir="auto">Rosen Georgiev</strong> <span dir="auto"><<a href="mailto:rosenkirchev@gmail.com">rosenkirchev@gmail.com</a>></span><br>Date: Fri, Dec 11, 2020 at 11:48 AM<br>Subject: test 123<br>To: <<a href="mailto:rosenvereign@gmail.com">rosenvereign@gmail.com</a>><br></div><br><br><div dir="ltr"><br>test 123<br><a href="https://gmail.test.vereign.com/?q=CiCmv1km3XHq88gSQqKAJks6cjqJT9REU6092ANxbXdWFRIg41MUcRa9szrNE_Uzk2mg0oaERcNsEyt2zbELns2nyuQ=&timestamp=1607680132583" id="m_-6319369610188194273vereignWrapperLink" target="_blank"><img src="cid:ii_kik38q6m0" alt="qrcode.png" width="153" height="230"></a></div> -</div><br><a href="https://gmail.test.vereign.com/?q=CiD_af1bRp3Lr0VN7XCjr21NhG_sBlsJvujutgLw-NVlGRIgV_8SkcSyAOg15y3-_XauPmzF-mbK48azNaiRmfnpvtk=&timestamp=1607680317560" id="vereignWrapperLink"><img src="cid:ii_kik3coos1" alt="qrcode.png" width="153" height="230"></a></div> - +<div dir="ltr"> + <br />Forwarding an email with history.<br /><br /> + <div class="gmail_quote"> + <div dir="ltr" class="gmail_attr"> + ---------- Forwarded message ---------<br />From: + <strong class="gmail_sendername" dir="auto">Rosen Georgiev</strong> + <span dir="auto" + ><<a href="mailto:rosenkirchev@gmail.com">rosenkirchev@gmail.com</a + >></span + ><br />Date: Fri, Dec 11, 2020 at 11:48 AM<br />Subject: test 123<br />To: + <<a href="mailto:rosenvereign@gmail.com">rosenvereign@gmail.com</a + >><br /> + </div> + <br /><br /> + <div dir="ltr"> + <br />test 123<br /><a + href="https://gmail.test.vereign.com/?q=CiCmv1km3XHq88gSQqKAJks6cjqJT9REU6092ANxbXdWFRIg41MUcRa9szrNE_Uzk2mg0oaERcNsEyt2zbELns2nyuQ=&timestamp=1607680132583" + id="m_-6319369610188194273vereignWrapperLink" + target="_blank" + ><img src="cid:ii_kik38q6m0" alt="qrcode.png" width="153" height="230" + /></a> + </div> + </div> + <br /><a + href="https://gmail.test.vereign.com/?q=CiD_af1bRp3Lr0VN7XCjr21NhG_sBlsJvujutgLw-NVlGRIgV_8SkcSyAOg15y3-_XauPmzF-mbK48azNaiRmfnpvtk=&timestamp=1607680317560" + id="vereignWrapperLink" + ><img src="cid:ii_kik3coos1" alt="qrcode.png" width="153" height="230" + /></a> +</div> diff --git a/__tests__/files/gmail-gmail/one/21/s_htmlContent.html b/__tests__/files/gmail-gmail/one/21/s_htmlContent.html index 7bf32b2da3ab06c3e78bca302f3845126498315f..72f659f532457f648fb0f0e46385ab3af1928f8d 100644 --- a/__tests__/files/gmail-gmail/one/21/s_htmlContent.html +++ b/__tests__/files/gmail-gmail/one/21/s_htmlContent.html @@ -1 +1,29 @@ -<div dir="ltr">Forwarding an email with history.<br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">---------- Forwarded message ---------<br>From: <strong class="gmail_sendername" dir="auto">Rosen Georgiev</strong><span dir="auto"><<a href="mailto:rosenkirchev@gmail.com">rosenkirchev@gmail.com</a>></span><br>Date: Fri, Dec 11, 2020 at 11:48 AM<br>Subject: test 123<br>To: <<a href="mailto:rosenvereign@gmail.com">rosenvereign@gmail.com</a>><br></div><br><br><div dir="ltr"><br>test 123<br><a href="https://gmail.test.vereign.com/?q=CiCmv1km3XHq88gSQqKAJks6cjqJT9REU6092ANxbXdWFRIg41MUcRa9szrNE_Uzk2mg0oaERcNsEyt2zbELns2nyuQ=&timestamp=1607680132583" id="m_-6319369610188194273vereignWrapperLink" target="_blank"><img src="cid:ii_kik38q6m0" alt="qrcode.png" width="153" height="230" data-surl="cid:ii_kik38q6m0"></a></div></div></div> +<div dir="ltr"> + Forwarding an email with history.<br /><br /> + <div class="gmail_quote"> + <div dir="ltr" class="gmail_attr"> + ---------- Forwarded message ---------<br />From: + <strong class="gmail_sendername" dir="auto">Rosen Georgiev</strong + ><span dir="auto" + ><<a href="mailto:rosenkirchev@gmail.com">rosenkirchev@gmail.com</a + >></span + ><br />Date: Fri, Dec 11, 2020 at 11:48 AM<br />Subject: test 123<br />To: + <<a href="mailto:rosenvereign@gmail.com">rosenvereign@gmail.com</a + >><br /> + </div> + <br /><br /> + <div dir="ltr"> + <br />test 123<br /><a + href="https://gmail.test.vereign.com/?q=CiCmv1km3XHq88gSQqKAJks6cjqJT9REU6092ANxbXdWFRIg41MUcRa9szrNE_Uzk2mg0oaERcNsEyt2zbELns2nyuQ=&timestamp=1607680132583" + id="m_-6319369610188194273vereignWrapperLink" + target="_blank" + ><img + src="cid:ii_kik38q6m0" + alt="qrcode.png" + width="153" + height="230" + data-surl="cid:ii_kik38q6m0" + /></a> + </div> + </div> +</div> diff --git a/__tests__/files/gmail-gmail/one/22/r_htmlContent.html b/__tests__/files/gmail-gmail/one/22/r_htmlContent.html index a40d8e3728d3327e14d69194d17d22cbbeb76735..ac215992d369e27bbd585004288673609bfbf965 100644 --- a/__tests__/files/gmail-gmail/one/22/r_htmlContent.html +++ b/__tests__/files/gmail-gmail/one/22/r_htmlContent.html @@ -1,2 +1,33 @@ -<div dir="ltr"><br>reply second email to all<br><a href="https://gmail.test.vereign.com/?q=CiA9KpFulwecbra-Vzakr6t3kGPTJ2uK4JQ91KlzUGJRRhIgK4-brXpuJcszaNGljeunMlWUv5IYmujPBaBRyB3zWL8=&timestamp=1607695422416" id="vereignWrapperLink"><img src="cid:ii_kikccfmt1" alt="qrcode.png" width="153" height="230"></a></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Dec 11, 2020 at 3:55 PM Rosen Georgiev <<a href="mailto:rosenkirchev@gmail.com">rosenkirchev@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><br>multiple recipients<br><a href="https://gmail.test.vereign.com/?q=CiDvUAtuwEqSqs8bzF92OF4rTkJG3jt19AV3vGsh12aGfBIg_N4I9OD2jbSdQJGC8ATfPfemwfxcQyE66gUtrCECppk=&timestamp=1607694903364" id="gmail-m_5893169313940791883vereignWrapperLink" target="_blank"><img src="cid:ii_kikc1b5f0" alt="qrcode.png" width="153" height="230"></a></div> -</blockquote></div> \ No newline at end of file +<div dir="ltr"> + <br />reply second email to all<br /><a + href="https://gmail.test.vereign.com/?q=CiA9KpFulwecbra-Vzakr6t3kGPTJ2uK4JQ91KlzUGJRRhIgK4-brXpuJcszaNGljeunMlWUv5IYmujPBaBRyB3zWL8=&timestamp=1607695422416" + id="vereignWrapperLink" + ><img src="cid:ii_kikccfmt1" alt="qrcode.png" width="153" height="230" + /></a> +</div> +<br /> +<div class="gmail_quote"> + <div dir="ltr" class="gmail_attr"> + On Fri, Dec 11, 2020 at 3:55 PM Rosen Georgiev <<a + href="mailto:rosenkirchev@gmail.com" + >rosenkirchev@gmail.com</a + >> wrote:<br /> + </div> + <blockquote + class="gmail_quote" + style=" + margin: 0px 0px 0px 0.8ex; + border-left: 1px solid rgb(204, 204, 204); + padding-left: 1ex; + " + > + <div dir="ltr"> + <br />multiple recipients<br /><a + href="https://gmail.test.vereign.com/?q=CiDvUAtuwEqSqs8bzF92OF4rTkJG3jt19AV3vGsh12aGfBIg_N4I9OD2jbSdQJGC8ATfPfemwfxcQyE66gUtrCECppk=&timestamp=1607694903364" + id="gmail-m_5893169313940791883vereignWrapperLink" + target="_blank" + ><img src="cid:ii_kikc1b5f0" alt="qrcode.png" width="153" height="230" + /></a> + </div> + </blockquote> +</div> diff --git a/__tests__/files/gmail-gmail/one/22/s_htmlContent.html b/__tests__/files/gmail-gmail/one/22/s_htmlContent.html index 3482ae89e9577b66381fe17bf7f0b4da9e6efa7a..b5d275e3478e571b27dcf909ed04ee856d084f45 100644 --- a/__tests__/files/gmail-gmail/one/22/s_htmlContent.html +++ b/__tests__/files/gmail-gmail/one/22/s_htmlContent.html @@ -1 +1,32 @@ -<div dir="ltr">reply second email to all</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Dec 11, 2020 at 3:55 PM Rosen Georgiev <<a href="mailto:rosenkirchev@gmail.com">rosenkirchev@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><br>multiple recipients<br><a href="https://gmail.test.vereign.com/?q=CiDvUAtuwEqSqs8bzF92OF4rTkJG3jt19AV3vGsh12aGfBIg_N4I9OD2jbSdQJGC8ATfPfemwfxcQyE66gUtrCECppk=&timestamp=1607694903364" id="gmail-m_5893169313940791883vereignWrapperLink" target="_blank"><img src="cid:ii_kikc1b5f0" alt="qrcode.png" width="153" height="230" data-surl="cid:ii_kikc1b5f0"></a></div></blockquote></div> \ No newline at end of file +<div dir="ltr">reply second email to all</div> + +<div class="gmail_quote"> + <div dir="ltr" class="gmail_attr"> + On Fri, Dec 11, 2020 at 3:55 PM Rosen Georgiev <<a + href="mailto:rosenkirchev@gmail.com" + >rosenkirchev@gmail.com</a + >> wrote:<br /> + </div> + <blockquote + class="gmail_quote" + style=" + margin: 0px 0px 0px 0.8ex; + border-left: 1px solid rgb(204, 204, 204); + padding-left: 1ex; + " + > + <div dir="ltr"> + <br />multiple recipients<br /><a + href="https://gmail.test.vereign.com/?q=CiDvUAtuwEqSqs8bzF92OF4rTkJG3jt19AV3vGsh12aGfBIg_N4I9OD2jbSdQJGC8ATfPfemwfxcQyE66gUtrCECppk=&timestamp=1607694903364" + id="gmail-m_5893169313940791883vereignWrapperLink" + target="_blank" + ><img + src="cid:ii_kikc1b5f0" + alt="qrcode.png" + width="153" + height="230" + data-surl="cid:ii_kikc1b5f0" + /></a> + </div> + </blockquote> +</div> diff --git a/__tests__/html-gmail-gmail.test.ts b/__tests__/html-gmail-gmail.test.ts index c0901b7501a23a7e9686aa83b457dcc7b6b48cfe..6b2a782bc4c8fa810613a0a80d39d6d8a40c77bd 100644 --- a/__tests__/html-gmail-gmail.test.ts +++ b/__tests__/html-gmail-gmail.test.ts @@ -13,5 +13,5 @@ describe("[HTML] GMail-GMail", () => { EMAIL_VENDORS.GMAIL ); - describe("One", describeFunction("one", [""])); + describe("One", describeFunction("one", ["sssas"])); }); diff --git a/__tests__/pseudoplain-gmail-gmail.test.ts b/__tests__/htmltext-gmail-gmail.test.ts similarity index 100% rename from __tests__/pseudoplain-gmail-gmail.test.ts rename to __tests__/htmltext-gmail-gmail.test.ts diff --git a/__tests__/pseudoplain-gmail-outlook.test.ts b/__tests__/htmltext-gmail-outlook.test.ts similarity index 100% rename from __tests__/pseudoplain-gmail-outlook.test.ts rename to __tests__/htmltext-gmail-outlook.test.ts diff --git a/__tests__/pseudoplain-outlook-outlook.test.ts b/__tests__/htmltext-outlook-outlook.test.ts similarity index 100% rename from __tests__/pseudoplain-outlook-outlook.test.ts rename to __tests__/htmltext-outlook-outlook.test.ts diff --git a/__tests__/utils.ts b/__tests__/utils.ts index ef875f21f5fc9472fed58d6451b6a0d19f10988b..9d0a0aa2734530053f9ec795afe42b0bf5f0bce9 100644 --- a/__tests__/utils.ts +++ b/__tests__/utils.ts @@ -8,7 +8,23 @@ const RECEIVED_PLAIN_NAME = "r_plainContent.data"; import { PlainNormalizer, HTMLNormalizer } from "../src"; import { expect, test } from "@jest/globals"; import { DOM } from "@vereign/dom"; -//import { diffStringsUnified } from "jest-diff"; +import { diffStringsUnified } from "jest-diff"; + +expect.extend({ + toContainWithDiff(target, source) { + let pass = true; + try { + expect(target).toContain(source); + } catch (e) { + pass = false; + } + + return { + pass, + message: pass ? () => "Pass" : () => diffStringsUnified(source, target), + }; + }, +}); export const getNormalizedPlain = ( testCasePath: string @@ -106,7 +122,10 @@ export const createDescribeHtmlTestCases = ( // expect(receivedHtml.length).toBeGreaterThan(0); // expect(sentHtml.length).toBeGreaterThan(0); - expect(receivedHtml).toContain(sentHtml); + + // eslint-disable-next-line + // @ts-ignore + expect(receivedHtml).toContainWithDiff(sentHtml); }); }; @@ -136,9 +155,10 @@ export const createDescribePlainTestCases = (testsPath: string) => ( // expect(sentPlain.length).toBeGreaterThan(0); // expect(receivedPlain.length).toBeGreaterThan(0); - expect(receivedPlain).toContain(sentPlain); - // const diff = diffStringsUnified(sentPlain, receivedPlain); - // console.log(diff); + + // eslint-disable-next-line + // @ts-ignore + expect(receivedPlain).toContainWithDiff(sentPlain); }); }; diff --git a/src/HTMLNormalizer/strategies/gmail.ts b/src/HTMLNormalizer/strategies/gmail.ts index fa829354844928993ffec7176dd3e95638c5892b..55f4f9f1ed63dbee1e398f988911f0a8a6f2ae3a 100644 --- a/src/HTMLNormalizer/strategies/gmail.ts +++ b/src/HTMLNormalizer/strategies/gmail.ts @@ -3,16 +3,54 @@ import { cloneAnchorFromPane, pruneElement, } from "./common"; +import { ELEMENT_NODE } from "../../constants"; export const pruneGmailElement = (element: HTMLElement): boolean => { return pruneElement(element); }; +const qrCodeContainerIds = { vereignWrapperLink: 1 }; +const removeQrCodeNodes = (document: HTMLDocument) => { + const remove = (node: Element) => { + let toRemove = []; + + let child = node.firstChild; + + while (child) { + if (child.nodeType == ELEMENT_NODE) { + toRemove = [...toRemove, ...remove(child as Element)]; + + const childElement = child as Element; + const id = childElement.getAttribute("id"); + if ( + id && + Object.keys(qrCodeContainerIds).find((possibleId) => + id.includes(possibleId) + ) + ) { + toRemove.push(childElement); + } + } + + child = child.nextSibling; + } + + return toRemove; + }; + + const elementsToRemove = remove(document.body); + elementsToRemove.forEach((element) => + element.parentNode.removeChild(element) + ); +}; + export const amendGmailNodes = (document: HTMLDocument): void => { // unwindTags(document, "span"); + removeQrCodeNodes(document); + /** - * Look for attachments panes and remove everything but liks + * Look for attachments panes and remove everything but links */ const attachmentsPanes = Array.from( diff --git a/src/HTMLNormalizer/strategies/outlook.ts b/src/HTMLNormalizer/strategies/outlook.ts index 2f47a2bda9f0b3097447f32108c5a9d88ca113b5..21d9eda3f93b6c38456900cf2db3be8439179a11 100644 --- a/src/HTMLNormalizer/strategies/outlook.ts +++ b/src/HTMLNormalizer/strategies/outlook.ts @@ -28,7 +28,9 @@ export const pruneOutlookElement = (element: HTMLElement): boolean => { return !!element.nodeName.toLowerCase().startsWith("o:"); }; -const qrCodeContainerId = "test-for-us"; +const qrCodeContainerIds = { + "test-for-us": 1, +}; const removeQrCodeNodes = (document: HTMLDocument) => { const remove = (node: Element) => { let toRemove = []; @@ -41,7 +43,12 @@ const removeQrCodeNodes = (document: HTMLDocument) => { const childElement = child as Element; const id = childElement.getAttribute("id"); - if (id && id.includes(qrCodeContainerId)) { + if ( + id && + Object.keys(qrCodeContainerIds).find((possibleId) => + id.includes(possibleId) + ) + ) { toRemove.push(childElement.parentNode); } } diff --git a/src/PlainNormalizer/PlainNormalizer.ts b/src/PlainNormalizer/PlainNormalizer.ts index 16a59c9c4a4e9c51e90c521158c8ce468ad40628..2dd46a7495eb78758ae0c46bc6870ae343ee7693 100644 --- a/src/PlainNormalizer/PlainNormalizer.ts +++ b/src/PlainNormalizer/PlainNormalizer.ts @@ -8,8 +8,8 @@ export const normalizePlainPart = (text: string): string => { const removeQRCodes = (s: string): string => { return s - .replace(/\[qrcode.png]\s*<https:\/\/[\w./?=\-&]+>/g, "") - .replace(/<https:\/\/[\w./?=\-&]+>\s*\[qrcode.png]/g, ""); + .replace(/\[(image:)*qrcode.png]\s*<https:\/\/[\w./?=\-&]+>/g, "") + .replace(/<https:\/\/[\w./?=\-&]+>\s*\[(image: )*qrcode.png]/g, ""); }; const removeListBullets = (s: string): string => {