Files
hapi/web/src/components/AssistantChat/codexReasoningEffortOptions.test.ts
T
ejj.ccandGitHub d160203bb2 fix(codex): support dynamic reasoning efforts (#1012)
* fix(codex): support model-reported reasoning efforts

* fix(web): prevent service worker edge caching

* ci: retrigger stuck Actions run

* fix(codex): accept dynamic reasoning effort values

* fix(web): restore reasoning effort on model switch failure
2026-07-12 18:38:56 +08:00

87 lines
3.3 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import { getCodexComposerReasoningEffortOptions } from './codexReasoningEffortOptions'
describe('getCodexComposerReasoningEffortOptions', () => {
it('includes the default option and preset values for Codex', () => {
expect(getCodexComposerReasoningEffortOptions(null, 'codex')).toEqual([
{ value: null, label: 'Default' },
{ value: 'low', label: 'Low' },
{ value: 'medium', label: 'Medium' },
{ value: 'high', label: 'High' },
{ value: 'xhigh', label: 'XHigh' }
])
})
it('preserves non-preset current values for Codex', () => {
expect(getCodexComposerReasoningEffortOptions('minimal', 'codex')).toEqual([
{ value: null, label: 'Default' },
{ value: 'minimal', label: 'Minimal' },
{ value: 'low', label: 'Low' },
{ value: 'medium', label: 'Medium' },
{ value: 'high', label: 'High' },
{ value: 'xhigh', label: 'XHigh' }
])
})
it('uses arbitrary model-reported efforts for Codex', () => {
expect(getCodexComposerReasoningEffortOptions('extreme', 'codex', [
{ value: 'low' },
{ value: 'medium' },
{ value: 'high' },
{ value: 'xhigh' },
{ value: 'max' },
{ value: 'ultra' },
{ value: 'extreme' }
])).toEqual([
{ value: null, label: 'Default' },
{ value: 'low', label: 'Low' },
{ value: 'medium', label: 'Medium' },
{ value: 'high', label: 'High' },
{ value: 'xhigh', label: 'XHigh' },
{ value: 'max', label: 'Max' },
{ value: 'ultra', label: 'Ultra' },
{ value: 'extreme', label: 'Extreme' }
])
})
it('keeps an unsupported current Codex effort visible', () => {
expect(getCodexComposerReasoningEffortOptions('ultra', 'codex', [
{ value: 'low' },
{ value: 'max' }
])).toEqual([
{ value: null, label: 'Default' },
{ value: 'ultra', label: 'Ultra' },
{ value: 'low', label: 'Low' },
{ value: 'max', label: 'Max' }
])
})
it('returns no options for OpenCode until dynamic options are available', () => {
expect(getCodexComposerReasoningEffortOptions(null, 'opencode')).toEqual([])
expect(getCodexComposerReasoningEffortOptions(null, 'opencode', [])).toEqual([])
})
it('builds OpenCode options from ACP-reported values', () => {
expect(getCodexComposerReasoningEffortOptions('low', 'opencode', [
{ value: 'low', name: 'Low' },
{ value: 'medium', name: 'Medium' }
])).toEqual([
{ value: null, label: 'Default' },
{ value: 'low', label: 'Low' },
{ value: 'medium', label: 'Medium' }
])
})
it('preserves unsupported current OpenCode values in the dropdown', () => {
expect(getCodexComposerReasoningEffortOptions('high', 'opencode', [
{ value: 'low', name: 'Low' },
{ value: 'medium', name: 'Medium' }
])).toEqual([
{ value: null, label: 'Default' },
{ value: 'high', label: 'High' },
{ value: 'low', label: 'Low' },
{ value: 'medium', label: 'Medium' }
])
})
})