testing update + docs
This commit is contained in:
@@ -1,6 +1,25 @@
|
||||
//go:build test
|
||||
// +build test
|
||||
|
||||
// Package admin contains tests for admin booking management endpoints.
|
||||
//
|
||||
// Test Coverage:
|
||||
// - GetAllAdminBookingsHandler: GET /api/admin/bookings - List all bookings with filters
|
||||
// - SearchAdminBookingsHandler: POST /api/admin/bookings/search - Search bookings
|
||||
// - GetAdminBookingHandler: GET /api/admin/bookings/{id} - Get booking details
|
||||
// - AdminCreateBookingForUserHandler: POST /api/admin/bookings - Create booking for user
|
||||
// - ProgressBookingHandler: PUT /api/admin/bookings/{id}/progress - Update booking status
|
||||
// - ConfirmBookingHandler: POST /api/admin/bookings/{id}/confirm - Confirm booking
|
||||
// - AdminCancelBookingHandler: POST /api/admin/bookings/{id}/cancel - Cancel booking
|
||||
// - AdminListEditRequestsHandler: GET /api/admin/bookings/edit-requests - List edit requests
|
||||
// - AdminApproveEditRequestHandler: POST /api/admin/bookings/{id}/approve-edit - Approve edit
|
||||
// - AdminRejectEditRequestHandler: POST /api/admin/bookings/{id}/reject-edit - Reject edit
|
||||
//
|
||||
// Authentication: All endpoints require admin role (403 for non-admins).
|
||||
package admin
|
||||
//go:build test
|
||||
// +build test
|
||||
|
||||
package admin
|
||||
|
||||
import (
|
||||
|
||||
@@ -1,6 +1,19 @@
|
||||
//go:build test
|
||||
// +build test
|
||||
|
||||
// Package admin contains tests for admin service management endpoints.
|
||||
//
|
||||
// Test Coverage:
|
||||
// - CreateServiceHandler: POST /api/admin/services - Create new service
|
||||
// - AllServicesHandler: GET /api/admin/services - List all services (incl. inactive)
|
||||
// - ToggleService: PUT /api/admin/services/{id}/toggle - Toggle service active status
|
||||
// - DeleteServiceHandler: DELETE /api/admin/services/{id} - Soft delete service
|
||||
//
|
||||
// Authentication: All endpoints require admin role (403 for non-admins).
|
||||
package admin
|
||||
//go:build test
|
||||
// +build test
|
||||
|
||||
package admin
|
||||
|
||||
import (
|
||||
|
||||
@@ -1,6 +1,21 @@
|
||||
//go:build test
|
||||
// +build test
|
||||
|
||||
// Package admin contains tests for admin dashboard "today" endpoints.
|
||||
//
|
||||
// Test Coverage:
|
||||
// - GetCurrentAndNextHandler: GET /api/admin/today/current-next - Get current & next booking
|
||||
// - GetTodayAppointmentsHandler: GET /api/admin/today/appointments - Get today's bookings
|
||||
// - GetPendingApprovalsHandler: GET /api/admin/today/pending-approvals - Get pending bookings
|
||||
// - GetNotifications: GET /api/admin/notifications - List notifications (WIP - skipped)
|
||||
// - AcknowledgeNotification: POST /api/admin/notifications/{id}/ack - Acknowledge (WIP - skipped)
|
||||
//
|
||||
// Authentication: All endpoints require admin role (403 for non-admins).
|
||||
// WIP: Notification tests are skipped pending handler implementation.
|
||||
package admin
|
||||
//go:build test
|
||||
// +build test
|
||||
|
||||
package admin
|
||||
|
||||
import (
|
||||
|
||||
@@ -1,6 +1,20 @@
|
||||
//go:build test
|
||||
// +build test
|
||||
|
||||
// Package admin contains tests for admin user management endpoints.
|
||||
//
|
||||
// Test Coverage:
|
||||
// - ListAdminUsersHandler: GET /api/admin/users - List all users with pagination
|
||||
// - GetAdminUserHandler: GET /api/admin/users/{id} - Get single user details
|
||||
// - GetEligiblePatchTestServicesHandler: GET /api/admin/users/{id}/eligible-patch-tests
|
||||
// - AddPatchTestHandler: POST /api/admin/users/{id}/patch-tests - Add patch test record
|
||||
// - RequireAdmin middleware: All endpoints require admin role (403 for non-admins)
|
||||
//
|
||||
// Database State: Tests create and clean up users in the users table.
|
||||
package admin
|
||||
//go:build test
|
||||
// +build test
|
||||
|
||||
package admin
|
||||
|
||||
import (
|
||||
@@ -447,98 +461,3 @@ func TestAdminUsers_Get_Success(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestAdminUsers_Get_WithBookings(t *testing.T) {
|
||||
cleanup := setupTestDB(t)
|
||||
defer cleanup()
|
||||
|
||||
// Create a test user
|
||||
var userID string
|
||||
err := db.DB.QueryRow(context.Background(), `
|
||||
INSERT INTO users (n_first_name, n_last_name, email, phone, date_of_birth, password_hash, account_role, account_type)
|
||||
VALUES ('Alice', 'Smith', 'alice@test.com', '+447700900000', '1990-01-01', 'hash', 'verified_email', 'email')
|
||||
RETURNING id
|
||||
`).Scan(&userID)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create test user: %v", err)
|
||||
}
|
||||
|
||||
// Create a service
|
||||
var serviceID string
|
||||
err = db.DB.QueryRow(context.Background(), `
|
||||
INSERT INTO services (name, description, price, duration_minutes, is_active)
|
||||
VALUES ('Test Service', 'Test description', 50.00, 60, true)
|
||||
RETURNING id
|
||||
`).Scan(&serviceID)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create service: %v", err)
|
||||
}
|
||||
|
||||
// Create bookings for the user
|
||||
var bookingID1 string
|
||||
err = db.DB.QueryRow(context.Background(), `
|
||||
INSERT INTO bookings (user_id, start_time, status, notes)
|
||||
VALUES ($1, '2099-12-31 10:00:00+00', 'completed', 'Past booking')
|
||||
RETURNING id
|
||||
`, userID).Scan(&bookingID1)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create booking: %v", err)
|
||||
}
|
||||
|
||||
// Link service to booking
|
||||
_, err = db.DB.Exec(context.Background(),
|
||||
"INSERT INTO booking_services (booking_id, service_id) VALUES ($1, $2)",
|
||||
bookingID1, serviceID)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to link service to booking: %v", err)
|
||||
}
|
||||
|
||||
var bookingID2 string
|
||||
err = db.DB.QueryRow(context.Background(), `
|
||||
INSERT INTO bookings (user_id, start_time, status, notes)
|
||||
VALUES ($1, '2099-12-31 14:00:00+00', 'pending', 'Upcoming booking')
|
||||
RETURNING id
|
||||
`, userID).Scan(&bookingID2)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create second booking: %v", err)
|
||||
}
|
||||
|
||||
// Link service to second booking
|
||||
_, err = db.DB.Exec(context.Background(),
|
||||
"INSERT INTO booking_services (booking_id, service_id) VALUES ($1, $2)",
|
||||
bookingID2, serviceID)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to link service to second booking: %v", err)
|
||||
}
|
||||
|
||||
// Call admin get user endpoint
|
||||
handler := http.HandlerFunc(user.GetAdminUserHandler)
|
||||
w := makeAdminRequest(handler, "GET", "/api/admin/users/"+userID, nil)
|
||||
|
||||
if w.Code != http.StatusOK {
|
||||
t.Errorf("expected status 200, got %d", w.Code)
|
||||
t.Logf("response body: %s", w.Body.String())
|
||||
return
|
||||
}
|
||||
|
||||
// Note: The current implementation doesn't include bookings in the response
|
||||
// This test verifies the user is retrieved correctly
|
||||
var resp user.AdminUserDetail
|
||||
if err := json.Unmarshal(w.Body.Bytes(), &resp); err != nil {
|
||||
t.Fatalf("failed to unmarshal response: %v", err)
|
||||
}
|
||||
|
||||
if resp.ID != userID {
|
||||
t.Errorf("expected user ID %s, got %s", userID, resp.ID)
|
||||
}
|
||||
|
||||
// Verify bookings exist in database (we can't verify via response since it's not included)
|
||||
var bookingCount int
|
||||
err = db.DB.QueryRow(context.Background(),
|
||||
"SELECT COUNT(*) FROM bookings WHERE user_id = $1", userID).Scan(&bookingCount)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to count bookings: %v", err)
|
||||
}
|
||||
if bookingCount != 2 {
|
||||
t.Errorf("expected 2 bookings in DB, got %d", bookingCount)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user