import assert from 'node:assert/strict'
import test from 'node:test'
import { mapComment, mapRecord, mapTable } from '../src/models.ts'
import { requireConfirmOrDryRun } from '../src/types.ts'
test('mapComment drops author email', () => {
const comment = mapComment({
id: 'comX',
text: 'Hello',
createdTime: '2026-01-01T00:00:00.000Z',
author: { id: 'usrX', name: 'Ada', email: 'hidden@example.com' },
})
assert.equal(comment.id, 'comX')
assert.deepEqual(comment.author, { id: 'usrX', name: 'Ada' })
assert.equal(JSON.stringify(comment).includes('hidden@example.com'), false)
})
test('mapRecord keeps fields and ignores extra keys', () => {
const record = mapRecord({
id: 'recX',
createdTime: '2026-01-01T00:00:00.000Z',
commentCount: 2,
fields: { Name: 'Task' },
})
assert.deepEqual(record, {
id: 'recX',
createdTime: '2026-01-01T00:00:00.000Z',
commentCount: 2,
fields: { Name: 'Task' },
})
})
test('mapTable projects field and view counts', () => {
const table = mapTable({
id: 'tblX',
name: 'Tasks',
primaryFieldId: 'fldX',
fields: [{ id: 'fldX', name: 'Name', type: 'singleLineText' }],
views: [{ id: 'viwX', name: 'Grid', type: 'grid' }],
})
assert.equal(table.fieldCount, 1)
assert.equal(table.viewCount, 1)
assert.equal(table.fields[0]?.type, 'singleLineText')
})
test('requireConfirmOrDryRun guards writes', () => {
assert.equal(requireConfirmOrDryRun({ dryRun: true }, 'Creating'), 'dryRun')
assert.equal(requireConfirmOrDryRun({ confirm: true }, 'Creating'), 'confirm')
assert.throws(() => requireConfirmOrDryRun({}, 'Creating an Airtable record'))
})