| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import { describe, expect, it } from 'vitest'
- import {
- getColumnTypeAffordance,
- getForeignKeyColumnNames,
- getPrimaryKeyColumnNames,
- getUniqueIndexColumnNames,
- } from './ColumnList.utils'
- describe('ColumnList.utils', () => {
- it('normalises quoted array formats before resolving the affordance kind', () => {
- expect(getColumnTypeAffordance('"uuid"[]')).toEqual({
- kind: 'text',
- label: 'Text',
- })
- })
- it('maps recognised Postgres formats to their affordance labels', () => {
- expect(getColumnTypeAffordance('timestamptz')).toEqual({
- kind: 'time',
- label: 'Date / time',
- })
- expect(getColumnTypeAffordance('jsonb')).toEqual({
- kind: 'json',
- label: 'JSON',
- })
- })
- it('falls back to the other affordance for unrecognised formats', () => {
- expect(getColumnTypeAffordance('citext')).toEqual({
- kind: 'other',
- label: 'Other',
- })
- })
- it('derives only source-table foreign key column names', () => {
- const table = {
- schema: 'public',
- name: 'orders',
- primary_keys: [{ name: 'id' }],
- relationships: [
- {
- source_schema: 'public',
- source_table_name: 'orders',
- source_column_name: 'customer_id',
- target_table_schema: 'public',
- target_table_name: 'customers',
- target_column_name: 'id',
- },
- {
- source_schema: 'public',
- source_table_name: 'customers',
- source_column_name: 'account_id',
- target_table_schema: 'public',
- target_table_name: 'accounts',
- target_column_name: 'id',
- },
- ],
- unique_indexes: [{ columns: ['reference'] }, { columns: ['customer_id', 'reference'] }],
- } as const
- expect([...getPrimaryKeyColumnNames(table)]).toEqual(['id'])
- expect([...getForeignKeyColumnNames(table)]).toEqual(['customer_id'])
- expect([...getUniqueIndexColumnNames(table)]).toEqual(['reference'])
- })
- })
|