mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-09-11 00:06:06 +00:00
refacto
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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: ''
|
||||
})
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user