diff --git a/internal/controller/health_controller.go b/internal/controller/health_controller.go index 8ad67b5..1b9adbf 100644 --- a/internal/controller/health_controller.go +++ b/internal/controller/health_controller.go @@ -19,7 +19,7 @@ func (controller *HealthController) SetupRoutes() { func (controller *HealthController) healthHandler(c *gin.Context) { c.JSON(200, gin.H{ - "status": "ok", + "status": 200, "message": "Healthy", }) } diff --git a/internal/controller/health_controller_test.go b/internal/controller/health_controller_test.go new file mode 100644 index 0000000..5f89312 --- /dev/null +++ b/internal/controller/health_controller_test.go @@ -0,0 +1,88 @@ +package controller_test + +import ( + "encoding/json" + "net/http" + "net/http/httptest" + "testing" + + "github.com/gin-gonic/gin" + "github.com/steveiliop56/tinyauth/internal/controller" +) + +func TestHealthController(t *testing.T) { + tests := []struct { + description string + path string + method string + expected string + }{ + { + description: "Ensure health endpoint returns 200 OK", + path: "/api/healthz", + method: "GET", + expected: func() string { + expectedHealthResponse := map[string]any{ + "status": 200, + "message": "Healthy", + } + + bytes, err := json.Marshal(expectedHealthResponse) + + if err != nil { + t.Fatalf("Failed to marshal expected response: %v", err) + } + + return string(bytes) + }(), + }, + { + description: "Ensure health endpoint returns 200 OK for HEAD request", + path: "/api/healthz", + method: "HEAD", + expected: func() string { + expectedHealthResponse := map[string]any{ + "status": 200, + "message": "Healthy", + } + + bytes, err := json.Marshal(expectedHealthResponse) + + if err != nil { + t.Fatalf("Failed to marshal expected response: %v", err) + } + + return string(bytes) + }(), + }, + } + + for _, test := range tests { + t.Run(test.description, func(t *testing.T) { + router := gin.Default() + group := router.Group("/api") + gin.SetMode(gin.TestMode) + + healthController := controller.NewHealthController(group) + healthController.SetupRoutes() + + recorder := httptest.NewRecorder() + + request, err := http.NewRequest(test.method, test.path, nil) + + if err != nil { + t.Fatalf("Failed to create request: %v", err) + } + + router.ServeHTTP(recorder, request) + + if recorder.Code != http.StatusOK { + t.Fatalf("Expected status code 200, got %d", recorder.Code) + } + + if recorder.Body.String() != test.expected { + t.Fatalf("Expected response body %s, got %s", test.expected, recorder.Body.String()) + } + }) + } +}