diff --git a/.planning/phases/22-generate-node-dynamic-input-tests/22-01-PLAN.md b/.planning/phases/22-generate-node-dynamic-input-tests/22-01-PLAN.md index edb41432..364cd06b 100644 --- a/.planning/phases/22-generate-node-dynamic-input-tests/22-01-PLAN.md +++ b/.planning/phases/22-generate-node-dynamic-input-tests/22-01-PLAN.md @@ -24,11 +24,13 @@ Output: Complete test coverage for dynamic input flows in GenerateImageNode, Gen **Existing test files to extend:** @src/components/__tests__/GenerateImageNode.test.tsx @src/components/__tests__/GenerateVideoNode.test.tsx +@src/app/api/generate/__tests__/route.test.ts -**Component being tested:** +**Components/routes being tested:** @src/components/nodes/GenerateImageNode.tsx (lines 464-580 for dynamic handles) @src/components/nodes/GenerateVideoNode.tsx @src/components/nodes/ModelParameters.tsx +@src/app/api/generate/route.ts (lines 342-377 for parameters handling) **Prior Phase Summary (provides test patterns):** @.planning/phases/17-component-tests/17-03-SUMMARY.md @@ -167,6 +169,63 @@ inputSchema: [ GenerateVideoNode tests match GenerateImageNode coverage for dynamic handles + + Task 4: Add API route tests for parameters field + src/app/api/generate/__tests__/route.test.ts + +Add tests to verify the `parameters` field (UI settings) is passed to provider APIs. + +**Replicate provider:** +- Should pass parameters to prediction input +- Should merge parameters with dynamicInputs (dynamicInputs take precedence) + +**fal.ai provider:** +- Should pass parameters to fal.ai request body +- Should merge parameters with dynamicInputs + +Test pattern: +```typescript +it("should pass parameters to prediction input", async () => { + // ... mock setup ... + + const request = createMockPostRequest( + { + prompt: "Test prompt", + selectedModel: { + provider: "replicate", + modelId: "stability-ai/sdxl", + displayName: "SDXL", + }, + parameters: { + seed: 42, + num_inference_steps: 30, + guidance_scale: 7.5, + }, + }, + { "X-Replicate-API-Key": "test-key" } + ); + + const response = await POST(request); + + // Verify parameters were passed to prediction + const createPredictionCall = mockFetch.mock.calls[1]; + const requestBody = JSON.parse(createPredictionCall[1].body); + expect(requestBody.input).toEqual( + expect.objectContaining({ + seed: 42, + num_inference_steps: 30, + guidance_scale: 7.5, + }) + ); +}); +``` + +Also test that dynamicInputs override parameters when both have same key. + + npm test -- src/app/api/generate/__tests__/route.test.ts --testNamePattern="parameters" + API route tests verify parameters field is passed to Replicate and fal.ai + + @@ -174,10 +233,12 @@ Before declaring plan complete: - [ ] `npm test -- src/components/__tests__/ModelParameters.test.tsx` passes - [ ] `npm test -- src/components/__tests__/GenerateImageNode.test.tsx` passes - [ ] `npm test -- src/components/__tests__/GenerateVideoNode.test.tsx` passes +- [ ] `npm test -- src/app/api/generate/__tests__/route.test.ts` passes - [ ] No TypeScript errors - [ ] Schema loading tested - [ ] Dynamic handle variations tested - [ ] Placeholder handles tested +- [ ] Parameters passed to API tested @@ -186,6 +247,7 @@ Before declaring plan complete: - ModelParameters component fully tested - Dynamic input handle rendering fully tested - Placeholder handle behavior fully tested +- Parameters field passed to provider APIs tested - Phase 22 complete