diff --git a/frontend/e2e/DbManagerPage.ts b/frontend/e2e/DbManagerPage.ts index f7d59561b3..bbee77f0b2 100644 --- a/frontend/e2e/DbManagerPage.ts +++ b/frontend/e2e/DbManagerPage.ts @@ -4,20 +4,22 @@ import { expect, Locator, Page } from '@playwright/test' import type { DbFeatures } from '../src/lib/components/apps/components/display/dbtable/dbFeatures' import { ConfirmationModal, Toast } from './utils' -export async function runDbManagerTests(page: Page, dbFeatures: DbFeatures) { +export async function runDbManagerSimpleCRUDTest(page: Page, dbFeatures: DbFeatures) { let dbManager = new DbManagerPage(page) await dbManager.expectToBeVisible() + let friendTableName = `friend_${Date.now()}` + // Create table const tableEditor = await dbManager.openCreateTableDrawer() - await tableEditor.setTableName('friend') + await tableEditor.setTableName(friendTableName) await tableEditor.addColumn('name', 'TEXT') await tableEditor.createTable() - await Toast.expectSuccess(page, 'friend created') + await Toast.expectSuccess(page, `${friendTableName} created`) // Select and work with the table - await dbManager.selectTable('friend') + await dbManager.selectTable(friendTableName) // Insert a row const insertDrawer = await dbManager.openInsertDrawer() @@ -35,10 +37,10 @@ export async function runDbManagerTests(page: Page, dbFeatures: DbFeatures) { await dataGrid.expectCellValue('Bob') // Delete the table - const actionsMenu = await dbManager.openActionsMenu('friend') + const actionsMenu = await dbManager.openActionsMenu(friendTableName) await actionsMenu.deleteTable() - await Toast.expectSuccess(page, "Table 'friend' deleted successfully") + await Toast.expectSuccess(page, `Table '${friendTableName}' deleted successfully`) } export class DbManagerPage { diff --git a/frontend/e2e/datatable.spec.ts b/frontend/e2e/datatable.spec.ts index af8569e29c..3036056e62 100644 --- a/frontend/e2e/datatable.spec.ts +++ b/frontend/e2e/datatable.spec.ts @@ -1,6 +1,12 @@ import { test, expect, Page } from '@playwright/test' -import { DbManagerPage, runDbManagerTests } from './DbManagerPage' +import { runDbManagerSimpleCRUDTest } from './DbManagerPage' import { getDbFeatures } from '../src/lib/components/apps/components/display/dbtable/dbFeatures' +import { Toast } from './utils' + +test('setup a datatable and ensure db manager works', async ({ page }) => { + await setupNewDataTableAndOpenDbManager(page) + await runDbManagerSimpleCRUDTest(page, dbFeatures) +}) async function setupNewDataTable(page: Page): Promise<{ datatableId: string }> { // Generate unique ID with timestamp @@ -57,8 +63,7 @@ async function setupNewDataTable(page: Page): Promise<{ datatableId: string }> { await confirmBtn.click() // Verify success toast appears - const successToast = page.locator(`.toast-success:has-text("Setup successful")`) - await expect(successToast).toBeVisible({ timeout: 10000 }) + Toast.expectSuccess(page, 'Setup successful') const closeModalBtn = page.locator('button[id="modal-close-button"]') await closeModalBtn.click() @@ -67,22 +72,20 @@ async function setupNewDataTable(page: Page): Promise<{ datatableId: string }> { await saveBtn.click() // Verify success toast appears - const saveSuccessToast = page.locator(`.toast-success:has-text("saved successfully")`) - await expect(saveSuccessToast).toBeVisible({ timeout: 10000 }) + Toast.expectSuccess(page, 'saved successfully') return { datatableId } } -test('setup a datatable and ensure db manager works', async ({ page }) => { - let { datatableId } = await setupNewDataTable(page) +async function setupNewDataTableAndOpenDbManager(page: Page) { + await setupNewDataTable(page) const table = page.locator('table') const lastRow = table.locator('tr').nth(-2) lastRow.locator('button:has-text("Manage")').click() +} - const dbFeatures = getDbFeatures({ - type: 'database', - resourceType: 'postgresql', - resourcePath: '' - }) - await runDbManagerTests(page, dbFeatures) +const dbFeatures = getDbFeatures({ + type: 'database', + resourceType: 'postgresql', + resourcePath: '' }) diff --git a/frontend/e2e/resource-dbmanager.spec.ts b/frontend/e2e/resource-dbmanager.spec.ts index 0e10b4dc00..ecd3664197 100644 --- a/frontend/e2e/resource-dbmanager.spec.ts +++ b/frontend/e2e/resource-dbmanager.spec.ts @@ -1,8 +1,18 @@ import { test, expect, Page } from '@playwright/test' -import { DbManagerPage, runDbManagerTests } from './DbManagerPage' +import { runDbManagerSimpleCRUDTest } from './DbManagerPage' import { getDbFeatures } from '../src/lib/components/apps/components/display/dbtable/dbFeatures' import { DbType } from '../src/lib/components/dbTypes' -import os from 'os' +import { Toast } from './utils' + +test.describe('DB Manager', () => { + for (const dbType of ['postgresql', 'mysql', 'bigquery', 'ms_sql_server', 'snowflake'] as const) { + const dbFeatures = getDbFeatures({ type: 'database', resourceType: dbType, resourcePath: '' }) + test(`setup a ${dbType} resource and ensure db manager works`, async ({ page }) => { + await setupNewResourceAndOpenDbManager(page, dbType) + await runDbManagerSimpleCRUDTest(page, dbFeatures) + }) + } +}) const resourceByDbType = { postgresql: { @@ -25,8 +35,7 @@ async function setupNewResource( resourceType: DbType ): Promise<{ resourceName: string }> { // Generate unique ID with timestamp - const timestamp = Date.now() - const resourceName = `${resourceType}_${timestamp}` + const resourceName = `${resourceType}_${Date.now()}` await page.goto('/resources') @@ -59,26 +68,17 @@ async function setupNewResource( const saveButton = addResourceDrawer.locator('button:has-text("Save")') await saveButton.click() - // Verify success toast appears - const successToast = page.locator(`.toast-success:has-text("Saved resource")`) - await expect(successToast).toBeVisible({ timeout: 10000 }) + await Toast.expectSuccess(page, 'Saved resource') return { resourceName } } -test.describe('DB Manager', () => { - for (const dbType of ['postgresql', 'mysql', 'bigquery', 'ms_sql_server', 'snowflake'] as const) { - test(`setup a ${dbType} resource and ensure db manager works`, async ({ page }) => { - let { resourceName } = await setupNewResource(page, dbType) +async function setupNewResourceAndOpenDbManager(page: Page, dbType: DbType) { + let { resourceName } = await setupNewResource(page, dbType) - const resourceRow = page.locator(`table tr:has-text("${resourceName}")`) - await expect(resourceRow).toBeVisible() + const resourceRow = page.locator(`table tr:has-text("${resourceName}")`) + await expect(resourceRow).toBeVisible() - const manageButton = resourceRow.locator('button:has-text("Manage")') - await manageButton.click() - - const dbFeatures = getDbFeatures({ type: 'database', resourceType: dbType, resourcePath: '' }) - await runDbManagerTests(page, dbFeatures) - }) - } -}) + const manageButton = resourceRow.locator('button:has-text("Manage")') + await manageButton.click() +}