import { WorkbenchStatusStrip } from './workbench-status-strip'; import { I18nProvider } from '@/lib/i18n'; import assert from 'node:assert/strict'; import { describe, it } from 'node:test'; import { renderToStaticMarkup } from 'react-dom/server'; describe('WorkbenchStatusStrip', () => { it('shows model, request route, streaming mode, requested image count, and runtime state before generation', () => { const html = renderToStaticMarkup( ); assert.match(html, /当前请求路径已就绪/); assert.match(html, /gpt-image-2/); assert.match(html, /images-sse/); assert.match(html, /自动/); assert.match(html, /请求 1 张图片/); }); it('shows explicit parallel batch state when the user enabled it for the current request', () => { const html = renderToStaticMarkup( ); assert.match(html, /并发已启用/); }); it('reserves the request mode slot before runtime details arrive', () => { const html = renderToStaticMarkup( ); assert.match(html, /data-request-mode-placeholder="true"/); assert.match(html, /aria-hidden="true"/); assert.match(html, /请求方式/); assert.doesNotMatch(html, /invisible/); }); it('renders checking, disconnected, route-limited, and custom override runtime states explicitly', () => { const checkingHtml = renderToStaticMarkup( ); const disconnectedHtml = renderToStaticMarkup( ); const routeLimitedHtml = renderToStaticMarkup( ); const customOverrideHtml = renderToStaticMarkup( ); assert.match(checkingHtml, /正在读取运行时状态/); assert.match(checkingHtml, /animate-spin/); assert.match(disconnectedHtml, /未取得运行时状态/); assert.match(routeLimitedHtml, /当前路由受限/); assert.match(customOverrideHtml, /使用自定义上游/); }); it('shows request mode health details and suggested channel env in the status strip', () => { const html = renderToStaticMarkup( ); assert.match(html, /请求方式/); assert.match(html, /images-non-stream/); assert.match(html, /可用于请求/); assert.match(html, /responses-sse/); assert.match(html, /冷却中或待探测/); assert.match(html, /最近渠道失败/); assert.match(html, /HTTP 403/); assert.match(html, /responses-sse/); assert.match(html, /OPENAI_CHANNEL_N_REQUEST_MODES=images-non-stream/); assert.match(html, /建议的环境变量/); }); it('keeps request mode details constrained on narrow screens', () => { const html = renderToStaticMarkup( ); assert.match(html, /group static max-w-full shrink-0 sm:relative sm:basis-auto/); assert.match(html, /min-h-11 min-w-11 cursor-pointer/); assert.match(html, /sr-only sm:not-sr-only/); assert.match(html, /relative flex w-full min-w-0 flex-wrap/); assert.match(html, /sm:w-auto/); assert.match(html, /hidden h-3 w-px shrink-0 sm:block/); assert.match(html, /hidden truncate sm:inline/); assert.match(html, /absolute inset-x-0 top-full/); assert.match(html, /sm:right-auto sm:left-0 sm:w-\[min\(88vw,28rem\)\]/); assert.match(html, /xl:right-0 xl:left-auto/); }); });