mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-06-07 21:04:32 +00:00
ServeOpenAPISpec shipped servers:[{url:"/"}], so Swagger UI "Try it out" and external generators hit the origin root and ignored a non-root webBasePath. Inject the runtime base path into the single servers entry at serve time, touching only that field via json.RawMessage so the rest of the spec is preserved verbatim.
43 lines
1.1 KiB
Go
43 lines
1.1 KiB
Go
package controller
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
)
|
|
|
|
func TestWithServerBasePath(t *testing.T) {
|
|
spec := []byte(`{"openapi":"3.0.3","info":{"title":"x"},"servers":[{"url":"/","description":"old"}],"paths":{"/p":{"get":{"summary":"s"}}}}`)
|
|
|
|
out, err := withServerBasePath(spec, "/test/")
|
|
if err != nil {
|
|
t.Fatalf("withServerBasePath: %v", err)
|
|
}
|
|
|
|
var doc map[string]any
|
|
if err := json.Unmarshal(out, &doc); err != nil {
|
|
t.Fatalf("unmarshal result: %v", err)
|
|
}
|
|
|
|
servers, ok := doc["servers"].([]any)
|
|
if !ok || len(servers) != 1 {
|
|
t.Fatalf("servers = %v, want one entry", doc["servers"])
|
|
}
|
|
srv, _ := servers[0].(map[string]any)
|
|
if srv["url"] != "/test" {
|
|
t.Errorf("server url = %v, want /test (trailing slash trimmed)", srv["url"])
|
|
}
|
|
|
|
if doc["openapi"] != "3.0.3" {
|
|
t.Errorf("openapi field not preserved: %v", doc["openapi"])
|
|
}
|
|
if _, ok := doc["paths"].(map[string]any)["/p"]; !ok {
|
|
t.Errorf("paths content not preserved verbatim")
|
|
}
|
|
}
|
|
|
|
func TestWithServerBasePathInvalidJSON(t *testing.T) {
|
|
if _, err := withServerBasePath([]byte("not json"), "/test/"); err == nil {
|
|
t.Errorf("expected error on invalid spec, got nil")
|
|
}
|
|
}
|