Files
pamietnik/backend/internal/db/interfaces.go
Christoph K. 034d16e059
Some checks failed
Deploy to NAS / deploy (push) Failing after 14s
Add Go backend unit and handler tests; wire test step into CI
- Introduce store interfaces (TrackpointStorer, StopStorer, SuggestionStorer)
  in internal/db/interfaces.go so handlers can be tested without a real DB.
- Refactor HandleSingleTrackpoint, HandleBatchTrackpoints, HandleListDays,
  HandleListTrackpoints, HandleListStops, HandleListSuggestions to accept
  the new interfaces instead of concrete *db.*Store pointers (no behaviour
  change; concrete types satisfy the interfaces implicitly).
- internal/api/ingest_test.go: 13 handler tests covering happy path,
  invalid JSON, invalid timestamp, missing event_id/device_id, out-of-range
  lat/lon, empty/oversized batch, store errors, and idempotency (single + batch).
- internal/api/query_test.go: 14 handler tests covering missing query params
  (400) and empty-result-is-array guarantees for all four query endpoints.
- internal/auth/auth_test.go: 5 unit tests for HashPassword / VerifyPassword
  (correct password, wrong password, empty password, malformed hash, salt
  uniqueness).
- internal/db/trackpoints_test.go: 6 unit tests for the validateTrackpoint
  helper (happy path, missing fields, coordinate bounds, invalid source).
- .gitea/workflows/deploy.yml: add "Test" step (go test ./...) before
  "Build & Deploy" so a failing test aborts the deployment.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 19:07:02 +02:00

26 lines
887 B
Go

package db
import (
"context"
"github.com/jacek/pamietnik/backend/internal/domain"
)
// TrackpointStorer is the interface consumed by HTTP handlers.
// The concrete TrackpointStore satisfies it.
type TrackpointStorer interface {
UpsertBatch(ctx context.Context, userID string, points []domain.Trackpoint) (accepted []string, rejected []RejectedItem, err error)
ListByDate(ctx context.Context, userID, date string) ([]domain.Trackpoint, error)
ListDays(ctx context.Context, userID, from, to string) ([]domain.DaySummary, error)
}
// StopStorer is the interface consumed by HTTP handlers.
type StopStorer interface {
ListByDate(ctx context.Context, userID, date string) ([]domain.Stop, error)
}
// SuggestionStorer is the interface consumed by HTTP handlers.
type SuggestionStorer interface {
ListByDate(ctx context.Context, userID, date string) ([]domain.Suggestion, error)
}