3x-ui/web/web_smoke_test.go

64 lines
1.8 KiB
Go
Raw Normal View History

package web
import (
"net/http"
"net/http/httptest"
"path/filepath"
"testing"
"github.com/mhsanaei/3x-ui/v2/database"
"github.com/mhsanaei/3x-ui/v2/web/global"
"github.com/robfig/cron/v3"
)
func TestRouterSmokeAuthAndCoreRoutes(t *testing.T) {
dbPath := filepath.Join(t.TempDir(), "web-smoke.db")
if err := database.InitDB(dbPath); err != nil {
t.Fatalf("InitDB failed: %v", err)
}
defer func() {
_ = database.CloseDB()
}()
s := NewServer()
s.cron = cron.New(cron.WithSeconds())
global.SetWebServer(s)
engine, err := s.initRouter()
if err != nil {
t.Fatalf("initRouter failed: %v", err)
}
// Login page should be reachable.
rec := httptest.NewRecorder()
req := httptest.NewRequest(http.MethodGet, "/", nil)
engine.ServeHTTP(rec, req)
if rec.Code != http.StatusOK {
t.Fatalf("expected GET / to return 200, got %d", rec.Code)
}
// Unauthenticated API request should be hidden as 404.
rec = httptest.NewRecorder()
req = httptest.NewRequest(http.MethodGet, "/panel/api/server/status", nil)
engine.ServeHTTP(rec, req)
if rec.Code != http.StatusNotFound {
t.Fatalf("expected unauthenticated API to return 404, got %d", rec.Code)
}
// Panel root requires auth and should redirect.
rec = httptest.NewRecorder()
req = httptest.NewRequest(http.MethodGet, "/panel/", nil)
engine.ServeHTTP(rec, req)
if rec.Code != http.StatusTemporaryRedirect {
t.Fatalf("expected unauthenticated panel route to redirect, got %d", rec.Code)
}
for _, path := range []string{"/panel/inbounds", "/panel/settings", "/panel/xray"} {
rec = httptest.NewRecorder()
req = httptest.NewRequest(http.MethodGet, path, nil)
engine.ServeHTTP(rec, req)
if rec.Code != http.StatusTemporaryRedirect {
t.Fatalf("expected unauthenticated %s to redirect, got %d", path, rec.Code)
}
}
}