import test from 'node:test'; import assert from 'node:assert/strict'; import { readFileSync } from 'node:fs'; import React from 'react'; import { renderToStaticMarkup } from 'react-dom/server'; import { ComposerModelPicker } from './ComposerModelPicker'; test('Catty picker keeps a single model list and hides other providers until the submenu opens', () => { const html = renderToStaticMarkup( {}} onTogglePinned={() => {}} />, ); assert.match(html, /DeepSeek/); assert.match(html, /placeholder="ai\.chat\.searchModels"/); assert.match(html, /deepseek-v4-pro/); assert.match(html, /aria-label="ai\.chat\.selectProvider"/); assert.doesNotMatch(html, /OpenAI/); assert.doesNotMatch(html, /w-\[128px\]/); }); test('external agent picker lists presets without a provider column', () => { const html = renderToStaticMarkup( {}} onTogglePinned={() => {}} />, ); assert.match(html, /GPT-5\.5/); assert.match(html, /GPT-5\.4/); assert.match(html, /ai\.chat\.recent/); assert.doesNotMatch(html, /ai\.chat\.providers/); }); test('custom model action is only offered in Catty provider-switcher mode', () => { const source = readFileSync(new URL('./ComposerModelPicker.tsx', import.meta.url), 'utf8'); assert.match(source, /const showCustom = Boolean\(\s*hasProviders/s); assert.match(source, /resolveComposerEnterModelId/); });