package routes import ( "net/http" "net/http/httptest" "testing" "github.com/Wei-Shaw/sub2api/internal/service" "github.com/gin-gonic/gin" "github.com/stretchr/testify/require" ) func newTestRouter(t *testing.T, hs *service.HealthService) *gin.Engine { t.Helper() gin.SetMode(gin.TestMode) r := gin.New() RegisterCommonRoutes(r, hs) return r } func TestCommonRoutes_LivenessEndpoints(t *testing.T) { r := newTestRouter(t, service.NewHealthService(nil, nil)) for _, path := range []string{"/healthz", "/health"} { req := httptest.NewRequest(http.MethodGet, path, nil) w := httptest.NewRecorder() r.ServeHTTP(w, req) require.Equal(t, http.StatusOK, w.Code, "liveness path %s should be 200", path) } } func TestCommonRoutes_ReadyEndpoint_NoDepsReturnsOK(t *testing.T) { // 没有 DB/Redis 依赖时 readiness 视为 ok(早期启动场景)。 r := newTestRouter(t, service.NewHealthService(nil, nil)) req := httptest.NewRequest(http.MethodGet, "/ready", nil) w := httptest.NewRecorder() r.ServeHTTP(w, req) require.Equal(t, http.StatusOK, w.Code) require.Contains(t, w.Body.String(), "\"ok\":true") } func TestCommonRoutes_SetupStatusUnchanged(t *testing.T) { // 验证我们没有破坏既有的 /setup/status 行为(前端依赖)。 r := newTestRouter(t, service.NewHealthService(nil, nil)) req := httptest.NewRequest(http.MethodGet, "/setup/status", nil) w := httptest.NewRecorder() r.ServeHTTP(w, req) require.Equal(t, http.StatusOK, w.Code) require.Contains(t, w.Body.String(), "needs_setup") }