hermes-agent/ui-tui/src/__tests__/modelPicker.test.ts

53 lines
1.7 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import { providerIndexAfterClearingFilter } from '../components/modelPicker.js'
import type { ModelOptionProvider } from '../gatewayTypes.js'
const provider = (slug: string, name = slug): ModelOptionProvider => ({ name, slug })
describe('ModelPicker provider filtering', () => {
it('keeps the selected provider when clearing the provider filter', () => {
const nous = provider('nous', 'Nous Portal')
const ollama = provider('ollama-cloud', 'Ollama Cloud')
const rows = [
{ name: nous.name, provider: nous },
{ name: ollama.name, provider: ollama }
]
// With a provider-stage filter like "ollama", the selected row is index 0
// in the filtered list, but index 1 in the full list after setFilter('').
expect(providerIndexAfterClearingFilter(rows, ollama)).toBe(1)
})
it('returns -1 when provider is undefined', () => {
const rows = [{ name: 'A', provider: provider('a') }]
expect(providerIndexAfterClearingFilter(rows, undefined)).toBe(-1)
})
it('returns -1 when provider slug is not in rows', () => {
const rows = [
{ name: 'A', provider: provider('a') },
{ name: 'B', provider: provider('b') }
]
expect(providerIndexAfterClearingFilter(rows, provider('missing'))).toBe(-1)
})
it('returns -1 for empty rows', () => {
expect(providerIndexAfterClearingFilter([], provider('a'))).toBe(-1)
})
it('finds the first match when multiple rows share a slug', () => {
const p = provider('dup')
const rows = [
{ name: 'First', provider: p },
{ name: 'Second', provider: p }
]
expect(providerIndexAfterClearingFilter(rows, p)).toBe(0)
})
})