2026-05-23 22:10:20 +08:00
|
|
|
package bootstrap
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"net/http"
|
2026-05-23 22:44:06 +08:00
|
|
|
"net/http/httptest"
|
|
|
|
|
"strings"
|
2026-05-23 22:10:20 +08:00
|
|
|
"testing"
|
|
|
|
|
|
|
|
|
|
"cs-agent/internal/pkg/config"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func TestNewServerRegistersGinRoutes(t *testing.T) {
|
|
|
|
|
config.SetCurrent(&config.Config{
|
|
|
|
|
Storage: config.StorageConfig{
|
|
|
|
|
Local: config.LocalStorageConfig{
|
|
|
|
|
Root: "storage",
|
|
|
|
|
BaseURL: "/storage",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
app, err := NewServer()
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("NewServer() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
routes := make(map[string]bool)
|
|
|
|
|
for _, route := range app.Routes() {
|
|
|
|
|
routes[route.Method+" "+route.Path] = true
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
expected := []string{
|
|
|
|
|
http.MethodPost + " /api/auth/login",
|
|
|
|
|
http.MethodGet + " /api/auth/profile",
|
|
|
|
|
http.MethodGet + " /api/dashboard/user/list",
|
|
|
|
|
http.MethodGet + " /api/dashboard/user/:id",
|
|
|
|
|
http.MethodPost + " /api/dashboard/user/create",
|
|
|
|
|
http.MethodPost + " /api/dashboard/conversation/send_message",
|
|
|
|
|
http.MethodGet + " /api/ws/dashboard",
|
|
|
|
|
http.MethodGet + " /api/ws/open",
|
|
|
|
|
}
|
|
|
|
|
for _, route := range expected {
|
|
|
|
|
if !routes[route] {
|
|
|
|
|
t.Fatalf("expected route %s to be registered", route)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-05-23 22:44:06 +08:00
|
|
|
|
|
|
|
|
func TestNewServerSeparatesAPIStaticAndSPA(t *testing.T) {
|
|
|
|
|
config.SetCurrent(&config.Config{
|
|
|
|
|
Storage: config.StorageConfig{
|
|
|
|
|
Local: config.LocalStorageConfig{
|
|
|
|
|
Root: "storage",
|
|
|
|
|
BaseURL: "/storage",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
app, err := NewServer()
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("NewServer() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tests := []struct {
|
|
|
|
|
path string
|
|
|
|
|
wantStatus int
|
|
|
|
|
contentType string
|
|
|
|
|
}{
|
|
|
|
|
{path: "/api/not-exists", wantStatus: http.StatusNotFound, contentType: "application/json"},
|
|
|
|
|
{path: "/dashboard/not-exists", wantStatus: http.StatusOK, contentType: "text/html"},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for _, tt := range tests {
|
|
|
|
|
rec := httptest.NewRecorder()
|
|
|
|
|
app.ServeHTTP(rec, httptest.NewRequest(http.MethodGet, tt.path, nil))
|
|
|
|
|
|
|
|
|
|
if rec.Code != tt.wantStatus {
|
|
|
|
|
t.Fatalf("%s status=%d want %d", tt.path, rec.Code, tt.wantStatus)
|
|
|
|
|
}
|
|
|
|
|
if !strings.Contains(rec.Header().Get("Content-Type"), tt.contentType) {
|
|
|
|
|
t.Fatalf("%s Content-Type=%q want %q", tt.path, rec.Header().Get("Content-Type"), tt.contentType)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|