f7cloud_client/apps/whiteboard/playwright/e2e/offline-sync.spec.ts
root 8b6a0139db f7cloud_client
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-17 22:59:26 +00:00

56 lines
1.4 KiB
TypeScript

/**
* SPDX-FileCopyrightText: 2025 F7cloud GmbH and F7cloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import { expect } from '@playwright/test'
import { test } from '../support/fixtures/random-user'
import {
addTextElement,
captureBoardAuthFromSave,
createWhiteboard,
fetchBoardContent,
getBoardAuth,
openFilesApp,
} from '../support/utils'
test.beforeEach(async ({ page }) => {
await openFilesApp(page)
})
test('offline edits sync after reconnect', async ({ page }) => {
test.setTimeout(90000)
const boardName = `Offline board ${Date.now()}`
await createWhiteboard(page, { name: boardName })
await addTextElement(page, 'Online text')
let auth
try {
auth = await getBoardAuth(page)
} catch {
auth = await captureBoardAuthFromSave(page)
}
const status = page.locator('.network-status')
await expect.poll(async () => JSON.stringify(await fetchBoardContent(page, auth)), {
timeout: 30000,
interval: 500,
}).toContain('Online text')
await page.context().setOffline(true)
await page.waitForTimeout(2000)
await addTextElement(page, 'Offline text', { x: 520, y: 320 })
await page.waitForTimeout(2000)
await page.context().setOffline(false)
await expect(status).toHaveCount(0, { timeout: 30000 })
await expect.poll(async () => JSON.stringify(await fetchBoardContent(page, auth)), {
timeout: 45000,
interval: 500,
}).toContain('Offline text')
})