import { jest } from '@jest/globals' import * as pg from 'pg' import type { DbConfig } from '../../../../src/Database/index.js' import { PostgresDatabase } from '../../../../src/Database/integrations/pgsql/PostgresDatabase.js' const config: DbConfig<'pg'> = { type: 'pg', username: 'username', password: 'password', host: 'host', port: 1234, database: 'database', maxConnections: 1, autoCommit: true, } const config2: DbConfig<'pg'> = { ...config, readReplica: config, } const expectedImplConfig = { host: config.host, port: config.port, user: config.username, password: config.password, database: config.database, max: config.maxConnections, } describe('PostgresDatabase', () => { let mockTrans let mockClient beforeEach(() => { mockTrans = { query: jest.fn(() => {}), } as any mockClient = jest.fn( () => ({ connect: async () => mockTrans, }) as pg.PoolClient ) PostgresDatabase['pgProvider'] = mockClient as any }) test('PostgresDatabase', async () => { const underTest = new PostgresDatabase(config) expect(mockClient).toHaveBeenNthCalledWith(1, expectedImplConfig) const trans = await underTest.transaction() expect(mockTrans.query).toBeCalledWith('BEGIN') expect(trans.reader).toBeUndefined() expect(trans.writer).toBeInstanceOf(Object) expect(trans.writer.connect).toBeInstanceOf(Function) expect(trans).toBeInstanceOf(Function) expect(trans['transaction']).toBe(mockTrans) }) test('PostgresDatabase - read replica', async () => { const underTest = new PostgresDatabase(config2) expect(mockClient).toHaveBeenNthCalledWith(2, expectedImplConfig) const trans = await underTest.transaction() expect(mockTrans.query).toBeCalledWith('BEGIN') expect(trans.reader).toBeInstanceOf(Object) expect(trans.reader.connect).toBeInstanceOf(Function) expect(trans.writer).toBeInstanceOf(Object) expect(trans.writer.connect).toBeInstanceOf(Function) expect(trans).toBeInstanceOf(Function) expect(trans['transaction']).toBe(mockTrans) }) })