From 630aeba4622e327cf46c6e57cbaec20dacc19cc1 Mon Sep 17 00:00:00 2001 From: Ramesh Mane <101566080+rameshmane7218@users.noreply.github.com> Date: Thu, 11 Jan 2024 12:39:53 +0000 Subject: [PATCH] test(multi-field): search field test cases --- .../pages/Dashboard/Details/FieldsPage.ts | 26 ++++---- .../db/features/multiFieldEditor.spec.ts | 63 ++++++++++++++++--- 2 files changed, 70 insertions(+), 19 deletions(-) diff --git a/tests/playwright/pages/Dashboard/Details/FieldsPage.ts b/tests/playwright/pages/Dashboard/Details/FieldsPage.ts index c9aac907c4..23f0c6fb81 100644 --- a/tests/playwright/pages/Dashboard/Details/FieldsPage.ts +++ b/tests/playwright/pages/Dashboard/Details/FieldsPage.ts @@ -48,6 +48,7 @@ export class FieldsPage extends BasePage { title, type = 'SingleLineText', isUpdateMode = false, + saveChanges = true, formula = '', qrCodeValueColumnTitle = '', barcodeValueColumnTitle = '', @@ -65,6 +66,7 @@ export class FieldsPage extends BasePage { title: string; type?: string; isUpdateMode?: boolean; + saveChanges?: boolean; formula?: string; qrCodeValueColumnTitle?: string; barcodeValueColumnTitle?: string; @@ -196,19 +198,21 @@ export class FieldsPage extends BasePage { break; } - await this.saveChanges(); + if (saveChanges) { + await this.saveChanges(); - const fieldsText = await this.getAllFieldText(); + const fieldsText = await this.getAllFieldText(); - if (insertAboveColumnTitle) { - // verify field inserted above the target field - expect(fieldsText[fieldsText.findIndex(title => title.startsWith(insertAboveColumnTitle)) - 1]).toBe(title); - } else if (insertBelowColumnTitle) { - // verify field inserted below the target field - expect(fieldsText[fieldsText.findIndex(title => title.startsWith(insertBelowColumnTitle)) + 1]).toBe(title); - } else { - // verify field inserted at the end - expect(fieldsText[fieldsText.length - 1]).toBe(title); + if (insertAboveColumnTitle) { + // verify field inserted above the target field + expect(fieldsText[fieldsText.findIndex(title => title.startsWith(insertAboveColumnTitle)) - 1]).toBe(title); + } else if (insertBelowColumnTitle) { + // verify field inserted below the target field + expect(fieldsText[fieldsText.findIndex(title => title.startsWith(insertBelowColumnTitle)) + 1]).toBe(title); + } else { + // verify field inserted at the end + expect(fieldsText[fieldsText.length - 1]).toBe(title); + } } } diff --git a/tests/playwright/tests/db/features/multiFieldEditor.spec.ts b/tests/playwright/tests/db/features/multiFieldEditor.spec.ts index 5469ee9c49..ef9b653025 100644 --- a/tests/playwright/tests/db/features/multiFieldEditor.spec.ts +++ b/tests/playwright/tests/db/features/multiFieldEditor.spec.ts @@ -1,26 +1,21 @@ import { expect, test } from '@playwright/test'; import { DashboardPage } from '../../../pages/Dashboard'; -import { GridPage } from '../../../pages/Dashboard/Grid'; import setup, { unsetup } from '../../../setup'; import { FieldsPage } from '../../../pages/Dashboard/Details/FieldsPage'; import { getTextExcludeIconText } from '../../utils/general'; test.describe('Multi Field Editor', () => { - let dashboard: DashboardPage, grid: GridPage, fields: FieldsPage; + let dashboard: DashboardPage, fields: FieldsPage; let context: any; const defaultFieldName = 'Multi Field Editor'; test.beforeEach(async ({ page }) => { context = await setup({ page, isEmptyProject: true }); dashboard = new DashboardPage(page, context.base); - grid = dashboard.grid; fields = dashboard.details.fields; await dashboard.treeView.createTable({ title: 'Multifield', baseTitle: context.base.title }); await openMultiFieldOfATable(); - - // Add New Field - await fields.createOrUpdate({ title: defaultFieldName }); }); test.afterEach(async () => { @@ -50,16 +45,47 @@ test.describe('Multi Field Editor', () => { await openMultiFieldOfATable(); }; - test('Add New field and update', async () => { + const searchAndVerifyFields = async ({ + searchQuery, + expectedFields, + }: { + searchQuery: string; + expectedFields: string[]; + }) => { + await fields.searchFieldInput.fill(searchQuery); + + const allFields = await fields.getAllFieldText(); + + for (let i = 0; i < allFields.length; i++) { + expect(allFields[i]).toBe(expectedFields[i]); + } + }; + + test('Add New field, update and reset ', async () => { // Add New Field await fields.createOrUpdate({ title: 'Name' }); // Update Field title await fields.getField({ title: 'Name' }).click(); await fields.createOrUpdate({ title: 'Updated Name', isUpdateMode: true }); + + // verify grid column header + const fieldsText = await fields.getAllFieldText(); + await verifyGridColumnHeaders({ fields: fieldsText }); + + // add new fields then reset changes and verify + await fields.createOrUpdate({ title: 'field to reset', saveChanges: false }); + await fields.createOrUpdate({ title: 'Random', saveChanges: false }); + await fields.resetFieldChangesButton.click(); + + // verify with old fields + await verifyGridColumnHeaders({ fields: fieldsText }); }); - test.only('Field operations: CopyId, Duplicate, InsertAbove, InsertBelow, Hide', async () => { + test('Field operations: CopyId, Duplicate, InsertAbove, InsertBelow, Hide', async () => { + // Add New Field + await fields.createOrUpdate({ title: defaultFieldName }); + // copy-id and verify const fieldId = await fields.getFieldId({ title: defaultFieldName }); await fields.selectFieldAction({ title: defaultFieldName, action: 'copy-id' }); @@ -92,4 +118,25 @@ test.describe('Multi Field Editor', () => { await verifyGridColumnHeaders({ fields: fieldsText.filter(field => field !== defaultFieldName) }); }); + + test('Search field and verify', async () => { + const fieldList = ['Single Line Text', 'Long text', 'Rich text', 'Number', 'Percentage']; + + for (const field of fieldList) { + await fields.createOrUpdate({ title: field, saveChanges: false }); + } + await fields.saveChanges(); + + let searchQuery = 'text'; + await searchAndVerifyFields({ + searchQuery, + expectedFields: fieldList.filter(field => field.toLowerCase().includes(searchQuery.toLowerCase())), + }); + + searchQuery = 'Rich text'; + await searchAndVerifyFields({ + searchQuery, + expectedFields: fieldList.filter(field => field.toLowerCase().includes(searchQuery.toLowerCase())), + }); + }); });