import { describe, expect, it } from 'vitest'; import { DateUtils } from '@repo/utils'; import { EMPTY_AUDIT_DISPLAY, formatAuditActor, formatAuditTimestamp, resolveAuditValue, } from './audit-column.utils'; describe('resolveAuditValue', () => { it('prefers camelCase over snake_case', () => { expect( resolveAuditValue({ createdBy: 'alice', creator_name: 'legacy' }, 'createdBy', 'creator_name'), ).toBe('alice'); }); it('falls back to snake_case when camelCase is missing', () => { expect(resolveAuditValue({ creator_name: 'legacy' }, 'createdBy', 'creator_name')).toBe('legacy'); expect(resolveAuditValue({ created_at: 1_700_000_000_000 }, 'createdAt', 'created_at')).toBe( 1_700_000_000_000, ); }); it('returns undefined when neither field is present', () => { expect(resolveAuditValue({}, 'createdBy', 'creator_name')).toBeUndefined(); expect(resolveAuditValue(undefined, 'createdBy', 'creator_name')).toBeUndefined(); }); }); describe('formatAuditActor', () => { it('returns a string actor as-is', () => { expect(formatAuditActor('alice')).toBe('alice'); }); it('prefers username, then name, then id on nested actors', () => { expect(formatAuditActor({ username: 'alice', name: 'Alice', id: 'u-1' })).toBe('alice'); expect(formatAuditActor({ name: 'Alice', id: 'u-1' })).toBe('Alice'); expect(formatAuditActor({ id: 'u-1' })).toBe('u-1'); }); it('returns a dash when the actor is empty', () => { expect(formatAuditActor(undefined)).toBe(EMPTY_AUDIT_DISPLAY); expect(formatAuditActor(null)).toBe(EMPTY_AUDIT_DISPLAY); expect(formatAuditActor('')).toBe(EMPTY_AUDIT_DISPLAY); expect(formatAuditActor({})).toBe(EMPTY_AUDIT_DISPLAY); }); }); describe('formatAuditTimestamp', () => { it('formats unix milliseconds with DateUtils', () => { const ms = 1_700_000_000_000; expect(formatAuditTimestamp(ms)).toBe(new DateUtils(ms).format('DD-MM-YYYY, HH:mm')); }); it('accepts numeric strings', () => { const ms = '1700000000000'; expect(formatAuditTimestamp(ms)).toBe(new DateUtils(Number(ms)).format('DD-MM-YYYY, HH:mm')); }); it('returns a dash when the timestamp is empty', () => { expect(formatAuditTimestamp(undefined)).toBe(EMPTY_AUDIT_DISPLAY); expect(formatAuditTimestamp(null)).toBe(EMPTY_AUDIT_DISPLAY); expect(formatAuditTimestamp('')).toBe(EMPTY_AUDIT_DISPLAY); }); });