import { describe, expect, test } from 'vitest'; import { PgColumn, PgTable, PgType } from '../../abstractions'; import { FkColumn } from './fk-column'; interface FkColumnTestInput { pkType: PgType; expectedExpression: string; } const testData: [string, FkColumnTestInput][] = [ [ 'FK for TEXT PK', { pkType: 'TEXT', expectedExpression: 'entity_id TEXT REFERENCES entity ON DELETE CASCADE', }, ], [ 'FK for INTEGER PK', { pkType: 'INTEGER', expectedExpression: 'entity_id INTEGER REFERENCES entity ON DELETE CASCADE', }, ], ]; describe('FkColumn', () => { test.each(testData)( '%s', (_description: string, input: FkColumnTestInput) => { // Arrange const entityTablePk: PgColumn = { name: 'id', type: input.pkType, table: { name: 'entity' } as PgTable, } as PgColumn; const propertyTable: PgTable = { name: 'object' } as PgTable; const fk = new FkColumn(entityTablePk, propertyTable); const expectedFkName = `${fk.table.name}_${fk.name}_fkey`; // Act & Assert expect(fk.buildExpression()).toBe(input.expectedExpression); expect(fk.fkName).toBe(expectedFkName); }, ); });