You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

3.9 KiB

phase plan type
18-api-route-tests 3 execute
Add tests for generate API route covering Gemini provider path.

Purpose: Test image generation with Gemini, the default and most common path. Output: Tests for /api/generate Gemini path with mocked GoogleGenAI SDK.

<execution_context> ~/.claude/get-shit-done/workflows/execute-phase.md ~/.claude/get-shit-done/templates/summary.md </execution_context>

@.planning/PROJECT.md @.planning/ROADMAP.md @.planning/STATE.md

Route to test: @src/app/api/generate/route.ts

Test patterns from previous plans: @src/app/api/llm/tests/route.test.ts

Task 1: Create generate route tests for Gemini provider src/app/api/generate/__tests__/route.test.ts Create tests for /api/generate route Gemini (default) path: - POST: Generates image successfully with prompt only - POST: Generates image with prompt and input images - POST: Applies aspect ratio config - POST: Applies resolution config for nano-banana-pro model - POST: Applies Google Search tool for nano-banana-pro - POST: Rejects missing prompt (when no images/dynamicInputs) - POST: Returns 500 when API key missing - POST: Returns 429 on rate limit errors - POST: Handles no candidates in response - POST: Handles text-only response (no image)

Mock @google/genai GoogleGenAI class:

vi.mock("@google/genai", () => ({
  GoogleGenAI: vi.fn().mockImplementation(() => ({
    models: {
      generateContent: vi.fn().mockResolvedValue({
        candidates: [{
          content: {
            parts: [{
              inlineData: {
                mimeType: "image/png",
                data: "base64ImageData",
              },
            }],
          },
        }],
      }),
    },
  })),
}));

Test default model selection (nano-banana-pro when not specified). Test X-Gemini-API-Key header takes precedence over env var. Test response structure matches GenerateResponse type. npm test -- src/app/api/generate/tests/route.test.ts --testNamePattern="Gemini" Gemini provider tests pass covering success, config options, and error paths

Task 2: Add generate route validation and edge case tests src/app/api/generate/__tests__/route.test.ts Add validation and edge case tests to existing test file: - POST: Accepts request with only images (image-to-image) - POST: Accepts request with dynamicInputs containing prompt - POST: Accepts request with dynamicInputs containing image frames - POST: Handles large response payloads (warns but succeeds) - POST: Extracts MIME type from data URL correctly - POST: Falls back to image/png for raw base64

Test provider routing:

  • POST: Routes to Gemini when no selectedModel provided
  • POST: Routes to Gemini when selectedModel.provider is "gemini"

Test the getInputMappingFromSchema helper (if exported or through behavior):

  • Verify schema parsing maps generic names to model-specific params
  • Test array detection for multi-image inputs

Do NOT test Replicate/fal paths in this plan - those are in 18-04. npm test -- src/app/api/generate/tests/route.test.ts All Gemini path tests pass including validation and edge cases

Before declaring plan complete: - [ ] `npm test -- src/app/api/generate/__tests__/route.test.ts` passes - [ ] Tests cover Gemini provider path only (Replicate/fal in next plan) - [ ] Config options tested (aspectRatio, resolution, googleSearch) - [ ] Error handling tested - [ ] No TypeScript errors

<success_criteria>

  • All tasks completed
  • All verification checks pass
  • Gemini path thoroughly tested
  • Input validation tested </success_criteria>
After completion, create `.planning/phases/18-api-route-tests/18-03-SUMMARY.md`