import pino from 'pino' import { describe, expect, it } from 'vitest' import { createApp } from '../src/app' describe('Profile 的 Codex 插件', () => { it('Codex Profile 保存勾选的插件并产生新版本;Claude Profile 一律清空;ID 格式校验', () => { const app = createApp(pino({ level: 'silent' }), { providers: {} }) const { id: _i, version: _v, updatedAt: _u, builtin: _b, builtinKey: _k, ...base } = app.profiles.getBuiltin() const codex = app.profiles.create({ ...base, provider: 'codex', model: 'gpt-test', name: '带插件', isDefault: false }) expect(codex.codexPluginIds).toEqual([]) const updated = app.profiles.update(codex.id, { ...base, provider: 'codex', model: 'gpt-test', name: '带插件', isDefault: false, codexPluginIds: ['google-calendar@openai-curated-remote'] }) expect(updated.codexPluginIds).toEqual(['google-calendar@openai-curated-remote']) expect(updated.version).toBe(2) expect(app.profiles.versions(codex.id)[0]!.changed).toEqual(['codexPluginIds']) const claude = app.profiles.create({ ...base, name: 'Claude 不用插件', isDefault: false, codexPluginIds: ['gmail@openai-curated-remote'] }) expect(claude.codexPluginIds).toEqual([]) expect(() => app.profiles.create({ ...base, provider: 'codex', model: 'gpt-test', name: 'x', isDefault: false, codexPluginIds: ['../etc'] })).toThrow(/校验失败/) }) })