Skip to content

Commit 74af537

Browse files
committed
Update URISerializer & Parser Tests
1 parent 0d36255 commit 74af537

File tree

3 files changed

+60
-26
lines changed

3 files changed

+60
-26
lines changed

Sources/OpenAPIRuntime/URICoder/Serialization/URISerializer.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ extension CharacterSet {
6565
extension URISerializer {
6666

6767
/// A serializer error.
68-
private enum SerializationError: Swift.Error {
68+
enum SerializationError: Swift.Error, Equatable {
6969

7070
/// Nested containers are not supported.
7171
case nestedContainersNotSupported

Tests/OpenAPIRuntimeTests/URICoder/Parsing/Test_URIParser.swift

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ final class Test_URIParser: Test_Runtime {
3030
simpleUnexplode: .custom("", value: ["": [""]]),
3131
formDataExplode: "empty=",
3232
formDataUnexplode: "empty=",
33-
deepObjectExplode: "empty="
33+
deepObjectExplode: "object%5Bempty%5D="
3434
),
3535
value: ["empty": [""]]
3636
),
@@ -54,7 +54,7 @@ final class Test_URIParser: Test_Runtime {
5454
simpleUnexplode: .custom("fred", value: ["": ["fred"]]),
5555
formDataExplode: "who=fred",
5656
formDataUnexplode: "who=fred",
57-
deepObjectExplode: "who=fred"
57+
deepObjectExplode: "object%5Bwho%5D=fred"
5858
),
5959
value: ["who": ["fred"]]
6060
),
@@ -66,7 +66,7 @@ final class Test_URIParser: Test_Runtime {
6666
simpleUnexplode: .custom("Hello%20World", value: ["": ["Hello World"]]),
6767
formDataExplode: "hello=Hello+World",
6868
formDataUnexplode: "hello=Hello+World",
69-
deepObjectExplode: "hello=Hello%20World"
69+
deepObjectExplode: "object%5Bhello%5D=Hello%20World"
7070
),
7171
value: ["hello": ["Hello World"]]
7272
),
@@ -78,7 +78,7 @@ final class Test_URIParser: Test_Runtime {
7878
simpleUnexplode: .custom("red,green,blue", value: ["": ["red", "green", "blue"]]),
7979
formDataExplode: "list=red&list=green&list=blue",
8080
formDataUnexplode: "list=red,green,blue",
81-
deepObjectExplode: "list=red&list=green&list=blue"
81+
deepObjectExplode: .custom("object%5Blist%5D=red&object%5Blist%5D=green&object%5Blist%5D=blue", value: [:])
8282
),
8383
value: ["list": ["red", "green", "blue"]]
8484
),
@@ -99,7 +99,7 @@ final class Test_URIParser: Test_Runtime {
9999
"keys=comma,%2C,dot,.,semi,%3B",
100100
value: ["keys": ["comma", ",", "dot", ".", "semi", ";"]]
101101
),
102-
deepObjectExplode: "comma=%2C&dot=.&semi=%3B"
102+
deepObjectExplode: "keys%5Bcomma%5D=%2C&keys%5Bdot%5D=.&keys%5Bsemi%5D=%3B"
103103
),
104104
value: ["semi": [";"], "dot": ["."], "comma": [","]]
105105
),
@@ -123,6 +123,7 @@ final class Test_URIParser: Test_Runtime {
123123
try testVariant(.simpleUnexplode, variants.simpleUnexplode)
124124
try testVariant(.formDataExplode, variants.formDataExplode)
125125
try testVariant(.formDataUnexplode, variants.formDataUnexplode)
126+
try testVariant(.deepObjectExplode, variants.deepObjectExplode)
126127
}
127128
}
128129
}

Tests/OpenAPIRuntimeTests/URICoder/Serialization/Test_URISerializer.swift

Lines changed: 53 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,10 @@ final class Test_URISerializer: Test_Runtime {
110110
simpleUnexplode: "red,green,blue",
111111
formDataExplode: "list=red&list=green&list=blue",
112112
formDataUnexplode: "list=red,green,blue",
113-
deepObjectExplode: nil
113+
deepObjectExplode: .custom(
114+
"list=red&list=green&list=blue",
115+
expectedError: .deepObjectsArrayNotSupported
116+
)
114117
)
115118
),
116119
makeCase(
@@ -131,26 +134,36 @@ final class Test_URISerializer: Test_Runtime {
131134
),
132135
]
133136
for testCase in cases {
134-
func testVariant(_ variant: Case.Variant, _ expectedString: String) throws {
137+
func testVariant(_ variant: Case.Variant, _ input: Case.Variants.Input) throws {
135138
var serializer = URISerializer(configuration: variant.config)
136-
let encodedString = try serializer.serializeNode(testCase.value, forKey: testCase.key)
137-
XCTAssertEqual(
138-
encodedString,
139-
expectedString,
140-
"Failed for config: \(variant.name)",
141-
file: testCase.file,
142-
line: testCase.line
143-
)
139+
do {
140+
let encodedString = try serializer.serializeNode(testCase.value, forKey: testCase.key)
141+
XCTAssertEqual(
142+
encodedString,
143+
input.string,
144+
"Failed for config: \(variant.name)",
145+
file: testCase.file,
146+
line: testCase.line
147+
)
148+
} catch {
149+
guard let expectedError = input.expectedError,
150+
let serializationError = error as? URISerializer.SerializationError else { throw error }
151+
XCTAssertEqual(
152+
expectedError,
153+
serializationError,
154+
"Failed for config: \(variant.name)",
155+
file: testCase.file,
156+
line: testCase.line
157+
)
158+
}
144159
}
145160
try testVariant(.formExplode, testCase.variants.formExplode)
146161
try testVariant(.formUnexplode, testCase.variants.formUnexplode)
147162
try testVariant(.simpleExplode, testCase.variants.simpleExplode)
148163
try testVariant(.simpleUnexplode, testCase.variants.simpleUnexplode)
149164
try testVariant(.formDataExplode, testCase.variants.formDataExplode)
150165
try testVariant(.formDataUnexplode, testCase.variants.formDataUnexplode)
151-
if let deepObjectExplode = testCase.variants.deepObjectExplode {
152-
try testVariant(.deepObjectExplode, deepObjectExplode)
153-
}
166+
try testVariant(.deepObjectExplode, testCase.variants.deepObjectExplode)
154167
}
155168
}
156169
}
@@ -170,13 +183,33 @@ extension Test_URISerializer {
170183
static let deepObjectExplode: Self = .init(name: "deepObjectExplode", config: .deepObjectExplode)
171184
}
172185
struct Variants {
173-
var formExplode: String
174-
var formUnexplode: String
175-
var simpleExplode: String
176-
var simpleUnexplode: String
177-
var formDataExplode: String
178-
var formDataUnexplode: String
179-
var deepObjectExplode: String?
186+
187+
struct Input: ExpressibleByStringLiteral {
188+
var string: String
189+
var expectedError: URISerializer.SerializationError?
190+
191+
init(string: String, expectedError: URISerializer.SerializationError? = nil) {
192+
self.string = string
193+
self.expectedError = expectedError
194+
}
195+
196+
static func custom(_ string: String, expectedError: URISerializer.SerializationError) -> Self {
197+
.init(string: string, expectedError: expectedError)
198+
}
199+
200+
init(stringLiteral value: String) {
201+
self.string = value
202+
self.expectedError = nil
203+
}
204+
}
205+
206+
var formExplode: Input
207+
var formUnexplode: Input
208+
var simpleExplode: Input
209+
var simpleUnexplode: Input
210+
var formDataExplode: Input
211+
var formDataUnexplode: Input
212+
var deepObjectExplode: Input
180213
}
181214
var value: URIEncodedNode
182215
var key: String

0 commit comments

Comments
 (0)