/** * Teardown fixture for e2e tests. * * Cleans up test-specific entities created during test runs: * - Baserow rows created by individual tests (not the pre-seeded fixture rows). * - DocAdenice pages created during tests. * * The Baserow workspace/database/table/views are preserved across test runs * (idempotent seed) — only transient data created by individual tests is cleaned. */ import { type APIRequestContext } from "@playwright/test"; const BASEROW_URL = process.env.E2E_BASEROW_URL ?? "http://localhost:8081"; const DOCMOST_SERVER_URL = process.env.E2E_DOCMOST_SERVER_URL ?? "http://localhost:3001"; /** * Delete a single Baserow row. * Idempotent: ignores 404 (row already gone). */ export async function deleteBaserowRow( apiContext: APIRequestContext, token: string, tableId: number, rowId: number, ): Promise { const response = await apiContext.delete( `${BASEROW_URL}/api/database/rows/table/${tableId}/${rowId}/`, { headers: { Authorization: `JWT ${token}` }, }, ); if (!response.ok() && response.status() !== 404) { console.warn( `[cleanup] Could not delete Baserow row ${rowId} from table ${tableId}: ${response.status()}`, ); } } /** * Delete multiple Baserow rows. */ export async function deleteBaserowRows( apiContext: APIRequestContext, token: string, tableId: number, rowIds: number[], ): Promise { for (const rowId of rowIds) { await deleteBaserowRow(apiContext, token, tableId, rowId); } } /** * Delete a DocAdenice page by ID using the admin token. * Idempotent: ignores 404. */ export async function deleteDocAdencePage( apiContext: APIRequestContext, adminToken: string, pageId: string, ): Promise { const response = await apiContext.delete( `${DOCMOST_SERVER_URL}/api/pages/${pageId}`, { headers: { Authorization: `Bearer ${adminToken}` }, }, ); if (!response.ok() && response.status() !== 404) { console.warn( `[cleanup] Could not delete DocAdenice page ${pageId}: ${response.status()}`, ); } } /** * Delete multiple DocAdenice pages. */ export async function deleteDocAdencePages( apiContext: APIRequestContext, adminToken: string, pageIds: string[], ): Promise { for (const pageId of pageIds) { await deleteDocAdencePage(apiContext, adminToken, pageId); } }