From 73b7168011fbb356b81a2eafcb97f971080619ea Mon Sep 17 00:00:00 2001 From: Raju Udava <86527202+dstala@users.noreply.github.com> Date: Thu, 30 Mar 2023 21:41:18 +0530 Subject: [PATCH] test: webhook for bulk apis Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> --- tests/playwright/tests/01-webhook.spec.ts | 65 +++++++++++++---------- 1 file changed, 37 insertions(+), 28 deletions(-) diff --git a/tests/playwright/tests/01-webhook.spec.ts b/tests/playwright/tests/01-webhook.spec.ts index 148ec61134..9573ffa477 100644 --- a/tests/playwright/tests/01-webhook.spec.ts +++ b/tests/playwright/tests/01-webhook.spec.ts @@ -423,20 +423,30 @@ test.describe.serial('Webhook', () => { }); test('Bulk operations', async ({ request, page }) => { - async function verifyBulkOperationTrigger(rsp, type, valueCounter, oldValueCounter?) { + async function verifyBulkOperationTrigger(rsp, type) { for (let i = 0; i < rsp.length; i++) { - expect(rsp[i].type === type); - expect(rsp[i].data.table_name === 'numberBased'); - expect(rsp[i].data.view_name === 'numberBased'); - expect(rsp[i].data.rows.length === 25); - for (let j = 0; j < rsp[i].data.rows.length; j++) { - expect(rsp[i].data.rows[j].Number === (i * 25 + j + 1) * valueCounter); - } + expect(rsp[i].type).toBe(type); + expect(rsp[i].data.table_name).toBe('numberBased'); + expect(rsp[i].data.view_name).toBe('numberBased'); + + // only for insert, rows inserted will not be returned in response. just count + if (type === 'records.after.bulkInsert') { + expect(rsp[i].data.rows_inserted).toBe(50); + } else if (type === 'records.after.bulkUpdate') { + expect(rsp[i].data.rows.length).toBe(50); + expect(rsp[i].data.previous_rows.length).toBe(50); + + // verify records + for (let j = 0; j < rsp[i].data.rows.length; j++) { + expect(rsp[i].data.rows[j].Number).toBe(111 * (j + 1)); + expect(rsp[i].data.previous_rows[j].Number).toBe(100 * (j + 1) - 111); + } + } else if (type === 'records.after.bulkDelete') { + expect(rsp[i].data.rows.length).toBe(50); - if (oldValueCounter) { - expect(rsp[i].data.previous_rows.length === 25); - for (let j = 0; j < rsp[i].data.previous_rows.length; j++) { - expect(rsp[i].data.previous_rows[j].Number === (i * 25 + j + 1) * oldValueCounter); + // verify records + for (let j = 0; j < rsp[i].data.rows.length; j++) { + expect(rsp[i].data.rows[j].Number).toBe(111 * (j + 1)); } } } @@ -479,15 +489,15 @@ test.describe.serial('Webhook', () => { // create after insert webhook await webhook.create({ title: 'hook-1', - event: 'After Insert', + event: 'After Bulk Insert', }); await webhook.create({ title: 'hook-1', - event: 'After Update', + event: 'After Bulk Update', }); await webhook.create({ title: 'hook-1', - event: 'After Delete', + event: 'After Bulk Delete', }); await clearServerData({ request }); @@ -498,8 +508,8 @@ test.describe.serial('Webhook', () => { await api.dbTableRow.bulkCreate('noco', context.project.id, table.id, rowAttributesForInsert); await page.reload(); // 50 records inserted, we expect 2 webhook responses - let rsp = await getWebhookResponses({ request, count: 2 }); - await verifyBulkOperationTrigger(rsp, 'records.after.insert', 100); + let rsp = await getWebhookResponses({ request, count: 1 }); + await verifyBulkOperationTrigger(rsp, 'records.after.bulkInsert'); // bulk update all rows await clearServerData({ request }); @@ -512,8 +522,8 @@ test.describe.serial('Webhook', () => { await api.dbTableRow.bulkUpdate('noco', context.project.id, table.id, rowAttributesForUpdate); await page.reload(); // 50 records updated, we expect 2 webhook responses - rsp = await getWebhookResponses({ request, count: 2 }); - await verifyBulkOperationTrigger(rsp, 'records.after.update', 111, 100); + rsp = await getWebhookResponses({ request, count: 1 }); + await verifyBulkOperationTrigger(rsp, 'records.after.bulkUpdate'); // bulk delete all rows await clearServerData({ request }); @@ -521,8 +531,8 @@ test.describe.serial('Webhook', () => { await api.dbTableRow.bulkDelete('noco', context.project.id, table.id, rowAttributesForDelete); await page.reload(); - rsp = await getWebhookResponses({ request, count: 2 }); - await verifyBulkOperationTrigger(rsp, 'records.after.delete', 111); + rsp = await getWebhookResponses({ request, count: 1 }); + await verifyBulkOperationTrigger(rsp, 'records.after.bulkDelete'); }); test('Virtual columns', async ({ request, page }) => { @@ -655,7 +665,6 @@ test.describe.serial('Webhook', () => { // edit first record await dashboard.grid.editRow({ index: 0, columnHeader: 'Country', value: 'INDIA', networkValidation: false }); const rsp = await getWebhookResponses({ request, count: 1 }); - console.log(rsp); const expectedData = { type: 'records.after.update', @@ -666,8 +675,8 @@ test.describe.serial('Webhook', () => { { Id: 1, Country: 'India', - CountryCode: 1, - CityCodeRollup: 2, + CountryCode: '1', + CityCodeRollup: '2', CityCodeFormula: 100, CityList: [ { @@ -679,15 +688,15 @@ test.describe.serial('Webhook', () => { City: 'Pune', }, ], - CityCodeLookup: [23, 33], + CityCodeLookup: ['23', '33'], }, ], rows: [ { Id: 1, Country: 'INDIA', - CountryCode: 1, - CityCodeRollup: 2, + CountryCode: '1', + CityCodeRollup: '2', CityCodeFormula: 100, CityList: [ { @@ -699,7 +708,7 @@ test.describe.serial('Webhook', () => { City: 'Pune', }, ], - CityCodeLookup: [23, 33], + CityCodeLookup: ['23', '33'], }, ], },