-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathoperation_validate_test.go
More file actions
116 lines (100 loc) · 2.34 KB
/
Copy pathoperation_validate_test.go
File metadata and controls
116 lines (100 loc) · 2.34 KB
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package swagger_test
import (
"bytes"
"strings"
"testing"
"github.com/speakeasy-api/openapi/marshaller"
"github.com/speakeasy-api/openapi/swagger"
"github.com/stretchr/testify/require"
)
func TestOperation_Validate_Success(t *testing.T) {
t.Parallel()
tests := []struct {
name string
yml string
}{
{
name: "minimal_valid_operation",
yml: `responses:
200:
description: Success`,
},
{
name: "complete_operation",
yml: `summary: Get users
description: Retrieve a list of users
operationId: getUsers
tags:
- users
consumes:
- application/json
produces:
- application/json
parameters:
- name: limit
in: query
type: integer
responses:
200:
description: Success
404:
description: Not found`,
},
{
name: "operation_with_schemes",
yml: `schemes:
- https
responses:
200:
description: Success`,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
var operation swagger.Operation
validationErrs, err := marshaller.Unmarshal(t.Context(), bytes.NewBufferString(tt.yml), &operation)
require.NoError(t, err)
require.Empty(t, validationErrs)
errs := operation.Validate(t.Context())
require.Empty(t, errs, "Expected no validation errors")
})
}
}
func TestOperation_Validate_Error(t *testing.T) {
t.Parallel()
tests := []struct {
name string
yml string
wantErrs []string
}{
{
name: "missing_responses",
yml: `summary: Test operation`,
wantErrs: []string{"`operation.responses` is required"},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
var operation swagger.Operation
var allErrors []error
validationErrs, err := marshaller.Unmarshal(t.Context(), bytes.NewBufferString(tt.yml), &operation)
require.NoError(t, err)
allErrors = append(allErrors, validationErrs...)
validateErrs := operation.Validate(t.Context())
allErrors = append(allErrors, validateErrs...)
require.NotEmpty(t, allErrors, "Expected validation errors")
for _, wantErr := range tt.wantErrs {
found := false
for _, gotErr := range allErrors {
if gotErr != nil && strings.Contains(gotErr.Error(), wantErr) {
found = true
break
}
}
require.True(t, found, "Expected error containing '%s' not found in: %v", wantErr, allErrors)
}
})
}
}