test: add coverage tests across backend + fix mock for PENDING checkout support
CI / Nginx config check (push) Successful in 13s
CI / Env docs check (push) Successful in 15s
CI / Docker compose check (push) Successful in 15s
CI / Frontend major deps (push) Failing after 24s
CI / Frontend deps check (push) Successful in 30s
CI / Secrets scan (push) Successful in 38s
CI / Go build (push) Successful in 39s
CI / Frontend build (push) Successful in 1m3s
CI / Knip (push) Successful in 45s
CI / Go vet (prod) (push) Failing after 1m42s
CI / Frontend a11y check (push) Successful in 2m34s
CI / Go vet (dev) (push) Successful in 2m29s
CI / Staticcheck (prod) (push) Failing after 2m38s
CI / go mod tidy (push) Successful in 1m3s
CI / Staticcheck (dev) (push) Successful in 2m55s
CI / Frontend QC (audit) (push) Successful in 51s
CI / golangci-lint (push) Successful in 3m22s
CI / Go vulnerabilities (push) Successful in 1m26s
CI / Frontend QC (typecheck) (push) Successful in 2m18s
CI / Security scan (prod) (push) Successful in 4m18s
CI / Security scan (dev) (push) Successful in 4m40s
CI / Tests (prod) (push) Has been skipped
CI / Tests (dev) (push) Has been skipped
CI / Race (prod) (push) Has been skipped
CI / Race (dev) (push) Has been skipped
CI / Frontend QC (lint) (push) Successful in 2m18s
CI / Svelte strict check (push) Successful in 43s

New test files cover previously untested paths across DAV, validators,
S3, Square, mw, bookings, user, and payments packages.

Includes mock fix: HoldCheckouts flag on MockClient allows tests to
pause auto-complete goroutine for testing PENDING checkout states.

Coverage: 50.4% → 65.0% (+14.6pp)
This commit is contained in:
2026-07-10 18:13:44 +01:00
parent c0442d4ebd
commit 3029fd5179
57 changed files with 12604 additions and 94 deletions
+49
View File
@@ -285,3 +285,52 @@ func TestCheckEmail_MissingEmail(t *testing.T) {
t.Errorf("expected 'email query parameter required' in body, got %s", rr.Body.String())
}
}
// TestGuestUser_Create_Success verifies that a valid guest user request
// creates a guest user and returns 201 with the user's details.
func TestGuestUser_Create_Success(t *testing.T) {
// NOT parallel — uses db.Conn state
ctx, tx := testutils.SetupTestTx(t)
reqBody := CreateGuestUserRequest{
FirstName: "Jane",
LastName: "Guest",
Email: "jane.guest.success@example.com",
Phone: "07123456789",
}
body, _ := json.Marshal(reqBody)
req := httptest.NewRequest(http.MethodPost, "/api/user/guest", bytes.NewReader(body))
req.Header.Set("Content-Type", "application/json")
req = req.WithContext(ctx)
rr := httptest.NewRecorder()
CreateGuestUserHandler(rr, req)
if rr.Code != http.StatusCreated {
t.Errorf("expected status 201, got %d", rr.Code)
t.Logf("response body: %s", rr.Body.String())
}
// Verify user was created in DB
var count int
err := tx.QueryRow(ctx, `SELECT COUNT(*) FROM users WHERE email = $1 AND account_role = 'guest'`, "jane.guest.success@example.com").Scan(&count)
if err != nil {
t.Fatalf("failed to query users: %v", err)
}
if count != 1 {
t.Errorf("expected 1 guest user (account_role='guest'), got %d", count)
}
// Verify response body contains ID and role
var resp CreateGuestUserResponse
if err := json.Unmarshal(rr.Body.Bytes(), &resp); err != nil {
t.Fatalf("failed to unmarshal response: %v", err)
}
if resp.ID == "" {
t.Error("expected non-empty user ID in response")
}
if resp.Role != "guest" {
t.Errorf("expected role 'guest', got '%s'", resp.Role)
}
}