diff --git a/e2e-tests/test-data/comments-documents/GoogleDocsRedlined.docx b/e2e-tests/test-data/comments-documents/GoogleDocsRedlined.docx new file mode 100644 index 000000000..8403b132d Binary files /dev/null and b/e2e-tests/test-data/comments-documents/GoogleDocsRedlined.docx differ diff --git a/e2e-tests/test-data/comments-documents/MSWordRedlined.docx b/e2e-tests/test-data/comments-documents/MSWordRedlined.docx new file mode 100644 index 000000000..a49921275 Binary files /dev/null and b/e2e-tests/test-data/comments-documents/MSWordRedlined.docx differ diff --git a/e2e-tests/tests/comments/track-changes.spec.js b/e2e-tests/tests/comments/track-changes.spec.js new file mode 100644 index 000000000..9ab8583e7 --- /dev/null +++ b/e2e-tests/tests/comments/track-changes.spec.js @@ -0,0 +1,93 @@ +import { test, expect } from '@playwright/test'; +import { goToPageAndWaitForEditor, sleep } from '../helpers.js'; +import { fileURLToPath } from 'url'; +import path from 'path'; + +test.describe('track changes imports', () => { + const __filename = fileURLToPath(import.meta.url); + const testDataFolder = __filename.split('/tests/')[0] + '/test-data'; + + const wordTrackedChangeSnippets = [ + 'Added: ACCEPT ADDITION', + 'Deleted: adipiscing', + 'Added: REJECT ADDITION', + 'Deleted: porttitor', + 'Added: ACCEPT REPLACEMENT ADDITION', + 'Added: REJECT REPLACEMENT ADDITION', + 'Added: ACCEPT ADDITION AND DELETION PLUS EXTRA TEXT', + 'Added: REJECT ADDITION AND DELETION PLUS EXTRA TEXT', + 'Deleted: rhoncus', + ]; + + const googleTrackedChangeSnippets = [ + 'Added: ACCEPT ADDITION', + 'Deleted: adipiscing', + 'Added: REJECT ADDITION', + 'Deleted: Etiam', + 'Added: ACCEPT REPLACEMENT', + 'Added: REJECT REPLACEMENT', + 'Added: ACCEPT REPLACEMENT ADDITION', + 'Added: REJECT REPLACEMT ADDITION', + 'Added: ACCEPT REPLACEMENT DELETION', + 'Added: REJECT REPLACEMENT DELETION', + 'Added: ACCEPT ADDITION AND DELETION', + 'Deleted: massa', + 'Added: REJECT ADDITION AND DELETION', + 'Deleted: ligula', + 'Added: ACCEPT ADDITION AND DELETION PLUS EXTRA TEXT', + 'Deleted: Morbi', + 'Added: REJECT ADDITION AND DELETION PLUS EXTRA TEXT', + 'Deleted: gravida', + ]; + + const normalizeText = (text) => text.replace(/\s+/g, ' ').trim(); + + const getTrackedChangeText = async (locator) => { + const contents = await locator.allTextContents(); + return normalizeText(contents.join(' ')); + }; + + test('imports tracked changes from MS Word redlines', async ({ page }) => { + await goToPageAndWaitForEditor(page, { includeComments: true }); + await page + .locator('input[type="file"]') + .setInputFiles(path.join(testDataFolder, 'comments-documents/MSWordRedlined.docx')); + + await page.waitForFunction(() => window.superdoc !== undefined && window.editor !== undefined, null, { + polling: 100, + timeout: 10_000, + }); + + await sleep(1000); + + const trackedChanges = page.getByRole('dialog').filter({ hasText: 'Elliot Burton (imported)', visible: true }); + + const trackedChangeCount = await trackedChanges.count(); + expect(trackedChangeCount).toBe(30); + + const trackedChangeText = await getTrackedChangeText(trackedChanges); + wordTrackedChangeSnippets.forEach((snippet) => expect(trackedChangeText).toContain(snippet)); + }); + + test('imports tracked changes from Google Docs redlines', async ({ page }) => { + await goToPageAndWaitForEditor(page, { includeComments: true }); + await page + .locator('input[type="file"]') + .setInputFiles(path.join(testDataFolder, 'comments-documents/GoogleDocsRedlined.docx')); + + await page.waitForFunction(() => window.superdoc !== undefined && window.editor !== undefined, null, { + polling: 100, + timeout: 10_000, + }); + + await sleep(1000); + + const trackedChanges = page.getByRole('dialog').filter({ hasText: 'Elliot Burton (imported)', visible: true }); + + const trackedChangeCount = await trackedChanges.count(); + expect(trackedChangeCount).toBe(18); + + const trackedChangeText = await getTrackedChangeText(trackedChanges); + googleTrackedChangeSnippets.forEach((snippet) => expect(trackedChangeText).toContain(snippet)); + }); +}); diff --git a/e2e-tests/tests/visuals/comments.spec.js-snapshots/documents-with-comments-GoogleDocsRedlined-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/comments.spec.js-snapshots/documents-with-comments-GoogleDocsRedlined-docx-1-chromium-linux.png new file mode 100644 index 000000000..5c6b49e45 Binary files /dev/null and b/e2e-tests/tests/visuals/comments.spec.js-snapshots/documents-with-comments-GoogleDocsRedlined-docx-1-chromium-linux.png differ diff --git a/e2e-tests/tests/visuals/comments.spec.js-snapshots/documents-with-comments-MSWordRedlined-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/comments.spec.js-snapshots/documents-with-comments-MSWordRedlined-docx-1-chromium-linux.png new file mode 100644 index 000000000..f2042a09f Binary files /dev/null and b/e2e-tests/tests/visuals/comments.spec.js-snapshots/documents-with-comments-MSWordRedlined-docx-1-chromium-linux.png differ