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