99 lines
3.4 KiB
Go
99 lines
3.4 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"strings"
|
|
)
|
|
|
|
// 🧪 GO 13 TESTSUITE: HTTP Web Server & Routing
|
|
|
|
func assertEquals[T comparable](actual, expected T, msg string) {
|
|
if actual != expected {
|
|
panic(fmt.Sprintf("❌ Test fehlgeschlagen: %s (Erwartet: '%v', Erhalten: '%v')", msg, expected, actual))
|
|
}
|
|
}
|
|
|
|
// TEST: TestHealthHandler - Prüft /health Endpoint
|
|
func TestHealthHandler() {
|
|
fmt.Println("=== RUN TestHealthHandler")
|
|
// 1. GET Request
|
|
reqGet := httptest.NewRequest(http.MethodGet, "/health", nil)
|
|
recGet := httptest.NewRecorder()
|
|
HealthHandler(recGet, reqGet)
|
|
|
|
assertEquals(recGet.Code, http.StatusOK, "Statuscode muss 200 OK sein")
|
|
assertEquals(strings.TrimSpace(recGet.Body.String()), "STATUS: UP", "Body muss 'STATUS: UP' enthalten")
|
|
|
|
// 2. POST Request (soll 405 liefern)
|
|
reqPost := httptest.NewRequest(http.MethodPost, "/health", nil)
|
|
recPost := httptest.NewRecorder()
|
|
HealthHandler(recPost, reqPost)
|
|
|
|
assertEquals(recPost.Code, http.StatusMethodNotAllowed, "POST auf /health muss 405 Method Not Allowed liefern")
|
|
fmt.Println("--- PASS: TestHealthHandler")
|
|
}
|
|
|
|
// TEST: TestEchoHandler - Prüft /echo Query-Parameter
|
|
func TestEchoHandler() {
|
|
fmt.Println("=== RUN TestEchoHandler")
|
|
// 1. Gültiger Query Parameter
|
|
reqValid := httptest.NewRequest(http.MethodGet, "/echo?msg=GolangCloud", nil)
|
|
recValid := httptest.NewRecorder()
|
|
EchoHandler(recValid, reqValid)
|
|
|
|
assertEquals(recValid.Code, http.StatusOK, "Statuscode muss 200 OK sein")
|
|
assertEquals(recValid.Body.String(), "ECHO: GolangCloud", "Body muss 'ECHO: GolangCloud' sein")
|
|
|
|
// 2. Fehlender Query Parameter
|
|
reqMissing := httptest.NewRequest(http.MethodGet, "/echo", nil)
|
|
recMissing := httptest.NewRecorder()
|
|
EchoHandler(recMissing, reqMissing)
|
|
|
|
assertEquals(recMissing.Code, http.StatusBadRequest, "Fehlender Parameter muss 400 Bad Request liefern")
|
|
fmt.Println("--- PASS: TestEchoHandler")
|
|
}
|
|
|
|
// TEST: TestUserProfileHandler - Prüft Pfad-Parameter /users/{username}
|
|
func TestUserProfileHandler() {
|
|
fmt.Println("=== RUN TestUserProfileHandler")
|
|
// 1. Gültiger Username
|
|
reqUser := httptest.NewRequest(http.MethodGet, "/users/gopher123", nil)
|
|
recUser := httptest.NewRecorder()
|
|
UserProfileHandler(recUser, reqUser)
|
|
|
|
assertEquals(recUser.Code, http.StatusOK, "Statuscode muss 200 OK sein")
|
|
assertEquals(recUser.Body.String(), "User Profile: gopher123", "Body muss 'User Profile: gopher123' sein")
|
|
|
|
// 2. Leerer Username
|
|
reqEmpty := httptest.NewRequest(http.MethodGet, "/users/", nil)
|
|
recEmpty := httptest.NewRecorder()
|
|
UserProfileHandler(recEmpty, reqEmpty)
|
|
|
|
assertEquals(recEmpty.Code, http.StatusBadRequest, "Leerer Username muss 400 Bad Request liefern")
|
|
fmt.Println("--- PASS: TestUserProfileHandler")
|
|
}
|
|
|
|
// TEST: TestRouterDispatch - Prüft ServeMux Routing
|
|
func TestRouterDispatch() {
|
|
fmt.Println("=== RUN TestRouterDispatch")
|
|
router := SetupAPIRouter()
|
|
|
|
req := httptest.NewRequest(http.MethodGet, "/health", nil)
|
|
rec := httptest.NewRecorder()
|
|
router.ServeHTTP(rec, req)
|
|
|
|
assertEquals(rec.Code, http.StatusOK, "Router muss /health an HealthHandler routen")
|
|
assertEquals(strings.TrimSpace(rec.Body.String()), "STATUS: UP", "Router-Response muss stimmen")
|
|
fmt.Println("--- PASS: TestRouterDispatch")
|
|
}
|
|
|
|
func main() {
|
|
fmt.Println("🧪 Starte Go 13 Testsuite...")
|
|
TestHealthHandler()
|
|
TestEchoHandler()
|
|
TestUserProfileHandler()
|
|
TestRouterDispatch()
|
|
fmt.Println("\n✅ Alle Tests in Go 13 erfolgreich bestanden!")
|
|
}
|