import { test } from '@playwright/test'; import { DashboardPage } from '../pages/Dashboard'; import setup from '../setup'; // Add formula to be verified here & store expected results for 5 rows // Column data from City table (Sakila DB) /** * City LastUpdate Address List Country * A Corua (La Corua) 2006-02-15 04:45:25 939 Probolinggo Loop Spain * Abha 2006-02-15 04:45:25 733 Mandaluyong Place Saudi Arabia * Abu Dhabi 2006-02-15 04:45:25 535 Ahmadnagar Manor United Arab Emirates * Acua 2006-02-15 04:45:25 1789 Saint-Denis Parkway Mexico * Adana 2006-02-15 04:45:25 663 Baha Blanca Parkway Turkey */ const formulaData = [ { formula: '1 + 1', result: ['2', '2', '2', '2', '2'], }, { formula: 'ADD({CityId}, {CountryId}) + AVG({CityId}, {CountryId}) + LEN({City})', result: ['150', '130', '165', '100', '158'], }, { formula: `WEEKDAY("2022-07-19")`, result: ['1', '1', '1', '1', '1'], }, { formula: `WEEKDAY("2022-07-19", "sunday")`, result: ['2', '2', '2', '2', '2'], }, { formula: `CONCAT(UPPER({City}), LOWER({City}), TRIM(' trimmed '))`, result: [ 'A CORUA (LA CORUA)a corua (la corua)trimmed', 'ABHAabhatrimmed', 'ABU DHABIabu dhabitrimmed', 'ACUAacuatrimmed', 'ADANAadanatrimmed', ], }, { formula: `CEILING(1.4) + FLOOR(1.6) + ROUND(2.5) + MOD({CityId}, 3) + MIN({CityId}, {CountryId}) + MAX({CityId}, {CountryId})`, result: ['95', '92', '110', '71', '110'], }, { formula: `LOG({CityId}) + EXP({CityId}) + POWER({CityId}, 3) + SQRT({CountryId})`, result: ['13.04566088154786', '25.137588417628013', '58.23402483297667', '127.73041108667896', '284.8714548168068'], }, { formula: `NOW()`, result: ['1', '1', '1', '1', '1'], }, ]; test.describe('Virtual Columns', () => { let dashboard: DashboardPage; let context: any; test.beforeEach(async ({ page }) => { context = await setup({ page }); dashboard = new DashboardPage(page, context.project); }); async function formulaResultVerify({ title, result }: { title: string; result: string[] }) { for (let i = 0; i < result.length; i++) { await dashboard.grid.cell.verify({ index: i, columnHeader: title, value: result[i], }); } } test('Formula', async () => { // close 'Team & Auth' tab await dashboard.closeTab({ title: 'Team & Auth' }); await dashboard.treeView.openTable({ title: 'City' }); // Create formula column await dashboard.grid.column.create({ title: 'NC_MATH_0', type: 'Formula', formula: formulaData[1].formula, }); // verify different formula's for (let i = 1; i < formulaData.length; i++) { await dashboard.grid.column.openEdit({ title: 'NC_MATH_0', type: 'Formula', formula: formulaData[i].formula, }); await dashboard.grid.column.save({ isUpdated: true }); if (formulaData[i].formula !== `NOW()`) { await formulaResultVerify({ title: 'NC_MATH_0', result: formulaData[i].result, }); } } await dashboard.closeTab({ title: 'City' }); }); });