From 6fe7966a911c2b8622af41ddc8dca91eb3821868 Mon Sep 17 00:00:00 2001 From: Raju Udava <86527202+dstala@users.noreply.github.com> Date: Tue, 23 May 2023 15:22:01 +0530 Subject: [PATCH] test: comments & cleanup Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> --- tests/playwright/tests/db/timezone.spec.ts | 55 ++++++++++++++-------- 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/tests/playwright/tests/db/timezone.spec.ts b/tests/playwright/tests/db/timezone.spec.ts index 06e13fc889..4cd5949a06 100644 --- a/tests/playwright/tests/db/timezone.spec.ts +++ b/tests/playwright/tests/db/timezone.spec.ts @@ -57,6 +57,8 @@ async function timezoneSuite(token?: string, skipTableCreate?: boolean) { return { project, table }; } +// with appropriate credentials, connect to external db +// async function connectToExtDb(context: any) { if (isPg(context)) { await api.base.create(context.project.id, { @@ -95,6 +97,8 @@ async function connectToExtDb(context: any) { } } +//////////////////////////////////////////////////////////////////////////////////////////////////////////// + test.describe('Timezone : Japan/Tokyo', () => { let dashboard: DashboardPage; let context: any; @@ -124,10 +128,10 @@ test.describe('Timezone : Japan/Tokyo', () => { /* * This test is to verify the display value of DateTime column in the grid - * when the timezone is set to Asia/Tokyo + * when the timezone is set to Asia/Tokyo (UTC+9) * * The test inserts 3 rows using API - * 1. DateTime inserted without timezone + * 1. DateTime inserted without timezone (treated as UTC) * 2. DateTime inserted with timezone (UTC+4) * 3. DateTime inserted with timezone (UTC-4) * @@ -155,10 +159,10 @@ test.describe('Timezone : Japan/Tokyo', () => { /* * This test is to verify the API read response of DateTime column - * when the timezone is set to Asia/Tokyo + * when the timezone is set to Asia/Tokyo (UTC+9) * * The test inserts 3 rows using API - * 1. DateTime inserted without timezone + * 1. DateTime inserted without timezone (treated as UTC) * 2. DateTime inserted with timezone (UTC+4) * 3. DateTime inserted with timezone (UTC-4) * @@ -179,6 +183,8 @@ test.describe('Timezone : Japan/Tokyo', () => { }); }); +//////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Change browser timezone & locale to Asia/Hong-Kong // test.describe('Timezone : Asia/Hong-kong', () => { @@ -206,10 +212,10 @@ test.describe('Timezone : Asia/Hong-kong', () => { /* * This test is to verify the display value of DateTime column in the grid - * when the timezone is set to Asia/Hong-Kong + * when the timezone is set to Asia/Hong-Kong (UTC+8) * * The test inserts 3 rows using API - * 1. DateTime inserted without timezone + * 1. DateTime inserted without timezone (treated as UTC) * 2. DateTime inserted with timezone (UTC+4) * 3. DateTime inserted with timezone (UTC-4) * @@ -234,7 +240,9 @@ test.describe('Timezone : Asia/Hong-kong', () => { }); }); -test.describe('Timezone', () => { +//////////////////////////////////////////////////////////////////////////////////////////////////////////// + +test.describe('XCDB Timezone', () => { let dashboard: DashboardPage; let context: any; @@ -246,12 +254,14 @@ test.describe('Timezone', () => { test.beforeEach(async ({ page }) => { context = await setup({ page, isEmptyProject: true }); dashboard = new DashboardPage(page, context.project); + + // Apply only for sqlite, as currently- root DB for all instances is SQLite if (!isSqlite(context)) return; const { project } = await timezoneSuite(context.token, true); context.project = project; - // Using API for test preparation was not working + // Kludge: Using API for test preparation was not working // Hence switched over to UI based table creation await dashboard.clickHome(); @@ -271,15 +281,13 @@ test.describe('Timezone', () => { columnHeader: 'DateTime', dateTime: '2021-01-01 08:00:00', }); - - // await dashboard.rootPage.reload(); }); /* * This test is to verify the display value & API response of DateTime column in the grid * when the value inserted is from the UI * - * Note: Timezone for this test is set as Asia/Hong-Kong + * Note: Timezone for this test is set as Asia/Hong-Kong (UTC+8) * * 1. Create table with DateTime column * 2. Insert DateTime value from UI '2021-01-01 08:00:00' @@ -381,6 +389,8 @@ test.describe('Timezone', () => { }); }); +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + async function createTableWithDateTimeColumn(database: string, setTz = false) { if (database === 'pg') { const config = getKnexConfig({ dbName: 'postgres', dbType: 'pg' }); @@ -484,17 +494,12 @@ function getDateTimeInLocalTimeZone(dateString: string) { return outputString; } +// sample +// input: 2021-01-01 10:00:00+05:30 +// output: 2021-01-01 04:30:00+00:00 function getDateTimeInUTCTimeZone(dateString: string) { // create a Date object with the input string - const date = new Date(dateString); - - // get the timezone offset in minutes and convert to milliseconds - // subtract the offset from the provided time in milliseconds for IST - // const offsetMs = date.getTimezoneOffset() * 60 * 1000; - - // adjust the date by the offset - // const adjustedDate = new Date(date.getTime() + offsetMs); - const adjustedDate = new Date(date.getTime()); + const adjustedDate = new Date(dateString); // format the adjusted date as a string in the desired format const outputString = adjustedDate.toISOString().slice(0, 19).replace('T', ' '); @@ -559,6 +564,10 @@ test.describe.serial('External DB - DateTime column', async () => { await createTableWithDateTimeColumn(context.dbType); }); + // ExtDB : DateAdd, DateTime_Diff verification + // - verify display value + // - verify API response value + // test('Formula, verify display value', async () => { await connectToExtDb(context); await dashboard.rootPage.reload(); @@ -656,6 +665,7 @@ test.describe.serial('External DB - DateTime column', async () => { } // verify display value for formula columns (formula-1, formula-2) + // source data : ['2023-04-27 10:00', '2023-04-27 10:00'] await verifyFormula({ formula: ['DATEADD(DatetimeWithoutTz, 1, "day")', 'DATEADD(DatetimeWithTz, 1, "day")'], expectedDisplayValue: ['2023-04-28 10:00', '2023-04-28 10:00'], @@ -706,6 +716,8 @@ test.describe.serial('External DB - DateTime column', async () => { await dashboard.treeView.openTable({ title: 'MyTable' }); if (isSqlite(context)) { + // For SQLite, we assume that the browser timezone is the same as the server timezone + // expectedDisplayValues['sqlite'].DatetimeWithoutTz[0] = getDateTimeInLocalTimeZone( `2023-04-27 10:00:00${formattedOffset}` ); @@ -830,6 +842,9 @@ test.describe('Ext DB MySQL : DB Timezone configured as HKT', () => { test.beforeEach(async ({ page }) => { context = await setup({ page, isEmptyProject: true }); dashboard = new DashboardPage(page, context.project); + + // for PG, we need to restart server after reconfiguring timezone in .conf file + // SQLite, does not support timezone configuration if (!isMysql(context)) { return; }