Files
Patrick Plate 279487067e
Deploy to TrueNAS / deploy (push) Successful in 1m53s
docs: Sprint 12 wiki summary with screenshots
- SPRINT-12-SUMMARY.md: full work update with architecture diagram
- Screenshots: documents-dark.png, documents-light.png, documents-upload-dialog.png, board-dark.png
2026-06-18 15:02:51 +02:00

8.0 KiB

Sprint 12 — Golden Test Standard

Everything Present Must Work

Date: 2026-06-18
Duration: Single-day sprint
Key Metric: 6 P0 bugs fixed, full integration test infrastructure built


Overview

Sprint 12 was a quality-focused sprint with a simple mandate: every button, every action, every interaction that exists in the UI must actually work. No dead buttons. No placeholder handlers. No "TODO: implement later."

The sprint delivered two major outcomes:

  1. Phase 1 — Fixed all 6 non-functional buttons across Documents and Board pages, wired them to real service calls with React Query mutations
  2. Phase 2 — Built a complete Playwright integration test infrastructure (Docker Compose stack, 13 test specs, 70+ tests) to prevent regressions

Phase 1: Button Fixes + UX Polish

The Problem

Six buttons across the Documents and Board pages were completely non-functional:

Page Button Issue
Documents Upload Closed dialog immediately, no file upload
Documents Download No onClick handler at all
Documents Delete No onClick handler at all
Board Create Position No service call wired
Board Elect Member No service call wired
Board Remove Member No service call wired

The Fix

Each button was wired to proper React Query mutations with:

  • Optimistic UI updates where appropriate
  • Error handling with toast notifications
  • Loading states during async operations
  • Mock-mode dual operation (works with mock data in dev, real API in production)

Results

Documents page dark mode Documents page with distinct category colors, icons, and properly sized table columns

Documents upload dialog Upload dialog with controlled form state, validation, and real service call on submit

Board page Board management with functional Create Position, Elect Member, and Remove actions

Documents page light mode Documents page in light mode showing proper color contrast across both themes


Phase 2: Integration Test Infrastructure

Architecture

┌─────────────────────────────────────────────────────────┐
│                 Docker Compose Test Stack                 │
├──────────────┬──────────────┬───────────┬───────────────┤
│   Postgres   │   Backend    │  Frontend │   Playwright  │
│   (tmpfs)    │ (test prof.) │ (Next.js) │  (13 specs)   │
├──────────────┼──────────────┼───────────┼───────────────┤
│ Seed via     │ Flyway +     │ Port 3000 │ Runs against  │
│ Flyway       │ Reset EP     │           │ real frontend │
│ R__seed.sql  │ /test/       │           │ + real backend│
│              │ reset-db     │           │               │
└──────────────┴──────────────┴───────────┴───────────────┘

Components

Component Role Details
PostgreSQL Test database tmpfs mount for speed, wiped between runs
Backend Spring Boot (test profile) Flyway migrations + R__seed.sql for test data, /test/reset-db endpoint
Frontend Next.js Standard build, connects to test backend
Playwright Test runner 13 spec files, 70+ tests, runs against real stack

Seed Data

The R__seed.sql repeatable migration provides a deterministic dataset:

  • 1 association ("Grüner Daumen e.V.")
  • 3 users (admin, board member, regular member)
  • Sample documents across all categories
  • Board positions with elected members
  • Stock entries, distributions, and member records

Test Specs (13 files, 70+ tests)

Spec Tests Coverage
auth.spec.ts 6 Login, logout, session persistence, invalid credentials
dashboard.spec.ts 5 Widgets render, navigation, data loading
documents.spec.ts 8 Upload, download, delete, category filter, search
board.spec.ts 7 Create position, elect member, remove, term display
members.spec.ts 6 List, search, filter by status, detail view
distributions.spec.ts 6 Create, list, quota check, member assignment
stock.spec.ts 5 Inventory list, add entry, strain details
grow.spec.ts 5 Calendar view, phase tracking, notes
reports.spec.ts 4 Generate, download, filter by type
events.spec.ts 5 Create event, RSVP, calendar view
finance.spec.ts 4 Transactions, balance, member fees
notifications.spec.ts 4 List, mark read, preferences
accessibility.spec.ts 5 ARIA labels, keyboard nav, color contrast

How to Run

CI (Linux — GitHub Actions / Gitea):

docker compose -f docker-compose.test.yml up --build --abort-on-container-exit

Local (macOS development):

docker compose -f docker-compose.test.yml -f docker-compose.test.local.yml up --build

The docker-compose.test.local.yml override adjusts platform settings and port mappings for macOS development.


Quality Gates Passed

Gate Result Details
Expert Panel Review APPROVED (v3, 95% confidence) 3 cycles: v1→REVISE, v2→APPROVED@92%, v3→APPROVED@95%
Code Review Approved with comments 2 blockers found and fixed, 4 non-blocking warnings remaining
Build (frontend) pnpm build passes No TypeScript errors, no lint warnings
Build (backend) mvn compile passes Clean compilation

Review Cycle History

v1 Plan → Expert Panel → REVISE (missing error handling, no seed isolation)
v2 Plan → Expert Panel → APPROVED @ 92% (added reset endpoint, tmpfs)
v3 Plan → Expert Panel → APPROVED @ 95% (final polish, accessibility spec added)

Files Changed Summary

Total: 35 files, +5,278 lines

Category Files Description
Frontend (pages) 4 Documents page, Board page, upload dialog, service hooks
Frontend (services) 5 documents.ts, board.ts, API client patches, React Query mutations
Frontend (test specs) 13 Full Playwright integration test suite
Frontend (config) 3 playwright.config.ts, Dockerfile.playwright, test utilities
Backend (seed) 1 R__seed.sql — repeatable Flyway migration with test data
Backend (config) 1 application-test.properties — test profile
Backend (controller) 1 TestResetController — DB reset endpoint for test isolation
Infrastructure 3 docker-compose.test.yml, docker-compose.test.local.yml, Dockerfile.playwright
Documentation 6 Analysis, plan, testplan, panel review, code review, this summary

Running the App

Development mode (mock data, no backend needed):

cd cannamanage-frontend && pnpm dev

Open http://localhost:3000 — login with admin@gruener-daumen.de / TestAdmin123!

Integration tests:

# CI (Linux):
docker compose -f docker-compose.test.yml up --build --abort-on-container-exit

# Local (macOS):
docker compose -f docker-compose.test.yml -f docker-compose.test.local.yml up --build

Production build:

cd cannamanage-frontend && pnpm build && pnpm start

What's Next

Priority Item Sprint
P0 Spin up and validate integration tests against real backend 13
P1 Fix 4 non-blocking code review warnings 13
P2 Sprint 13 feature work (TBD from backlog) 13

Generated 2026-06-18 by Lumen (DocGen mode)