53 lines
1.7 KiB
TypeScript
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)
|
|
})
|
|
})
|