Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions cypress/component/ContentReferenceWidget.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,9 @@ describe('ContentReferenceWidget', () => {
cy.reply('**/index.php/apps/tables/row/*', rowData)
})

// Click the edit button on the first row
cy.get('@rows').first().find('td.sticky button').click({ force: true })
// Open the row action menu on the first row, then click Edit
cy.get('@rows').first().find('[data-cy="rowActionMenu"] button').click({ force: true })
cy.get('[data-cy="editRowBtn"]').click()

// Get the first field of the Edit Row modal
cy.get('.modal__content').as('editRowModal')
Expand Down
3 changes: 2 additions & 1 deletion cypress/e2e/view-filtering-selection-row-removal.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,8 @@ describe('Filtering in a view by selection columns (Cypress supplement – row r
// # edit checked row
// ## uncheck
cy.intercept({ method: 'PUT', url: '**/apps/tables/row/*' }).as('updateCheckedRow')
cy.contains('[data-cy="ncTable"] [data-cy="customTableRow"]', 'checked row').closest('[data-cy="customTableRow"]').find('[data-cy="editRowBtn"]').click()
cy.contains('[data-cy="ncTable"] [data-cy="customTableRow"]', 'checked row').closest('[data-cy="customTableRow"]').find('[data-cy="rowActionMenu"] button').click()
cy.get('[data-cy="editRowBtn"]').click()
cy.get('[data-cy="editRowModal"] .checkbox-radio-switch').click()
cy.get('[data-cy="editRowSaveButton"]').click()

Expand Down
9 changes: 5 additions & 4 deletions playwright/e2e/column-datetime.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*/

import { test, expect } from '../support/fixtures'
import { createDatetimeColumn, createTable, loadTable, removeColumn } from '../support/commands'
import { createDatetimeColumn, createTable, loadTable, openRowActionMenu, removeColumn } from '../support/commands'

const columnTitle = 'date and time'
const tableTitle = 'Test datetime'
Expand Down Expand Up @@ -32,9 +32,10 @@ test.describe('Test column ' + columnTitle, () => {
await expect(page.locator('.custom-table table tr td div').filter({ hasText: '5:15' }).first()).toBeVisible()

// delete row
await page.locator('.NcTable tr td button').first().click()
await page.locator('button').filter({ hasText: 'Delete' }).click()
await page.locator('button').filter({ hasText: /I really/ }).click({ force: true })
await openRowActionMenu(page, page.locator('[data-cy="customTableRow"]').first())
await page.locator('[data-cy="deleteRowBtn"]').click()
await page.locator('[data-cy="confirmDialog"]').getByRole('button', { name: 'Confirm' }).click()
await expect(page.locator('[data-cy="customTableRow"]')).toHaveCount(0, { timeout: 10000 })

await removeColumn(page, columnTitle)
})
Expand Down
9 changes: 5 additions & 4 deletions playwright/e2e/column-datetimeDate.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*/

import { test, expect } from '../support/fixtures'
import { createDatetimeDateColumn, createTable, loadTable, removeColumn } from '../support/commands'
import { createDatetimeDateColumn, createTable, loadTable, openRowActionMenu, removeColumn } from '../support/commands'

const columnTitle = 'date'
const tableTitle = 'Test datetimeDate'
Expand All @@ -29,9 +29,10 @@ test.describe('Test column ' + columnTitle, () => {
await expect(page.locator('.custom-table table tr td div').filter({ hasText: '2023' }).first()).toBeVisible()

// delete row
await page.locator('.NcTable tr td button').first().click()
await page.locator('button').filter({ hasText: 'Delete' }).click()
await page.locator('button').filter({ hasText: /I really/ }).click({ force: true })
await openRowActionMenu(page, page.locator('[data-cy="customTableRow"]').first())
await page.locator('[data-cy="deleteRowBtn"]').click()
await page.locator('[data-cy="confirmDialog"]').getByRole('button', { name: 'Confirm' }).click()
await expect(page.locator('[data-cy="customTableRow"]')).toHaveCount(0, { timeout: 10000 })

await removeColumn(page, columnTitle)
})
Expand Down
9 changes: 5 additions & 4 deletions playwright/e2e/column-datetimeTime.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*/

import { test, expect } from '../support/fixtures'
import { createDatetimeTimeColumn, createTable, loadTable, removeColumn } from '../support/commands'
import { createDatetimeTimeColumn, createTable, loadTable, openRowActionMenu, removeColumn } from '../support/commands'

const columnTitle = 'time'
const tableTitle = 'Test datetimeTime'
Expand All @@ -27,9 +27,10 @@ test.describe('Test column ' + columnTitle, () => {
await expect(page.locator('.custom-table table tr td div').filter({ hasText: '5:15' }).first()).toBeVisible()

// delete row
await page.locator('.NcTable tr td button').first().click()
await page.locator('button').filter({ hasText: 'Delete' }).click()
await page.locator('button').filter({ hasText: /I really/ }).click({ force: true })
await openRowActionMenu(page, page.locator('[data-cy="customTableRow"]').first())
await page.locator('[data-cy="deleteRowBtn"]').click()
await page.locator('[data-cy="confirmDialog"]').getByRole('button', { name: 'Confirm' }).click()
await expect(page.locator('[data-cy="customTableRow"]')).toHaveCount(0, { timeout: 10000 })

await removeColumn(page, columnTitle)
})
Expand Down
16 changes: 9 additions & 7 deletions playwright/e2e/column-number.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*/

import { test, expect } from '../support/fixtures'
import { createNumberColumn, createTable, loadTable, removeColumn } from '../support/commands'
import { createNumberColumn, createTable, loadTable, openRowActionMenu, removeColumn } from '../support/commands'

const columnTitle = 'num1'
const tableTitle = 'Test number column'
Expand All @@ -26,9 +26,10 @@ test.describe('Test column number', () => {
await expect(page.locator('.custom-table table tr td div').filter({ hasText: '21.00' }).first()).toBeVisible()

// delete row
await page.locator('.NcTable tr td button').first().click()
await page.locator('button').filter({ hasText: 'Delete' }).click()
await page.locator('button').filter({ hasText: /I really/ }).click({ force: true })
await openRowActionMenu(page, page.locator('[data-cy="customTableRow"]').first())
await page.locator('[data-cy="deleteRowBtn"]').click()
await page.locator('[data-cy="confirmDialog"]').getByRole('button', { name: 'Confirm' }).click()
await expect(page.locator('[data-cy="customTableRow"]')).toHaveCount(0, { timeout: 10000 })

// insert row with float value
await page.locator('button').filter({ hasText: 'Create row' }).click()
Expand All @@ -38,9 +39,10 @@ test.describe('Test column number', () => {
await expect(page.locator('.custom-table table tr td div').filter({ hasText: '21.30' }).first()).toBeVisible()

// delete row
await page.locator('.NcTable tr td button').first().click()
await page.locator('button').filter({ hasText: 'Delete' }).click()
await page.locator('button').filter({ hasText: /I really/ }).click({ force: true })
await openRowActionMenu(page, page.locator('[data-cy="customTableRow"]').first())
await page.locator('[data-cy="deleteRowBtn"]').click()
await page.locator('[data-cy="confirmDialog"]').getByRole('button', { name: 'Confirm' }).click()
await expect(page.locator('[data-cy="customTableRow"]')).toHaveCount(0, { timeout: 10000 })

await removeColumn(page, columnTitle)
})
Expand Down
21 changes: 12 additions & 9 deletions playwright/e2e/column-selection-multi.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*/

import { test, expect } from '../support/fixtures'
import { createSelectionMultiColumn, createTable, loadTable, removeColumn } from '../support/commands'
import { createSelectionMultiColumn, createTable, loadTable, openRowActionMenu, removeColumn } from '../support/commands'

const columnTitle = 'multi selection'
const tableTitle = 'Test number column'
Expand Down Expand Up @@ -42,27 +42,30 @@
await expect(page.locator('.custom-table table tr td .cell-multi-selection').filter({ hasText: 'third option' }).first()).toBeVisible()

// delete first row
await page.locator('.NcTable tr td button').first().click()
await page.locator('button').filter({ hasText: 'Delete' }).click()
await page.locator('button').filter({ hasText: /I really/ }).click({ force: true })
await openRowActionMenu(page, page.locator('[data-cy="customTableRow"]').first())
await page.locator('[data-cy="deleteRowBtn"]').click()
await page.locator('[data-cy="confirmDialog"]').getByRole('button', { name: 'Confirm' }).click()
await expect(page.locator('[data-cy="customTableRow"]')).toHaveCount(1, { timeout: 10000 })

await expect(page.locator('.custom-table table tr td .cell-multi-selection', { hasText: 'first option' })).toBeHidden()
await expect(page.locator('.custom-table table tr td .cell-multi-selection', { hasText: 'second option' })).toBeHidden()

// edit second row (which is now first row)
await page.locator('.NcTable tr td button').first().click()
await openRowActionMenu(page, page.locator('[data-cy="customTableRow"]').first())
await page.locator('[data-cy="editRowBtn"]').click()
await page.locator('.modal__content .slot input').first().click()
await page.locator('ul.vs__dropdown-menu li span[title="first option"]').first().click()
await page.locator('.modal__content .title').first().click()
await page.locator('button').filter({ hasText: 'Save' }).click()

await expect(page.locator('.custom-table table tr td .cell-multi-selection').filter({ hasText: 'first option' }).first()).toBeVisible()

Check failure on line 61 in playwright/e2e/column-selection-multi.spec.ts

View workflow job for this annotation

GitHub Actions / Playwright (stable33)

[chromium] › playwright/e2e/column-selection-multi.spec.ts:14:2 › Test column multi selection › Insert and test rows

1) [chromium] › playwright/e2e/column-selection-multi.spec.ts:14:2 › Test column multi selection › Insert and test rows Error: expect(locator).toBeVisible() failed Locator: locator('.custom-table table tr td .cell-multi-selection').filter({ hasText: 'first option' }).first() Expected: visible Timeout: 5000ms Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 5000ms - waiting for locator('.custom-table table tr td .cell-multi-selection').filter({ hasText: 'first option' }).first() 59 | await page.locator('button').filter({ hasText: 'Save' }).click() 60 | > 61 | await expect(page.locator('.custom-table table tr td .cell-multi-selection').filter({ hasText: 'first option' }).first()).toBeVisible() | ^ 62 | await expect(page.locator('.custom-table table tr td .cell-multi-selection').filter({ hasText: 'third option' }).first()).toBeVisible() 63 | 64 | // delete first row at /home/runner/work/tables/tables/playwright/e2e/column-selection-multi.spec.ts:61:125
await expect(page.locator('.custom-table table tr td .cell-multi-selection').filter({ hasText: 'third option' }).first()).toBeVisible()

// delete first row
await page.locator('.NcTable tr td button').first().click()
await page.locator('button').filter({ hasText: 'Delete' }).click()
await page.locator('button').filter({ hasText: /I really/ }).click({ force: true })
await openRowActionMenu(page, page.locator('[data-cy="customTableRow"]').first())
await page.locator('[data-cy="deleteRowBtn"]').click()
await page.locator('[data-cy="confirmDialog"]').getByRole('button', { name: 'Confirm' }).click()
await expect(page.locator('[data-cy="customTableRow"]')).toHaveCount(0, { timeout: 10000 })

await removeColumn(page, columnTitle)
})
Expand All @@ -79,6 +82,6 @@
await page.locator('button').filter({ hasText: 'Save' }).click()

await expect(page.locator('.custom-table table tr td .cell-multi-selection').first()).toBeVisible()
await expect(page.locator('.NcTable tr td button').first()).toBeVisible()
await expect(page.locator('[data-cy="customTableRow"]').first()).toBeVisible()
})
})
8 changes: 5 additions & 3 deletions playwright/e2e/column-selection.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*/

import { test, expect } from '../support/fixtures'
import { createSelectionColumn, createTable, deleteTable, loadTable } from '../support/commands'
import { createSelectionColumn, createTable, deleteTable, loadTable, openRowActionMenu } from '../support/commands'

const columnTitle = 'single selection'
const tableTitle = 'Test number column'
Expand Down Expand Up @@ -37,7 +37,9 @@ test.describe('Test column ' + columnTitle, () => {
await expect(page.locator('[data-cy="ncTable"] tr td div').filter({ hasText: 'third option' }).first()).toBeVisible()

// edit the explicitly created row
await page.locator('[data-cy="ncTable"] [data-cy="customTableRow"]:has-text("👋 third option")').locator('[data-cy="editRowBtn"]').click()
const thirdOptionRow = page.locator('[data-cy="ncTable"] [data-cy="customTableRow"]').filter({ hasText: '👋 third option' }).first()
await openRowActionMenu(page, thirdOptionRow)
await page.locator('[data-cy="editRowBtn"]').click()
await page.locator('[data-cy="editRowModal"] .slot input').first().click()
await page.locator('ul.vs__dropdown-menu li span[title="first option"]').first().click()
await page.locator('[data-cy="editRowSaveButton"]').click()
Expand All @@ -59,6 +61,6 @@ test.describe('Test column ' + columnTitle, () => {
await page.locator('[data-cy="createRowSaveButton"]').click()

await expect(page.locator('[data-cy="ncTable"] tr td div').first()).toBeVisible()
await expect(page.locator('[data-cy="ncTable"] [data-cy="editRowBtn"]').first()).toBeVisible()
await expect(page.locator('[data-cy="ncTable"] [data-cy="customTableRow"]').first()).toBeVisible()
})
})
6 changes: 4 additions & 2 deletions playwright/e2e/column-text-link.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import * as fs from 'fs'
import * as path from 'path'
import { fileURLToPath } from 'url'
import { uploadFile } from '../support/api'
import { createTable, createTextLinkColumn, loadTable } from '../support/commands'
import { createTable, createTextLinkColumn, loadTable, openRowActionMenu } from '../support/commands'
const __dirname = path.dirname(fileURLToPath(import.meta.url))

test.describe('Test column text-link', () => {
Expand Down Expand Up @@ -44,7 +44,9 @@ test.describe('Test column text-link', () => {
await expect(page.locator('tr td a').filter({ hasText: 'nextcloud' }).first()).toBeVisible()
await expect(page.locator('tr td a').filter({ hasText: 'NC_server_test' }).first()).toBeVisible()

await page.locator('[data-cy="ncTable"] [data-cy="editRowBtn"]').first().click({ force: true })
const firstRow = page.locator('[data-cy="ncTable"] [data-cy="customTableRow"]').first()
await openRowActionMenu(page, firstRow)
await page.locator('[data-cy="editRowBtn"]').click()
const editDialog = page.getByRole('dialog', { name: 'Edit row' })
await editDialog.waitFor({ state: 'visible' })

Expand Down
6 changes: 4 additions & 2 deletions playwright/e2e/column-usergroup.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

import { test, expect } from '../support/fixtures'
import { createRandomUser } from '../support/api'
import { createTable, createUsergroupColumn, loadTable } from '../support/commands'
import { createTable, createUsergroupColumn, loadTable, openRowActionMenu } from '../support/commands'

const columnTitle = 'usergroup'
const tableTitlePrefix = 'Test usergroup'
Expand Down Expand Up @@ -59,7 +59,9 @@
await page.locator('[data-cy="createRowSaveButton"]').click()
await expect(page.locator('[data-cy="ncTable"] table tr td .user-bubble__name').filter({ hasText: user.userId }).first()).toBeVisible()

await page.locator('[data-cy="ncTable"] [data-cy="editRowBtn"]').first().click()
const firstRow = page.locator('[data-cy="ncTable"] [data-cy="customTableRow"]').first()
await openRowActionMenu(page, firstRow)
await page.locator('[data-cy="editRowBtn"]').click()
// deselect all
const deselectButtons = await page.locator('[data-cy="usergroupRowSelect"] .vs__deselect').all()
for (const button of deselectButtons) {
Expand All @@ -71,7 +73,7 @@
await page.locator(`.vs__dropdown-menu [id="${nonLocalUser.userId}"]`).click()
await page.locator('[data-cy="editRowSaveButton"]').click()

await expect(page.locator('[data-cy="ncTable"] table tr td .user-bubble__name', { hasText: user.userId })).toBeHidden()

Check failure on line 76 in playwright/e2e/column-usergroup.spec.ts

View workflow job for this annotation

GitHub Actions / Playwright (master)

[chromium] › playwright/e2e/column-usergroup.spec.ts:49:2 › Test column usergroup › Create and edit rows

1) [chromium] › playwright/e2e/column-usergroup.spec.ts:49:2 › Test column usergroup › Create and edit rows Error: expect(locator).toBeHidden() failed Locator: locator('[data-cy="ncTable"] table tr td .user-bubble__name').filter({ hasText: 'user_1775944624459_lstl39x0' }) Expected: hidden Received: visible Timeout: 5000ms Call log: - Expect "toBeHidden" with timeout 5000ms - waiting for locator('[data-cy="ncTable"] table tr td .user-bubble__name').filter({ hasText: 'user_1775944624459_lstl39x0' }) 9 × locator resolved to <span data-v-7942d6b6="" class="user-bubble__name"> user_1775944624459_lstl39x0 </span> - unexpected value "visible" 74 | await page.locator('[data-cy="editRowSaveButton"]').click() 75 | > 76 | await expect(page.locator('[data-cy="ncTable"] table tr td .user-bubble__name', { hasText: user.userId })).toBeHidden() | ^ 77 | await expect(page.locator('[data-cy="ncTable"] table tr td .user-bubble__name').filter({ hasText: nonLocalUser.userId }).first()).toBeVisible() 78 | }) 79 | }) at /home/runner/work/tables/tables/playwright/e2e/column-usergroup.spec.ts:76:110
await expect(page.locator('[data-cy="ncTable"] table tr td .user-bubble__name').filter({ hasText: nonLocalUser.userId }).first()).toBeVisible()
})
})
9 changes: 6 additions & 3 deletions playwright/e2e/context.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import {
loadContext,
loadTable,
openContextEditModal,
openRowActionMenu,
} from '../support/commands'
import { login } from '../support/login'

Expand Down Expand Up @@ -300,9 +301,11 @@ test.describe('Manage a context', () => {

await expect(page.locator('[data-cy="ncTable"] table').filter({ hasText: 'first row' })).toBeVisible()

await page.locator('[data-cy="ncTable"] [data-cy="customTableRow"]').filter({ hasText: 'first row' }).locator('[data-cy="editRowBtn"]').click()
await page.locator('[data-cy="editRowDeleteButton"]').click()
await page.locator('[data-cy="editRowDeleteConfirmButton"]').click()
const firstRow = page.locator('[data-cy="ncTable"] [data-cy="customTableRow"]').filter({ hasText: 'first row' }).first()
await openRowActionMenu(page, firstRow)
await page.locator('[data-cy="deleteRowBtn"]').click()
await page.locator('[data-cy="confirmDialog"]').getByRole('button', { name: 'Confirm' }).click()
await page.locator('[data-cy="confirmDialog"]').waitFor({ state: 'hidden', timeout: 10000 }).catch(() => {})

await expect(page.locator('[data-cy="ncTable"] table', { hasText: 'first row' })).toBeHidden()
})
Expand Down
61 changes: 58 additions & 3 deletions playwright/e2e/tables-rows.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { test, expect } from '../support/fixtures'
import type { BrowserContext, Page } from '@playwright/test'
import { createRandomUser } from '../support/api'
import { login } from '../support/login'
import { createTable, createTextLineColumn, fillInValueTextLine, loadTable, openCreateRowModal } from '../support/commands'
import { createTable, createTextLineColumn, fillInValueTextLine, loadTable, openCreateRowModal, openRowActionMenu } from '../support/commands'

test.describe('Rows for a table', () => {
test.describe.configure({ mode: 'serial' })
Expand Down Expand Up @@ -91,7 +91,9 @@ test.describe('Rows for a table', () => {
).toHaveCount(0, { timeout: 10000 })

// Delete
await page.locator('[data-cy="ncTable"] [data-cy="customTableRow"]').first().locator('[data-cy="editRowBtn"]').click()
const rowToDelete = page.locator('[data-cy="ncTable"] [data-cy="customTableRow"]').first()
await openRowActionMenu(page, rowToDelete)
await page.locator('[data-cy="editRowBtn"]').click()

const deleteReqPromise = page.waitForResponse(r => r.url().includes('/apps/tables/row/') && r.request().method() === 'DELETE')
await page.locator('[data-cy="editRowDeleteButton"]').click()
Expand Down Expand Up @@ -129,14 +131,67 @@ test.describe('Rows for a table', () => {
await page.locator('[data-cy="createRowSaveButton"]').click()

await loadTable(page, 'to do list')
await page.locator('[data-cy="ncTable"] [data-cy="customTableRow"]:has-text("My first task")').locator('[data-cy="editRowBtn"]').click()
const mandatoryRow = page.locator('[data-cy="ncTable"] [data-cy="customTableRow"]').filter({ hasText: 'My first task' }).first()
await openRowActionMenu(page, mandatoryRow)
await page.locator('[data-cy="editRowBtn"]').click()
await expect(page.locator('[data-cy="editRowModal"] .notecard--error')).toBeHidden()

await page.locator('[data-cy="editRowModal"] .slot input').first().clear()
await expect(page.locator('[data-cy="editRowModal"] .notecard--error')).toBeVisible()
await expect(page.locator('[data-cy="editRowSaveButton"]')).toBeDisabled()
})

test('Delete row via row action menu', async () => {
await page.goto('/index.php/apps/tables')
await createTable(page, 'Row delete menu table')
await createTextLineColumn(page, 'title', '', '', true)

await openCreateRowModal(page)
await fillInValueTextLine(page, 'title', 'Row to delete')
await page.locator('[data-cy="createRowSaveButton"]').click()
await expect(page.locator('[data-cy="createRowModal"]')).toBeHidden()

const rowToDelete = page.locator('[data-cy="ncTable"] [data-cy="customTableRow"]').filter({ hasText: 'Row to delete' }).first()
await expect(rowToDelete).toBeVisible({ timeout: 10000 })

const deleteReqPromise = page.waitForResponse(r => r.url().includes('/apps/tables/row/') && r.request().method() === 'DELETE')
await openRowActionMenu(page, rowToDelete)
await page.locator('[data-cy="deleteRowBtn"]').click()
await page.locator('[data-cy="confirmDialog"]').getByRole('button', { name: 'Confirm' }).click()
await deleteReqPromise

await expect(page.locator('[data-cy="ncTable"] [data-cy="customTableRow"]')).toHaveCount(0, { timeout: 10000 })
})

test('Copy row via row action menu', async () => {
await page.goto('/index.php/apps/tables')
await createTable(page, 'Row copy menu table')
await createTextLineColumn(page, 'title', '', '', true)

await openCreateRowModal(page)
await fillInValueTextLine(page, 'title', 'Original row')
await page.locator('[data-cy="createRowSaveButton"]').click()
await expect(page.locator('[data-cy="createRowModal"]')).toBeHidden()

const originalRow = page.locator('[data-cy="ncTable"] [data-cy="customTableRow"]').filter({ hasText: 'Original row' }).first()
await expect(originalRow).toBeVisible({ timeout: 10000 })

// Open copy dialog via the row action menu
await openRowActionMenu(page, originalRow)
await page.locator('[data-cy="copyRowBtn"]').click()

// Verify create modal opens with pre-filled value
await expect(page.locator('[data-cy="createRowModal"]')).toBeVisible({ timeout: 10000 })
await expect(page.locator('[data-cy="createRowModal"] input').first()).toHaveValue('Original row')

// Save the copy
await page.locator('[data-cy="createRowSaveButton"]').click()
await expect(page.locator('[data-cy="createRowModal"]')).toBeHidden()

// Both original and copy should be visible
await expect(page.locator('[data-cy="ncTable"] [data-cy="customTableRow"]').filter({ hasText: 'Original row' })).toHaveCount(2, { timeout: 10000 })
})

test('Inline Edit', async () => {
await page.goto('/index.php/apps/tables')
// Create a test row first
Expand Down
Loading
Loading