// [DEF:frontend.src.components.llm.__tests__.provider_config_integration:Module] // @TIER: STANDARD // @SEMANTICS: llm, provider-config, integration-test, edit-flow, delete-flow // @PURPOSE: Protect edit and delete interaction contracts in LLM provider settings UI. // @LAYER: UI Tests // @RELATION: VERIFIES -> frontend/src/components/llm/ProviderConfig.svelte // @INVARIANT: Edit action keeps explicit click handler and opens normalized edit form. import { describe, it, expect } from 'vitest'; import fs from 'node:fs'; import path from 'node:path'; const COMPONENT_PATH = path.resolve( process.cwd(), 'src/components/llm/ProviderConfig.svelte', ); // [DEF:provider_config_edit_contract_tests:Function] // @TIER: STANDARD // @PURPOSE: Validate edit and delete handler wiring plus normalized edit form state mapping. // @PRE: ProviderConfig component source exists in expected path. // @POST: Contract checks ensure edit click cannot degrade into no-op flow. describe('ProviderConfig edit interaction contract', () => { it('keeps explicit edit click handler with guarded button semantics', () => { const source = fs.readFileSync(COMPONENT_PATH, 'utf-8'); expect(source).toContain('type="button"'); expect(source).toContain('onclick={() => handleEdit(provider)}'); }); it('normalizes provider payload into editable form shape', () => { const source = fs.readFileSync(COMPONENT_PATH, 'utf-8'); expect(source).toContain('formData = {'); expect(source).toContain('name: provider?.name ?? ""'); expect(source).toContain('provider_type: provider?.provider_type ?? "openai"'); expect(source).toContain('default_model: provider?.default_model ?? "gpt-4o"'); expect(source).toContain('showForm = true;'); }); it('keeps explicit delete flow with confirmation and delete request', () => { const source = fs.readFileSync(COMPONENT_PATH, 'utf-8'); expect(source).toContain('async function handleDelete(provider)'); expect(source).toContain('$t.llm.delete_confirm.replace("{name}", provider.name || provider.id)'); expect(source).toContain('await requestApi(`/llm/providers/${provider.id}`, "DELETE")'); expect(source).toContain('onclick={() => handleDelete(provider)}'); }); }); // [/DEF:provider_config_edit_contract_tests:Function] // [/DEF:frontend.src.components.llm.__tests__.provider_config_integration:Module]