refactor: remove auto deposit penalty on no-shows, add comprehensive tests
- Remove automatic deposits_required=3 on no-shows, give admin flexibility - Add tests for no-show deposit logic (forgiven, over 24h, under 24h) - Add tests for reservation cleanup TTL (admin walk-in/call-in 15min) - Add tests for EXIF GPS data stripping in portfolio images - Add tests for contact info endpoint - Add tests for guest account anonymization
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
//go:build test
|
||||
// +build test
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"crussell/db"
|
||||
"crussell/testutils"
|
||||
)
|
||||
|
||||
func TestHealthCheck_OK(t *testing.T) {
|
||||
// Setup test database
|
||||
cleanup := testutils.SetupTestDB(t)
|
||||
defer cleanup()
|
||||
|
||||
// Create request and recorder
|
||||
req := httptest.NewRequest(http.MethodGet, "/api/health", nil)
|
||||
w := httptest.NewRecorder()
|
||||
|
||||
// Call handler directly
|
||||
healthCheckHandler(w, req)
|
||||
|
||||
// Assert 200 OK
|
||||
if w.Code != http.StatusOK {
|
||||
t.Errorf("expected status %d, got %d. body: %s", http.StatusOK, w.Code, w.Body.String())
|
||||
}
|
||||
|
||||
// Parse JSON response
|
||||
var response map[string]interface{}
|
||||
if err := json.Unmarshal(w.Body.Bytes(), &response); err != nil {
|
||||
t.Fatalf("failed to parse JSON response: %v", err)
|
||||
}
|
||||
|
||||
// Assert status == "ok"
|
||||
status, ok := response["status"].(string)
|
||||
if !ok || status != "ok" {
|
||||
t.Errorf("expected status 'ok', got '%v'", response["status"])
|
||||
}
|
||||
|
||||
// Assert services
|
||||
services, ok := response["services"].(map[string]interface{})
|
||||
if !ok {
|
||||
t.Fatalf("services not found in response")
|
||||
}
|
||||
|
||||
// Assert services.backend == "ok"
|
||||
backend, ok := services["backend"].(string)
|
||||
if !ok || backend != "ok" {
|
||||
t.Errorf("expected services.backend 'ok', got '%v'", services["backend"])
|
||||
}
|
||||
|
||||
// Assert services.database == "ok"
|
||||
database, ok := services["database"].(string)
|
||||
if !ok || database != "ok" {
|
||||
t.Errorf("expected services.database 'ok', got '%v'", services["database"])
|
||||
}
|
||||
}
|
||||
|
||||
func TestHealthCheck_Degraded(t *testing.T) {
|
||||
// Setup test database
|
||||
cleanup := testutils.SetupTestDB(t)
|
||||
|
||||
// Save original db.DB and set to nil to simulate degraded state
|
||||
originalDB := db.DB
|
||||
db.DB = nil
|
||||
|
||||
// Create request and recorder
|
||||
req := httptest.NewRequest(http.MethodGet, "/api/health", nil)
|
||||
w := httptest.NewRecorder()
|
||||
|
||||
// Call handler directly
|
||||
healthCheckHandler(w, req)
|
||||
|
||||
// Assert 503 Service Unavailable
|
||||
if w.Code != http.StatusServiceUnavailable {
|
||||
t.Errorf("expected status %d, got %d. body: %s", http.StatusServiceUnavailable, w.Code, w.Body.String())
|
||||
}
|
||||
|
||||
// Parse JSON response
|
||||
var response map[string]interface{}
|
||||
if err := json.Unmarshal(w.Body.Bytes(), &response); err != nil {
|
||||
t.Fatalf("failed to parse JSON response: %v", err)
|
||||
}
|
||||
|
||||
// Assert status == "degraded"
|
||||
status, ok := response["status"].(string)
|
||||
if !ok || status != "degraded" {
|
||||
t.Errorf("expected status 'degraded', got '%v'", response["status"])
|
||||
}
|
||||
|
||||
// Assert services
|
||||
services, ok := response["services"].(map[string]interface{})
|
||||
if !ok {
|
||||
t.Fatalf("services not found in response")
|
||||
}
|
||||
|
||||
// Assert services.database == "error"
|
||||
database, ok := services["database"].(string)
|
||||
if !ok || database != "error" {
|
||||
t.Errorf("expected services.database 'error', got '%v'", services["database"])
|
||||
}
|
||||
|
||||
// Restore original db.DB and cleanup
|
||||
db.DB = originalDB
|
||||
cleanup()
|
||||
}
|
||||
Reference in New Issue
Block a user