import { Message } from 'mailspring-exports';
import LinkTrackingComposerExtension from '../lib/link-tracking-composer-extension';
import { PLUGIN_ID, PLUGIN_URL } from '../lib/link-tracking-constants';
const beforeBody = `TEST_BODY
test
asdad
adsasd
stillhere
twstasdad`; const afterBodyFactory = (accountId, messageUid) => `TEST_BODY
twstasdad`; const nodeForHTML = html => { const fragment = document.createDocumentFragment(); const node = document.createElement('root'); fragment.appendChild(node); node.innerHTML = html; return node; }; xdescribe('Link tracking composer extension', function linkTrackingComposerExtension() { describe('applyTransformsForSending', () => { beforeEach(() => { this.draft = new Message({ accountId: 'test' }); this.draft.body = beforeBody; this.draftBodyRootNode = nodeForHTML(this.draft.body); }); it('takes no action if there is no metadata', () => { LinkTrackingComposerExtension.applyTransformsForSending({ draftBodyRootNode: this.draftBodyRootNode, draft: this.draft, }); const afterBody = this.draftBodyRootNode.innerHTML; expect(afterBody).toEqual(beforeBody); }); describe('With properly formatted metadata and correct params', () => { beforeEach(() => { this.metadata = { tracked: true }; this.draft.directlyAttachMetadata(PLUGIN_ID, this.metadata); }); it('replaces links in the unquoted portion of the body', () => { LinkTrackingComposerExtension.applyTransformsForSending({ draftBodyRootNode: this.draftBodyRootNode, draft: this.draft, }); const metadata = this.draft.metadataForPluginId(PLUGIN_ID); const afterBody = this.draftBodyRootNode.innerHTML; expect(afterBody).toEqual(afterBodyFactory(this.draft.accountId, metadata.uid)); }); it('sets a uid and list of links on the metadata', () => { LinkTrackingComposerExtension.applyTransformsForSending({ draftBodyRootNode: this.draftBodyRootNode, draft: this.draft, }); const metadata = this.draft.metadataForPluginId(PLUGIN_ID); expect(metadata.uid).not.toBeUndefined(); expect(metadata.links).not.toBeUndefined(); expect(metadata.links.length).toEqual(2); for (const link of metadata.links) { expect(link.click_count).toEqual(0); } }); }); }); describe('unapplyTransformsForSending', () => { beforeEach(() => { this.metadata = { tracked: true, uid: '123' }; this.draft = new Message({ accountId: 'test' }); this.draft.directlyAttachMetadata(PLUGIN_ID, this.metadata); }); it('takes no action if there are no tracked links in the body', () => { this.draft.body = beforeBody; this.draftBodyRootNode = nodeForHTML(this.draft.body); LinkTrackingComposerExtension.unapplyTransformsForSending({ draftBodyRootNode: this.draftBodyRootNode, draft: this.draft, }); const afterBody = this.draftBodyRootNode.innerHTML; expect(afterBody).toEqual(beforeBody); }); it('replaces tracked links with the original links, restoring the body exactly', () => { this.draft.body = afterBodyFactory(this.draft.accountId, this.metadata.uid); this.draftBodyRootNode = nodeForHTML(this.draft.body); LinkTrackingComposerExtension.unapplyTransformsForSending({ draftBodyRootNode: this.draftBodyRootNode, draft: this.draft, }); const afterBody = this.draftBodyRootNode.innerHTML; expect(afterBody).toEqual(beforeBody); }); }); });