1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
package openapi3
import (
"context"
"testing"
"github.com/stretchr/testify/require"
)
func TestPathsValidate(t *testing.T) {
tests := []struct {
name string
spec string
wantErr string
}{
{
name: "ok, empty paths",
spec: `
openapi: "3.0.0"
info:
version: 1.0.0
title: Swagger Petstore
license:
name: MIT
paths:
/pets:
`,
},
{
name: "operation ids are not unique, same path",
spec: `
openapi: "3.0.0"
info:
version: 1.0.0
title: Swagger Petstore
license:
name: MIT
paths:
/pets:
post:
operationId: createPet
responses:
201:
description: "entity created"
delete:
operationId: createPet
responses:
204:
description: "entity deleted"
`,
wantErr: `operations "DELETE /pets" and "POST /pets" have the same operation id "createPet"`,
},
{
name: "operation ids are not unique, different paths",
spec: `
openapi: "3.0.0"
info:
version: 1.0.0
title: Swagger Petstore
license:
name: MIT
paths:
/pets:
post:
operationId: createPet
responses:
201:
description: "entity created"
/users:
post:
operationId: createPet
responses:
201:
description: "entity created"
`,
wantErr: `operations "POST /pets" and "POST /users" have the same operation id "createPet"`,
},
}
for i := range tests {
tt := tests[i]
t.Run(tt.name, func(t *testing.T) {
loader := NewLoader()
doc, err := loader.LoadFromData([]byte(tt.spec[1:]))
require.NoError(t, err)
err = doc.Paths.Validate(context.Background())
if tt.wantErr == "" {
require.NoError(t, err)
return
}
require.EqualError(t, err, tt.wantErr)
})
}
}
|