From 84218c128aee0e27f9f1a5d6a024ca0449085a1a Mon Sep 17 00:00:00 2001 From: viniciusgadea Date: Fri, 4 Sep 2026 08:15:13 -0300 Subject: [PATCH] FIX: update connectionTestListSchemas to derive references from engine allowlist --- .../connection-test.service.spec.ts | 54 ++++++++++++++++--- 1 file changed, 47 insertions(+), 7 deletions(-) diff --git a/src/modules/connection-test/connection-test.service.spec.ts b/src/modules/connection-test/connection-test.service.spec.ts index aed103f..cf98f4f 100644 --- a/src/modules/connection-test/connection-test.service.spec.ts +++ b/src/modules/connection-test/connection-test.service.spec.ts @@ -65,7 +65,7 @@ describe('ConnectionTestService catalog cache', () => { }); }); - it('maps cached columns to the existing table metadata contract', async () => { + it('maps cached columns and derives references from the engine allowlist', async () => { connectionsApiService.proxy.mockResolvedValue({ columns: [ { @@ -73,6 +73,16 @@ describe('ConnectionTestService catalog cache', () => { data_type: 'bigint', is_primary_key: true, }, + { + column_name: 'name', + data_type: 'varchar', + is_primary_key: false, + }, + ], + }); + platformApiService.proxy.mockResolvedValue({ + allowed_datatypes: [ + { engine: 'postgresql', allowed_datatypes: ['bigint', 'timestamp'] }, ], }); @@ -92,13 +102,10 @@ describe('ConnectionTestService catalog cache', () => { { table_name: 'customers', columns: [ - { - name: 'id', - type: 'bigint', - is_primary_key: true, - }, + { name: 'id', type: 'bigint', is_primary_key: true }, + { name: 'name', type: 'varchar', is_primary_key: false }, ], - references: [], + references: [{ name: 'id', type: 'bigint', is_primary_key: true }], }, ], }); @@ -107,6 +114,39 @@ describe('ConnectionTestService catalog cache', () => { '/connection_catalog/config-id/schemas/public/tables/customers/columns', user, ); + expect(platformApiService.proxy).toHaveBeenCalledWith( + 'GET', + '/jobs/jdbc/configs/allowed_datatypes', + user, + ); + }); + + it('returns empty references when the allowlist call fails', async () => { + connectionsApiService.proxy.mockResolvedValue({ + columns: [{ column_name: 'id', data_type: 'bigint', is_primary_key: true }], + }); + platformApiService.proxy.mockRejectedValue(new Error('platform down')); + + await expect( + service.getTableMetadata( + { + connection_id: 'config-id', + plugin: 'postgresql', + schema: 'public', + table_list: ['customers'], + }, + user, + ), + ).resolves.toEqual({ + operation_result: true, + tables_metadata: [ + { + table_name: 'customers', + columns: [{ name: 'id', type: 'bigint', is_primary_key: true }], + references: [], + }, + ], + }); }); it('submits a catalog refresh without holding the request open', async () => {