99 lines
3.4 KiB
TypeScript
99 lines
3.4 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import { formatModelName, buildTaskStatParts, extractWsHost } from '@/lib/agent-card-helpers'
|
|
|
|
describe('formatModelName', () => {
|
|
it('strips provider prefix from model ID', () => {
|
|
expect(formatModelName({ model: { primary: 'anthropic/claude-opus-4-5' } }))
|
|
.toBe('claude-opus-4-5')
|
|
})
|
|
|
|
it('returns model name when no prefix', () => {
|
|
expect(formatModelName({ model: { primary: 'gpt-4o' } }))
|
|
.toBe('gpt-4o')
|
|
})
|
|
|
|
it('handles deeply nested provider path', () => {
|
|
expect(formatModelName({ model: { primary: 'openai/gpt-4/turbo' } }))
|
|
.toBe('turbo')
|
|
})
|
|
|
|
it('returns null for missing config', () => {
|
|
expect(formatModelName(null)).toBeNull()
|
|
expect(formatModelName(undefined)).toBeNull()
|
|
expect(formatModelName({})).toBeNull()
|
|
})
|
|
|
|
it('returns null for missing model', () => {
|
|
expect(formatModelName({ model: {} })).toBeNull()
|
|
expect(formatModelName({ model: { primary: '' } })).toBeNull()
|
|
})
|
|
|
|
it('returns null for non-string primary', () => {
|
|
expect(formatModelName({ model: { primary: 42 } })).toBeNull()
|
|
expect(formatModelName({ model: { primary: true } })).toBeNull()
|
|
})
|
|
})
|
|
|
|
describe('buildTaskStatParts', () => {
|
|
it('returns null for undefined stats', () => {
|
|
expect(buildTaskStatParts(undefined)).toBeNull()
|
|
expect(buildTaskStatParts(null)).toBeNull()
|
|
})
|
|
|
|
it('returns null when all counts are zero', () => {
|
|
expect(buildTaskStatParts({
|
|
total: 0, assigned: 0, in_progress: 0, quality_review: 0, done: 0, completed: 0,
|
|
})).toBeNull()
|
|
})
|
|
|
|
it('includes only non-zero counts', () => {
|
|
const result = buildTaskStatParts({
|
|
total: 5, assigned: 3, in_progress: 0, quality_review: 0, done: 2, completed: 0,
|
|
})
|
|
expect(result).toHaveLength(2)
|
|
expect(result![0]).toEqual({ label: 'assigned', count: 3 })
|
|
expect(result![1]).toEqual({ label: 'done', count: 2, color: 'text-emerald-300' })
|
|
})
|
|
|
|
it('returns all four parts when all non-zero', () => {
|
|
const result = buildTaskStatParts({
|
|
total: 10, assigned: 3, in_progress: 2, quality_review: 1, done: 4, completed: 0,
|
|
})
|
|
expect(result).toHaveLength(4)
|
|
expect(result!.map(p => p.label)).toEqual(['assigned', 'active', 'review', 'done'])
|
|
})
|
|
|
|
it('assigns correct colors to active/review/done', () => {
|
|
const result = buildTaskStatParts({
|
|
total: 6, assigned: 1, in_progress: 2, quality_review: 1, done: 2, completed: 0,
|
|
})!
|
|
expect(result.find(p => p.label === 'assigned')?.color).toBeUndefined()
|
|
expect(result.find(p => p.label === 'active')?.color).toBe('text-amber-300')
|
|
expect(result.find(p => p.label === 'review')?.color).toBe('text-violet-300')
|
|
expect(result.find(p => p.label === 'done')?.color).toBe('text-emerald-300')
|
|
})
|
|
})
|
|
|
|
describe('extractWsHost', () => {
|
|
it('extracts host from ws:// URL', () => {
|
|
expect(extractWsHost('ws://127.0.0.1:18789')).toBe('127.0.0.1:18789')
|
|
})
|
|
|
|
it('extracts host from wss:// URL', () => {
|
|
expect(extractWsHost('wss://gateway.example.com')).toBe('gateway.example.com')
|
|
})
|
|
|
|
it('extracts host with port from wss:// URL', () => {
|
|
expect(extractWsHost('wss://gateway.example.com:4443')).toBe('gateway.example.com:4443')
|
|
})
|
|
|
|
it('returns dash for empty/undefined URL', () => {
|
|
expect(extractWsHost(undefined)).toBe('—')
|
|
expect(extractWsHost('')).toBe('—')
|
|
})
|
|
|
|
it('returns dash for malformed URL', () => {
|
|
expect(extractWsHost('not-a-url')).toBe('—')
|
|
})
|
|
})
|