49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
import type { Field, NumberField, NumberFieldSingleValidation } from 'payload'
|
|
import { describe, expect, it } from 'vitest'
|
|
|
|
import { Partners } from '@/collections/Partners'
|
|
|
|
function partnerField(name: string): Field {
|
|
const field = Partners.fields.find((candidate) => 'name' in candidate && candidate.name === name)
|
|
if (!field) throw new Error(`Missing Partners field: ${name}`)
|
|
return field
|
|
}
|
|
|
|
describe('Partners admin ordering contract', () => {
|
|
it('shows the title and ordering state needed for content operations', () => {
|
|
expect(Partners.admin?.useAsTitle).toBe('name')
|
|
expect(Partners.admin?.defaultColumns).toEqual([
|
|
'name',
|
|
'tier',
|
|
'sortOrder',
|
|
'_status',
|
|
'active',
|
|
'showOnHomepage',
|
|
'updatedAt',
|
|
])
|
|
})
|
|
|
|
it('accepts only numeric tiers 1, 2, and 3', async () => {
|
|
const tierField = partnerField('tier')
|
|
|
|
expect(tierField).toMatchObject({
|
|
type: 'number',
|
|
min: 1,
|
|
max: 3,
|
|
required: true,
|
|
admin: { step: 1 },
|
|
})
|
|
|
|
const validate = (tierField as NumberField).validate as NumberFieldSingleValidation | undefined
|
|
expect(validate).toBeTypeOf('function')
|
|
|
|
for (const value of [1, 2, 3]) {
|
|
expect(await validate?.(value, {} as never)).toBe(true)
|
|
}
|
|
|
|
for (const value of [0, 1.5, 4, Number.NaN, null, undefined]) {
|
|
expect(await validate?.(value, {} as never)).toBe('Tier must be one of 1, 2, or 3.')
|
|
}
|
|
})
|
|
})
|