fix(openapi): preserve explicit swagger path metadata
Carry a configured Swagger UI path into OpenAPISpecBuilder even when the UI option itself is not enabled yet, and add a regression test for the path-only case. Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
parent
5d28b8d83d
commit
76aa4c9974
2 changed files with 29 additions and 2 deletions
|
|
@ -2,7 +2,10 @@
|
|||
|
||||
package api
|
||||
|
||||
import "slices"
|
||||
import (
|
||||
"slices"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// OpenAPISpecBuilder returns a SpecBuilder populated from the engine's current
|
||||
// Swagger and transport metadata.
|
||||
|
|
@ -30,7 +33,7 @@ func (e *Engine) OpenAPISpecBuilder() *SpecBuilder {
|
|||
ExternalDocsURL: e.swaggerExternalDocsURL,
|
||||
}
|
||||
|
||||
if e.swaggerEnabled {
|
||||
if e.swaggerEnabled || strings.TrimSpace(e.swaggerPath) != "" {
|
||||
builder.SwaggerPath = resolveSwaggerPath(e.swaggerPath)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -154,3 +154,27 @@ func TestEngine_Good_OpenAPISpecBuilderExportsDefaultSwaggerPath(t *testing.T) {
|
|||
t.Fatalf("expected default x-swagger-ui-path=/swagger, got %v", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestEngine_Good_OpenAPISpecBuilderCarriesExplicitSwaggerPathWithoutUI(t *testing.T) {
|
||||
gin.SetMode(gin.TestMode)
|
||||
|
||||
e, err := api.New(api.WithSwaggerPath("/docs"))
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
builder := e.OpenAPISpecBuilder()
|
||||
data, err := builder.Build(nil)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
var spec map[string]any
|
||||
if err := json.Unmarshal(data, &spec); err != nil {
|
||||
t.Fatalf("invalid JSON: %v", err)
|
||||
}
|
||||
|
||||
if got := spec["x-swagger-ui-path"]; got != "/docs" {
|
||||
t.Fatalf("expected explicit x-swagger-ui-path=/docs, got %v", got)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue