This commit is contained in:
Diego Imbert
2026-01-08 13:16:40 +01:00
parent 2c2af73215
commit b7c1ca3bb9
3 changed files with 45 additions and 40 deletions
+8 -6
View File
@@ -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 {
+16 -13
View File
@@ -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: ''
})
+21 -21
View File
@@ -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()
}