🧊 Testing Strategy & Guidelines (āļ„āļđāđˆāļĄāļ·āļ­āđāļĨāļ°āđāļ™āļ§āļ—āļēāļ‡āļĢāļ°āļšāļšāļāļēāļĢāļĢāļąāļ™āđ€āļ„āļŠāļ—āļ”āļŠāļ­āļš)

This document outlines the testing levels, methodologies, frameworks, and requirements for the SplitDee backend (FastAPI) and frontend (Flutter).
āđ€āļ­āļāļŠāļēāļĢāļ„āļđāđˆāļĄāļ·āļ­āļĢāļ°āđ€āļšāļĩāļĒāļšāļāļēāļĢāļˆāļąāļ”āļ—āļģāđ€āļ„āļŠāļ—āļ”āļŠāļ­āļš āļ‚āļ­āļšāđ€āļ‚āļ•āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ‚āļ„āđ‰āļ” āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļļāļ“āļ āļēāļžāļŠāļģāļŦāļĢāļąāļšāļŦāļ™āđ‰āļēāļšāđ‰āļēāļ™ Flutter āđāļĨāļ°āļŦāļĨāļąāļ‡āļšāđ‰āļēāļ™ FastAPI


ðŸ‡đ🇭 āļ āļēāļĐāļēāđ„āļ—āļĒ (āļŠāļģāļŦāļĢāļąāļšāļœāļđāđ‰āđƒāļŠāđ‰āļ‡āļēāļ™)

1. āļĨāļģāļ”āļąāļšāļžāļĩāļĢāļ°āļĄāļīāļ”āļāļēāļĢāļ—āļ”āļŠāļ­āļš (Testing Pyramid)

āđ€āļĢāļēāļĒāļķāļ”āđ‚āļĒāļ‡āļāļēāļĢāļ§āļēāļ‡āđ€āļ„āļŠāļ—āļ”āļŠāļ­āļšāļ•āļēāļĄāđ€āļāļ“āļ‘āđŒāļ„āļ§āļēāļĄāļŠāļĄāļ”āļļāļĨāļŠāļēāļāļĨāđ€āļžāļ·āđˆāļ­āļ›āļĢāļ°āļŦāļĒāļąāļ”āđ€āļ§āļĨāļēāļĢāļąāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāđāļĨāļ°āđ„āļ”āđ‰āļ„āļļāļ“āļ āļēāļžāļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāļŠāļđāļ‡āļŠāļļāļ”:

  • Unit Tests (āļāļēāļ™āļžāļĩāļĢāļ°āļĄāļīāļ” - āļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāļŠāļđāļ‡āļŠāļļāļ”): āļ•āļĢāļ§āļˆāļŠāļ­āļšāļžāļĪāļ•āļīāļāļĢāļĢāļĄāļ„āļģāļŠāļąāđˆāļ‡āļ•āļĢāļĢāļāļ°āļĢāļēāļĒāļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļĒāđˆāļ­āļĒāđ€āļ”āļĩāđˆāļĒāļ§āđ† (āđ€āļŠāđˆāļ™ āļāļēāļĢāđ€āļ‰āļĨāļĩāđˆāļĒāļ—āļĻāļ™āļīāļĒāļĄāļŦāļēāļĢāđ€āļ‡āļīāļ™, āļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļ­āļ™āļ—āļīāļ•āļĩ, Riverpod models)
  • Integration Tests (āđāļāļ™āļāļĨāļēāļ‡): āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļ—āļģāļ˜āļļāļĢāļāļĢāļĢāļĄāļĢāđˆāļ§āļĄāļāļąāļ™āļ‚āđ‰āļēāļĄāđ‚āļĄāļ”āļđāļĨ (āđ€āļŠāđˆāļ™ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļ§āļēāļĄāļ–āļđāļāļ•āđ‰āļ­āļ‡āļ‚āļ­āļ‡āđ‚āļĄāļ”āļđāļĨ API, āļāļēāļĢāļšāļąāļ™āļ—āļķāļāļĨāļ‡āļ•āļēāļĢāļēāļ‡āļˆāļĢāļīāļ‡)
  • E2E / UI Tests (āļĒāļ­āļ”āļžāļĩāļĢāļ°āļĄāļīāļ”): āļ•āļĢāļ§āļˆāļŠāļ­āļšāļžāļĪāļ•āļīāļāļĢāļĢāļĄāļāļēāļĢāļžāļīāļĄāļžāđŒāđāļŠāļāļ™āļĢāļđāļ›āļŠāļĨāļīāļ›āļˆāļēāļāļŦāļ™āđ‰āļēāļˆāļ­āļĄāļ·āļ­āļ–āļ·āļ­āļˆāļĢāļīāļ‡āļ—āļ°āļĨāļļāđ„āļ›āļŦāļēāļŦāļĨāļąāļ‡āļšāđ‰āļēāļ™

2. āļĒāļļāļ—āļ˜āļĻāļēāļŠāļ•āļĢāđŒāļāļēāļĢāļ—āļ”āļŠāļ­āļšāļŦāļĨāļąāļ‡āļšāđ‰āļēāļ™ (FastAPI Backend)

  • Unit Testing: āļ•āļĢāļ§āļˆāļ•āļĢāļĢāļāļ°āļĢāļ°āļšāļšāļŦāđ‰āļēāļĄāđ€āļŠāļ·āđˆāļ­āļĄāđ€āļ™āđ‡āļ•āļŦāļĢāļ·āļ­āļ„āļīāļ§āļĢāļĩāđ€āļšāļŠāđ€āļ”āđ‡āļ”āļ‚āļēāļ” āļšāļĢāļīāļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļ āļēāļĒāļ™āļ­āļ (āđ€āļŠāđˆāļ™ S3 āļŦāļĢāļ·āļ­ FCM āđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™ āļŦāļĢāļ·āļ­ API āļ˜āļ™āļēāļ„āļēāļĢ) āļ•āđ‰āļ­āļ‡āđ€āļ‚āļĩāļĒāļ™āđ‚āļ„āđ‰āļ”āļˆāļģāļĨāļ­āļ‡āļ‚āļķāđ‰āļ™āļĄāļēāļŦāļĨāļ­āļ (Mocked) āđ€āļŠāļĄāļ­āđ€āļžāļ·āđˆāļ­āļ„āļ§āļēāļĄāđ„āļ§āđƒāļ™āļāļēāļĢāđ€āļ—āļŠ
  • Integration Testing: āđƒāļŠāđ‰āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļ”āļŠāļ­āļš PostgreSQL āđāļĒāļāļ•āļđāđ‰ āđāļĨāļ°āđƒāļŠāđ‰ Alembic āļ—āļģāļāļēāļĢāđ„āļĄāđ€āļāļĢāļŠāļąāļ™āļ•āļēāļĢāļēāļ‡āļ—āļ”āļĨāļ­āļ‡āđ€āļ‚āļĩāļĒāļ™āļˆāļĢāļīāļ‡ āđ‚āļ”āļĒāļĢāļąāļ™āđƒāļ•āđ‰āļāļ•āļīāļāļē Transaction Rollback Pattern (āļ„āļ·āļ­āđ€āļ—āļŠāđ€āļŠāļĢāđ‡āļˆāļŠāļąāđˆāļ‡āļĒāļāđ€āļĨāļīāļāļĢāļēāļĒāļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āļĒāđ‰āļ­āļ™āļŦāļĨāļąāļ‡ 100%) āđ€āļžāļ·āđˆāļ­āļ„āļ‡āļ„āļ§āļēāļĄāļŠāļ°āļ­āļēāļ”āļ‚āļ­āļ‡āđ€āļšāļŠāļāđˆāļ­āļ™āđ€āļ—āļŠāļŦāļąāļ§āļ‚āđ‰āļ­āļ–āļąāļ”āđ„āļ›
  • āļāļēāļĢāļˆāļģāļĨāļ­āļ‡āđ€āļāļ•āđ€āļ§āļĒāđŒāļ āļēāļĒāļ™āļ­āļ: Mock āļŠāļąāļāļāļēāļ“ SlipOK āđ€āļāļ•āđ€āļ§āļĒāđŒāļ•āļĢāļ§āļˆāļŠāļĨāļīāļ› āđāļĨāļ°āļšāļ­āļĢāđŒāļ” FCM āđ€āļžāļ·āđˆāļ­āļ•āļĢāļ§āļˆāļ—āļēāļ™āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡ JSON
  • āļ„āļģāļŠāļąāđˆāļ‡āļĢāļąāļ™āļĢāļ°āļšāļšāļ—āļ”āļŠāļ­āļšāļŦāļĨāļąāļ‡āļšāđ‰āļēāļ™:
    cd backend && pytest --cov=app tests/

3. āļĒāļļāļ—āļ˜āļĻāļēāļŠāļ•āļĢāđŒāļāļēāļĢāļ—āļ”āļŠāļ­āļšāļŦāļ™āđ‰āļēāļšāđ‰āļēāļ™ (Flutter Client)

  • Unit Testing: āļ•āļĢāļ§āļˆāļ—āļēāļ™āļ„āļ§āļēāļĄāļ–āļđāļāļ•āđ‰āļ­āļ‡ Riverpod Providers, āļ•āļąāļ§āđāļ›āļĨāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ JSON āđāļĨāļ°āļāļēāļĢāļ„āļģāļ™āļ§āļ“āļŠāđˆāļ§āļ™āļŦāļ™āļĩāđ‰āļ‚āļ­āļ‡ Mochi
  • Widget Testing: āļ•āļĢāļ§āļˆāļ­āļ‡āļ„āđŒāļ›āļĢāļ°āļāļ­āļš UI āļšāļ™āļŦāļ™āđ‰āļēāļˆāļ­ (āđ€āļŠāđˆāļ™ āļ‚āļ“āļ°āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āđāļŠāļāļ™āļŠāļĨāļīāļ› āļ›āļļāđˆāļĄāļāļ”āļŦāđ‰āļēāļĄāļāļ”āļĢāļąāļ§āļ‹āđ‰āļģ, āļāļēāļĢāļ•āļīāđŠāļāļ–āļđāļāđāļŠāļ”āļ‡ confetti āļ›āđ‰āļēāļĒāļŠāļĩāđ€āļ‚āļĩāļĒāļ§āđ€āļĄāļ·āđˆāļ­āļŠāļģāļĢāļ°āđ€āļŠāļĢāđ‡āļˆ)
  • E2E Integration Testing: āđƒāļŠāđ‰āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āļ•āļĢāļ§āļˆāļŠāļ­āļšāļˆāļģāļĨāļ­āļ‡ E2E (āđ€āļŠāđˆāļ™ Patrol āļŦāļĢāļ·āļ­ native flutter_test) āļāļ”āļŠāđˆāļ‡āļŠāđ„āļĨāļ”āđŒāļˆāļ­āđ€āļŠāļĄāļ·āļ­āļ™āļˆāļĢāļīāļ‡
  • āļ„āļģāļŠāļąāđˆāļ‡āļĢāļąāļ™āļĢāļ°āļšāļšāļ—āļ”āļŠāļ­āļšāļŦāļ™āđ‰āļēāļšāđ‰āļēāļ™:
    cd frontend && flutter test

4. āđ€āļāļ“āļ‘āđŒāļāļēāļĢāļ„āļąāļ”āļāļĢāļ­āļ‡āļ„āļ§āļēāļĄāļŠāļ°āļ­āļēāļ”āđāļĨāļ°āđ‚āļ„āļ§āļ•āđ‰āļē CI/CD

  • āđ€āļāļ“āļ‘āđŒāļ‚āļąāđ‰āļ™āļ•āđˆāļģāļ„āļ§āļēāļĄāļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāļĢāļŦāļąāļŠ (Code Coverage Gate): Pull Request āļ—āļĩāđˆāļ‚āļ­āļ„āļ§āļšāļĢāļ§āļĄāđ€āļ‚āđ‰āļēāļāļīāđˆāļ‡ main āļ•āđ‰āļ­āļ‡āļĄāļĩāļĢāļŦāļąāļŠāļœāđˆāļēāļ™āđ€āļ„āļŠāļ—āļ”āļŠāļ­āļšāļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāļ•āļąāļ§āđ‚āļ›āļĢāđāļāļĢāļĄ Use Case āđāļĨāļ°āđ‚āļ”āđ€āļĄāļ™āļŦāļĨāļąāļāļ­āļĒāđˆāļēāļ‡āļ™āđ‰āļ­āļĒ 80% āđ€āļ›āđ‡āļ™āļŠāļģāļ„āļąāļ āļŦāļēāļāļ—āļ”āļŠāļ­āļšāđ„āļĄāđˆāļœāđˆāļēāļ™āļŦāļĢāļ·āļ­āļĢāļŦāļąāļŠāđ€āļ—āļŠāļ•āđˆāļģāļāļ§āđˆāļēāđ€āļāļ“āļ‘āđŒāļˆāļ°āļ–āļđāļāļšāļĨāđ‡āļ­āļāļāļēāļĢ Merge āļ—āļąāļ™āļ—āļĩāđ€āļžāļ·āđˆāļ­āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāļŠāļēāļāļĨ

🇎🇧 English (For AI Agents)

1. Testing Pyramid

  • Unit Tests: Fast, isolated tests verifying core math equations, domain entities, and Riverpod models.
  • Integration Tests: Verifies database connections, API payloads, and query boundaries.
  • E2E / UI Tests: Simulates full screen transitions, slip uploads, and backend integration.

2. Backend Testing Strategy (FastAPI)

  • Unit Testing: Isolated tests in backend/tests/unit/. Assumes zero database or network access. All external dependencies (S3, FCM, SlipOK) must be mocked.
  • Integration Testing: Runs against a dedicated PostgreSQL test container migrated via Alembic before execution. Uses the Transaction Rollback Pattern to ensure test independence.
  • Mocking Strategy: Uses pytest-mock or responses to stub external APIs (SlipOK) and the Firebase Admin SDK.
  • Command: cd backend && pytest --cov=app tests/

3. Frontend Testing Strategy (Flutter)

  • Unit Testing: Tests state controllers, Riverpod providers, and JSON deserialization. API clients are mocked via mockito or mocktail.
  • Widget Testing: Verifies specific visual states (loading spinners during OCR scan, disabled buttons, settled color codes).
  • Integration Testing: Uses patrol or native flutter_test integration packages to simulate full multi-screen user journeys.
  • Command: cd frontend && flutter test

4. Test Coverage & CI Gates

  • Code Coverage Gate: Mandatory minimum 80% test coverage on core business logic (use cases and domain repositories).
  • CI Workflow: GitHub Actions runs backend/frontend linters, executes unit/integration tests, and blocks merge requests on coverage drops or failures.