-
Notifications
You must be signed in to change notification settings - Fork 48
Expand file tree
/
Copy pathDocumentErrorTests.swift
More file actions
191 lines (152 loc) · 5.69 KB
/
DocumentErrorTests.swift
File metadata and controls
191 lines (152 loc) · 5.69 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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
//
// DocumentErrorTests.swift
//
#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
import XCTest
import OpenAPIKit30
import Yams
final class DocumentErrorTests: XCTestCase {
func test_missingOpenAPIVersion() {
let documentYML =
"""
info:
title: test
version: 1.0
paths: {}
"""
XCTAssertThrowsError(try testDecoder.decode(OpenAPI.Document.self, from: documentYML)) { error in
let openAPIError = OpenAPI.Error(from: error)
XCTAssertEqual(openAPIError.localizedDescription, "Expected to find `openapi` key in the root Document object but it is missing.")
XCTAssertEqual(openAPIError.localizedDescription, openAPIError.description)
XCTAssertEqual(openAPIError.codingPath.map { $0.stringValue }, [])
}
}
func test_wrongTypesOpenAPIVersion() {
let documentYML =
"""
openapi: null
info:
title: test
version: 1.0
paths: {}
"""
XCTAssertThrowsError(try testDecoder.decode(OpenAPI.Document.self, from: documentYML)) { error in
let openAPIError = OpenAPI.Error(from: error)
XCTAssertEqual(openAPIError.localizedDescription, "Problem encountered when parsing `openapi` in the root Document object: Cannot initialize Version from invalid String value null.")
XCTAssertEqual(openAPIError.codingPath.map { $0.stringValue }, [
"openapi"
])
}
let documentYML2 =
"""
openapi: []
info:
title: test
version: 1.0
paths: {}
"""
XCTAssertThrowsError(try testDecoder.decode(OpenAPI.Document.self, from: documentYML2)) { error in
let openAPIError = OpenAPI.Error(from: error)
XCTAssertEqual(openAPIError.localizedDescription, "Expected `openapi` value in the root Document object to be parsable as Scalar but it was not.")
XCTAssertEqual(openAPIError.codingPath.map { $0.stringValue }, [
"openapi"
])
}
let documentYML3 =
"""
openapi: {}
info:
title: test
version: 1.0
paths: {}
"""
XCTAssertThrowsError(try testDecoder.decode(OpenAPI.Document.self, from: documentYML3)) { error in
let openAPIError = OpenAPI.Error(from: error)
XCTAssertEqual(openAPIError.localizedDescription, "Expected `openapi` value in the root Document object to be parsable as Scalar but it was not.")
XCTAssertEqual(openAPIError.codingPath.map { $0.stringValue }, [
"openapi"
])
}
}
func test_missingInfo() {
let documentYML =
"""
openapi: "3.0.0"
paths: {}
"""
XCTAssertThrowsError(try testDecoder.decode(OpenAPI.Document.self, from: documentYML)) { error in
let openAPIError = OpenAPI.Error(from: error)
XCTAssertEqual(openAPIError.localizedDescription, "Expected to find `info` key in the root Document object but it is missing.")
XCTAssertEqual(openAPIError.codingPath.map { $0.stringValue }, [])
}
}
func test_wrongTypesInfo() {
let documentYML =
"""
openapi: "3.0.0"
info: null
paths: {}
"""
XCTAssertThrowsError(try testDecoder.decode(OpenAPI.Document.self, from: documentYML)) { error in
let openAPIError = OpenAPI.Error(from: error)
XCTAssertEqual(openAPIError.localizedDescription, "Expected `info` value in the root Document object to be parsable as Mapping but it was not.")
XCTAssertEqual(openAPIError.codingPath.map { $0.stringValue }, [
"info"
])
}
let documentYML2 =
"""
openapi: "3.0.0"
info: []
paths: {}
"""
XCTAssertThrowsError(try testDecoder.decode(OpenAPI.Document.self, from: documentYML2)) { error in
let openAPIError = OpenAPI.Error(from: error)
XCTAssertEqual(openAPIError.localizedDescription, "Expected `info` value in the root Document object to be parsable as Mapping but it was not.")
XCTAssertEqual(openAPIError.codingPath.map { $0.stringValue }, [
"info"
])
}
}
func test_missingTitleInsideInfo() {
let documentYML =
"""
openapi: "3.0.0"
info: {}
paths: {}
"""
XCTAssertThrowsError(try testDecoder.decode(OpenAPI.Document.self, from: documentYML)) { error in
let openAPIError = OpenAPI.Error(from: error)
XCTAssertEqual(openAPIError.localizedDescription, "Expected to find `title` key in Document.info but it is missing.")
XCTAssertEqual(openAPIError.codingPath.map { $0.stringValue }, [
"info"
])
}
}
func test_missingNameInsideSecondTag() {
let documentYML =
"""
openapi: "3.0.0"
info:
title: test
version: 1.0
paths: {}
tags:
- name: hi
- description: missing
- name: hello
"""
XCTAssertThrowsError(try testDecoder.decode(OpenAPI.Document.self, from: documentYML)) { error in
let openAPIError = OpenAPI.Error(from: error)
XCTAssertEqual(openAPIError.localizedDescription, "Expected to find `name` key in Document.tags[1] but it is missing.")
XCTAssertEqual(openAPIError.codingPath.map {$0.stringValue }, [
"tags",
"Index 1"
])
}
}
}