import { jest } from '@jest/globals' import { expect } from 'chai' import { DatabaseManager } from '../../src/Database/index.js' import type { DatabaseType, DbConfig } from '../../src/Database/types.js' type FakeDatabase = { host: string; tableName: string; type: 'knex' | 'pg' | 'kysely' | 'dynamo' } const fakeConfig = (host: string, type: DatabaseType) => { return { type, host, } as DbConfig } const fakeNoSQLConfig = (tableName: string, type: DatabaseType) => { return { type, tableName, } as DbConfig } describe('Database Manager', () => { test('should correctly create and cache database instances', () => { const underTest = new DatabaseManager() underTest['databases'] = { knex: jest.fn((config: any) => { return { host: config.host, type: 'knex' } as any }) as any, pg: jest.fn((config: any) => { return { host: config.host, type: 'pg' } as any }) as any, kysely: jest.fn((config: any) => { return { host: config.host, type: 'kysely' } as any }) as any, dynamo: jest.fn((config: any) => { return { tableName: config.tableName, type: 'dynamo' } as any }) as any, } const create = config => underTest.create({ ...config }) as unknown as FakeDatabase const knexConfig1 = fakeConfig('localhost', 'knex') const knexConfig2 = fakeConfig('other', 'knex') const pgConfig1 = fakeConfig('localhost', 'pg') const pgConfig2 = fakeConfig('other', 'pg') const kyselyConfig1 = fakeConfig('localhost', 'pg') const kyselyConfig2 = fakeConfig('other', 'pg') const dynamoConfig1 = fakeNoSQLConfig('localhost', 'dynamo') const dynamoConfig2 = fakeNoSQLConfig('other', 'dynamo') const knex1 = create(knexConfig1) const knex2 = create(knexConfig1) const knex3 = create(knexConfig2) const pg1 = create(pgConfig1) const pg2 = create(pgConfig1) const pg3 = create(pgConfig2) const kysely1 = create(kyselyConfig1) const kysely2 = create(kyselyConfig1) const kysely3 = create(kyselyConfig2) const dynamo1 = create(dynamoConfig1) const dynamo2 = create(dynamoConfig1) const dynamo3 = create(dynamoConfig2) expect(knex1).to.equal(knex2).to.not.equal(knex3).to.not.equal(pg1) expect(knexConfig1).to.be.deep.equal(knex1).to.be.deep.equal(knex2) expect(knex3).to.be.deep.equal(knexConfig2) expect(pg1).to.equal(pg2).to.not.equal(pg3) expect(pgConfig1).to.be.deep.equal(pg1).to.be.deep.equal(pg2) expect(pg3).to.be.deep.equal(pgConfig2) expect(kysely1).to.equal(kysely2).to.not.equal(kysely3) expect(kyselyConfig1).to.be.deep.equal(kysely1).to.be.deep.equal(kysely2) expect(kysely3).to.be.deep.equal(kyselyConfig2) expect(dynamo1).to.equal(dynamo2).to.not.equal(dynamo3).to.not.equal(pg1) console.log(dynamoConfig1) console.log(dynamo1) expect(dynamoConfig1).to.be.deep.equal(dynamo1).to.be.deep.equal(dynamo2) expect(dynamo3).to.be.deep.equal(dynamoConfig2) }) })