2025-06-25 13:26:35 +08:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"net/http"
|
|
|
|
"net/http/httptest"
|
|
|
|
"strings"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestMain(m *testing.M) {
|
|
|
|
gin.SetMode(gin.TestMode)
|
|
|
|
m.Run()
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestPingRoute(t *testing.T) {
|
|
|
|
router := setupRouter()
|
2025-06-25 15:12:40 +08:00
|
|
|
|
2025-06-25 13:26:35 +08:00
|
|
|
w := httptest.NewRecorder()
|
|
|
|
req, _ := http.NewRequest("GET", "/ping", nil)
|
|
|
|
router.ServeHTTP(w, req)
|
2025-06-25 15:12:40 +08:00
|
|
|
|
2025-06-25 13:26:35 +08:00
|
|
|
assert.Equal(t, 200, w.Code)
|
|
|
|
assert.Contains(t, w.Body.String(), "pong")
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestHealthRoute(t *testing.T) {
|
|
|
|
router := setupRouter()
|
2025-06-25 15:12:40 +08:00
|
|
|
|
2025-06-25 13:26:35 +08:00
|
|
|
w := httptest.NewRecorder()
|
|
|
|
req, _ := http.NewRequest("GET", "/health", nil)
|
|
|
|
router.ServeHTTP(w, req)
|
2025-06-25 15:12:40 +08:00
|
|
|
|
2025-06-25 13:26:35 +08:00
|
|
|
assert.Equal(t, 200, w.Code)
|
|
|
|
assert.Contains(t, w.Body.String(), "healthy")
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestHomeRoute(t *testing.T) {
|
|
|
|
router := setupRouter()
|
2025-06-25 15:12:40 +08:00
|
|
|
|
2025-06-25 13:26:35 +08:00
|
|
|
w := httptest.NewRecorder()
|
|
|
|
req, _ := http.NewRequest("GET", "/", nil)
|
|
|
|
router.ServeHTTP(w, req)
|
2025-06-25 15:12:40 +08:00
|
|
|
|
2025-06-25 13:26:35 +08:00
|
|
|
assert.Equal(t, 200, w.Code)
|
|
|
|
assert.Contains(t, w.Body.String(), "Welcome to Golang Demo API")
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestVersionRoute(t *testing.T) {
|
|
|
|
router := setupRouter()
|
2025-06-25 15:12:40 +08:00
|
|
|
|
2025-06-25 13:26:35 +08:00
|
|
|
w := httptest.NewRecorder()
|
|
|
|
req, _ := http.NewRequest("GET", "/version", nil)
|
|
|
|
router.ServeHTTP(w, req)
|
2025-06-25 15:12:40 +08:00
|
|
|
|
2025-06-25 13:26:35 +08:00
|
|
|
assert.Equal(t, 200, w.Code)
|
|
|
|
assert.Contains(t, w.Body.String(), "version")
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestAPIStatusRoute(t *testing.T) {
|
|
|
|
router := setupRouter()
|
2025-06-25 15:12:40 +08:00
|
|
|
|
2025-06-25 13:26:35 +08:00
|
|
|
w := httptest.NewRecorder()
|
|
|
|
req, _ := http.NewRequest("GET", "/api/v1/status", nil)
|
|
|
|
router.ServeHTTP(w, req)
|
2025-06-25 15:12:40 +08:00
|
|
|
|
2025-06-25 13:26:35 +08:00
|
|
|
assert.Equal(t, 200, w.Code)
|
|
|
|
assert.Contains(t, w.Body.String(), "v1")
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestEchoRoute(t *testing.T) {
|
|
|
|
router := setupRouter()
|
2025-06-25 15:12:40 +08:00
|
|
|
|
2025-06-25 13:26:35 +08:00
|
|
|
body := `{"message": "test message"}`
|
|
|
|
w := httptest.NewRecorder()
|
|
|
|
req, _ := http.NewRequest("POST", "/api/v1/echo", strings.NewReader(body))
|
|
|
|
req.Header.Set("Content-Type", "application/json")
|
|
|
|
router.ServeHTTP(w, req)
|
2025-06-25 15:12:40 +08:00
|
|
|
|
2025-06-25 13:26:35 +08:00
|
|
|
assert.Equal(t, 200, w.Code)
|
|
|
|
assert.Contains(t, w.Body.String(), "test message")
|
2025-06-25 15:12:40 +08:00
|
|
|
}
|