mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-04 12:33:08 +00:00
The back() handler had the same filtered-index drift bug as the Enter and Ctrl+D transitions: when the user presses Esc to clear an active filter on the provider stage, providerIdx was reset to 0, losing the highlighted provider. Apply the same providerIndexAfterClearingFilter fix as the other three transition paths. Also adds edge-case tests for the helper: undefined provider, slug not found, empty rows, and duplicate slug first-match behavior. Found by hermes-pr-review Phase 2 + hermes-agent-dev 3-agent review.
54 lines
1.7 KiB
TypeScript
54 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)
|
|
})
|
|
})
|