From a8f3aa6f7e5c4f218f2ffa35f96895e6ac6d214a Mon Sep 17 00:00:00 2001 From: Ole-Morten Duesund Date: Sat, 4 Apr 2026 00:18:01 +0200 Subject: [PATCH] =?UTF-8?q?test:=20add=20comprehensive=20test=20suite=20(4?= =?UTF-8?q?4=20=E2=86=92=20169=20tests)=20and=20v1.1=20plan?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add 125 new test functions across 10 new test files, covering: - CSRF middleware (8 tests): double-submit cookie validation - Auth middleware (12 tests): SessionLoader, RequireAdmin, context helpers - API handlers (28 tests): auth, faves CRUD, tags, users, export/import - Web handlers (41 tests): signup, login, password reset, fave CRUD, admin panel, feeds, import/export, profiles, settings - Config (8 tests): env parsing, defaults, trusted proxies, normalization - Database (6 tests): migrations, PRAGMAs, idempotency, seeding - Image processing (10 tests): JPEG/PNG, resize, EXIF strip, path traversal - Render (6 tests): page/error/partial rendering, template functions - Settings store (3 tests): CRUD operations - Regression tests for display name fallback and CSP-safe autocomplete Also adds CSRF middleware to testServer chain for end-to-end CSRF verification, TESTPLAN.md documenting coverage, and PLANS-v1.1.md with implementation plans for notes+OG, PWA, editing UX, and admin. Co-Authored-By: Claude Opus 4.6 (1M context) --- PLANS-v1.1.md | 316 ++++++++ TESTPLAN.md | 388 ++++++++++ internal/config/config_test.go | 204 +++++ internal/database/database_test.go | 140 ++++ internal/handler/api/api_test.go | 663 ++++++++++++++++ internal/handler/handler_test.go | 4 +- internal/handler/web_test.go | 1153 ++++++++++++++++++++++++++++ internal/image/image_test.go | 234 ++++++ internal/middleware/auth_test.go | 299 ++++++++ internal/middleware/csrf_test.go | 185 +++++ internal/render/render_test.go | 161 ++++ internal/store/settings_test.go | 75 ++ 12 files changed, 3820 insertions(+), 2 deletions(-) create mode 100644 PLANS-v1.1.md create mode 100644 TESTPLAN.md create mode 100644 internal/config/config_test.go create mode 100644 internal/database/database_test.go create mode 100644 internal/handler/api/api_test.go create mode 100644 internal/handler/web_test.go create mode 100644 internal/image/image_test.go create mode 100644 internal/middleware/auth_test.go create mode 100644 internal/middleware/csrf_test.go create mode 100644 internal/render/render_test.go create mode 100644 internal/store/settings_test.go diff --git a/PLANS-v1.1.md b/PLANS-v1.1.md new file mode 100644 index 0000000..369bd37 --- /dev/null +++ b/PLANS-v1.1.md @@ -0,0 +1,316 @@ +# Implementeringsplan v1.1 — Favoritter + +Fire funksjoner som utvider Favoritter med notater og OG-metadata, PWA-installering med Android-delingsstøtte, bedre redigeringsflyt, og utvidede admin-verktøy. + +## Oversikt + +| # | Funksjon | Omfang | Avhengigheter | +|---|----------|--------|---------------| +| 1 | OG-støtte + fritekstfelt (notes) | Migrasjon, modell, store, alle handlere, maler, eksport/import, feed | Ingen | +| 2 | PWA + Android share intent | Service worker, manifest, nye handlere, base-mal, JS | Avhenger av 1 (deling pre-fyller notes) | +| 3 | Redigeringsforbedringer (UX) | Maler, CSS, ny toggle-rute, ny partial | Avhenger av 1 (notes vises i kort) | +| 4 | Admin-forbedringer | Store, handlere, maler, ruter | Ingen | + +--- + +## Funksjon 1: OG-støtte + fritekstfelt (notes) + +### Beskrivelse + +Legger til et valgfritt langtekstfelt «notes» på hver favoritt. Forbedrer Open Graph-metatagger på detaljsiden slik at `og:description` bruker notes når det er tilgjengelig. + +### Berørte filer + +| Fil | Endring | +|-----|---------| +| `internal/database/migrations/002_add_fave_notes.sql` | Ny fil: ALTER TABLE faves ADD COLUMN notes | +| `internal/model/fave.go` | Legg til `Notes string` i Fave-struct | +| `internal/store/fave.go` | Oppdater alle SQL-spørringer, Create/Update-signaturer, scanFaves | +| `internal/handler/fave.go` | Les notes fra skjema i create/edit/update | +| `internal/handler/api/api.go` | Legg til notes i request/response-structs og faveJSON | +| `internal/handler/import_export.go` | Legg til notes i ExportFave, CSV-kolonner, import | +| `internal/handler/feed.go` | Bruk notes som feed item description | +| `web/templates/pages/fave_form.html` | Legg til textarea for notes mellom URL og bilde | +| `web/templates/pages/fave_detail.html` | Vis notes, forbedre og:description | + +### Migrasjons-SQL + +```sql +-- 002_add_fave_notes.sql +-- Legger til et valgfritt notatfelt på favoritter. +ALTER TABLE faves ADD COLUMN notes TEXT NOT NULL DEFAULT ''; +``` + +### Implementeringssteg + +1. **Migrasjon**: Opprett `internal/database/migrations/002_add_fave_notes.sql` +2. **Modell**: Legg til `Notes string` etter `ImagePath` i `model.Fave` +3. **Store — Create**: Endre signatur til `Create(userID, description, url, imagePath, notes, privacy)`, oppdater INSERT +4. **Store — GetByID**: Legg til `f.notes` i SELECT og `&f.Notes` i Scan +5. **Store — Update**: Endre signatur, legg til `notes = ?` i UPDATE +6. **Store — Alle list-metoder**: Legg til `f.notes` i SELECT for `ListByUser`, `ListPublicByUser`, `ListPublic`, `ListByTag` +7. **Store — scanFaves**: Legg til `&f.Notes` i Scan +8. **Handler — fave.go**: Les `notes` fra form i `handleFaveCreate` og `handleFaveUpdate`. Pass `fave.Notes` i `handleFaveEdit` template data +9. **Handler — api/api.go**: Legg til `Notes` i request/response-structs, `faveJSON`, import +10. **Handler — import_export.go**: Legg til notes i `ExportFave`, CSV header/rader, import-parsing +11. **Handler — feed.go**: Sett `item.Description = f.Notes` når det ikke er tomt i `favesToFeedItems` +12. **Template — fave_form.html**: Legg til `