Skip to content

Commit 465f7af

Browse files
committed
fix(config): add default server if none is specified
fix(config): fix convert server from Swagger to OpenAPI if no basePath is specified
1 parent 862aa4b commit 465f7af

4 files changed

Lines changed: 57 additions & 2 deletions

File tree

providers/openapi/config.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@ func (c *Config) Parse(config *dynamic.Config, reader dynamic.Reader) error {
114114
return nil
115115
}
116116

117+
if len(c.Servers) == 0 {
118+
c.Servers = append(c.Servers, &Server{Url: "/"})
119+
}
120+
117121
config.Scope.OpenIfNeeded(config.Info.Path())
118122

119123
return c.Paths.parse(config, reader)

providers/openapi/config_test.go

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,45 @@ paths:
146146
}
147147
}
148148

149+
func TestConfig_Parse(t *testing.T) {
150+
testcases := []struct {
151+
name string
152+
config *openapi.Config
153+
test func(t *testing.T, config *openapi.Config, err error)
154+
}{
155+
{
156+
name: "empty server",
157+
config: &openapi.Config{},
158+
test: func(t *testing.T, config *openapi.Config, err error) {
159+
require.NoError(t, err)
160+
require.Len(t, config.Servers, 1)
161+
require.Equal(t, "/", config.Servers[0].Url)
162+
},
163+
},
164+
{
165+
name: "one server",
166+
config: openapitest.NewConfig("3.1.0", openapitest.WithServer("/foo", "")),
167+
test: func(t *testing.T, config *openapi.Config, err error) {
168+
require.NoError(t, err)
169+
require.Len(t, config.Servers, 1)
170+
require.Equal(t, "/foo", config.Servers[0].Url)
171+
},
172+
},
173+
}
174+
175+
for _, tc := range testcases {
176+
tc := tc
177+
t.Run(tc.name, func(t *testing.T) {
178+
t.Parallel()
179+
err := tc.config.Parse(&dynamic.Config{
180+
Data: tc.config,
181+
Info: dynamictest.NewConfigInfo(),
182+
}, &dynamictest.Reader{})
183+
tc.test(t, tc.config, err)
184+
})
185+
}
186+
}
187+
149188
func TestResponses(t *testing.T) {
150189
testdata := []struct {
151190
name string
@@ -380,7 +419,7 @@ func TestPetStore_Response(t *testing.T) {
380419
require.Nil(t, m)
381420
}
382421

383-
func TestPetStore_Paramters(t *testing.T) {
422+
func TestPetStore_Parameters(t *testing.T) {
384423
config := &openapi.Config{}
385424
err := yaml.Unmarshal([]byte(petstore), &config)
386425
require.NoError(t, err)

providers/swagger/convert.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,11 @@ func (c *converter) Convert() (*openapi.Config, error) {
3030

3131
if len(c.config.Schemes) == 0 {
3232
if len(c.config.Host) == 0 {
33-
result.Servers = append(result.Servers, &openapi.Server{Url: c.config.BasePath})
33+
if c.config.BasePath == "" {
34+
result.Servers = append(result.Servers, &openapi.Server{Url: "/"})
35+
} else {
36+
result.Servers = append(result.Servers, &openapi.Server{Url: c.config.BasePath})
37+
}
3438
} else {
3539
result.Servers = append(result.Servers, &openapi.Server{Url: fmt.Sprintf("http://%v%v", c.config.Host, c.config.BasePath)})
3640
}

providers/swagger/convert_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,14 @@ func TestConvert(t *testing.T) {
109109
require.Equal(t, "https://foo/bar", config.Servers[0].Url)
110110
},
111111
},
112+
{
113+
name: "scheme, host and basePath is empty",
114+
config: `{"swagger": "2.0"}`,
115+
test: func(t *testing.T, config *openapi.Config) {
116+
require.Len(t, config.Servers, 1)
117+
require.Equal(t, "/", config.Servers[0].Url)
118+
},
119+
},
112120
{
113121
name: "path ref",
114122
config: `{"swagger": "2.0","paths":{"/foo":{"$ref":"./foo.json"}}}`,

0 commit comments

Comments
 (0)