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

56 lines
1.8 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,
createWhiteboard,
newLoggedInPage,
openFilesApp,
openWhiteboardFromFiles,
fetchBoardContent,
getBoardAuth,
} from '../support/utils'
test.beforeEach(async ({ page }) => {
await openFilesApp(page)
})
test('whiteboard changes sync across sessions', async ({ page, browser, user }) => {
test.setTimeout(90000)
const boardName = `Collab board ${Date.now()}`
await createWhiteboard(page, { name: boardName })
await addTextElement(page, 'First session text')
let auth
try {
auth = await getBoardAuth(page)
} catch {
const saveResp = await page.waitForResponse((response) => response.request().method() === 'PUT' && response.url().includes('/apps/whiteboard/'), { timeout: 60000 })
const authHeader = saveResp.request().headers()['authorization'] || ''
const apiPath = new URL(saveResp.url()).pathname.replace('/index.php/', '')
const fileId = Number(apiPath.split('/').pop())
auth = { fileId, jwt: authHeader }
}
await expect.poll(async () => JSON.stringify(await fetchBoardContent(page, auth)), {
timeout: 20000,
interval: 500,
}).toContain('First session text')
const pageB = await newLoggedInPage(page, browser)
await openWhiteboardFromFiles(pageB, boardName)
const fetchContent = async (targetPage) => JSON.stringify(await fetchBoardContent(targetPage, auth))
await expect.poll(async () => fetchContent(pageB), { timeout: 20000, interval: 500 }).toContain('First session text')
await addTextElement(pageB, 'Second session text')
await expect.poll(async () => fetchContent(page), { timeout: 30000, interval: 500 }).toContain('Second session text')
await pageB.close()
})