mission-control/src/lib/__tests__/agent-card-helpers.test.ts

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('—')
})
})