Skip to content

Commit b1d7ed3

Browse files
authored
Merge pull request #346 from mattpolzin/explode-query-param-to31
2 parents 7dbb3ce + cf0a971 commit b1d7ed3

File tree

2 files changed

+63
-7
lines changed

2 files changed

+63
-7
lines changed

Sources/OpenAPIKitCompat/Compat30To31.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,13 +176,15 @@ extension OpenAPIKit30.OpenAPI.Parameter.SchemaContext: To31 {
176176
return OpenAPIKit.OpenAPI.Parameter.SchemaContext(
177177
schemaReference: .init(ref.to31()),
178178
style: style,
179+
explode: explode,
179180
allowReserved: allowReserved,
180181
examples: newExamples
181182
)
182183
} else {
183184
return OpenAPIKit.OpenAPI.Parameter.SchemaContext(
184185
schemaReference: .init(ref.to31()),
185186
style: style,
187+
explode: explode,
186188
allowReserved: allowReserved,
187189
example: example
188190
)
@@ -192,13 +194,15 @@ extension OpenAPIKit30.OpenAPI.Parameter.SchemaContext: To31 {
192194
return OpenAPIKit.OpenAPI.Parameter.SchemaContext(
193195
schema.to31(),
194196
style: style,
197+
explode: explode,
195198
allowReserved: allowReserved,
196199
examples: newExamples
197200
)
198201
} else {
199202
return OpenAPIKit.OpenAPI.Parameter.SchemaContext(
200203
schema.to31(),
201204
style: style,
205+
explode: explode,
202206
allowReserved: allowReserved,
203207
example: example
204208
)

Tests/OpenAPIKitCompatTests/DocumentConversionTests.swift

Lines changed: 59 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -770,7 +770,51 @@ final class DocumentConversionTests: XCTestCase {
770770
}
771771

772772
func test_Parameter() throws {
773-
// TODO: write test
773+
let parameter1 = OpenAPIKit30.OpenAPI.Parameter(
774+
name: "hello",
775+
context: .query,
776+
schemaOrContent: .a(OpenAPIKit30.OpenAPI.Parameter.SchemaContext(
777+
.object,
778+
style: .simple
779+
))
780+
)
781+
782+
let parameter2 = OpenAPIKit30.OpenAPI.Parameter(
783+
name: "hello",
784+
context: .query,
785+
schemaOrContent: .a(OpenAPIKit30.OpenAPI.Parameter.SchemaContext(
786+
.object,
787+
style: .form,
788+
explode: false,
789+
allowReserved: true,
790+
example: "hi=hello"
791+
)),
792+
description: "described",
793+
deprecated: true,
794+
vendorExtensions: [ "x-hello": "hi" ]
795+
)
796+
797+
let oldDoc = OpenAPIKit30.OpenAPI.Document(
798+
info: .init(title: "hello", version: "1.0.0"),
799+
servers: [],
800+
paths: [:],
801+
components: .init(
802+
parameters: [
803+
"param1": parameter1,
804+
"param2": parameter2
805+
]
806+
)
807+
)
808+
809+
let newDoc = oldDoc.convert(to: .v3_1_0)
810+
811+
try assertEqualNewToOld(newDoc,oldDoc)
812+
813+
let newParameter1 = try XCTUnwrap(newDoc.components.parameters["param1"])
814+
let newParameter2 = try XCTUnwrap(newDoc.components.parameters["param2"])
815+
816+
try assertEqualNewToOld(newParameter1, parameter1)
817+
try assertEqualNewToOld(newParameter2, parameter2)
774818
}
775819

776820
// TODO: more tests
@@ -866,15 +910,15 @@ fileprivate func assertEqualNewToOld(_ newServer: OpenAPIKit.OpenAPI.Server?, _
866910
}
867911
}
868912

869-
fileprivate func assertEqualNewToOld(_ newParamArray: OpenAPIKit.OpenAPI.Parameter.Array, _ oldParamArray: OpenAPIKit30.OpenAPI.Parameter.Array) {
913+
fileprivate func assertEqualNewToOld(_ newParamArray: OpenAPIKit.OpenAPI.Parameter.Array, _ oldParamArray: OpenAPIKit30.OpenAPI.Parameter.Array) throws {
870914
for (newParameter, oldParameter) in zip(newParamArray, oldParamArray) {
871915
switch (newParameter, oldParameter) {
872916
case (.a(let ref), .a(let ref2)):
873917
XCTAssertNil(ref.summary)
874918
XCTAssertNil(ref.description)
875919
XCTAssertEqual(ref.jsonReference.absoluteString, ref2.absoluteString)
876920
case (.b(let param), .b(let param2)):
877-
assertEqualNewToOld(param, param2)
921+
try assertEqualNewToOld(param, param2)
878922
default:
879923
XCTFail("Parameters are not equal because one is a reference and the other is not: \(newParameter) / \(oldParameter)")
880924
}
@@ -896,7 +940,7 @@ fileprivate func assertEqualNewToOld(_ newPathItem: OpenAPIKit.OpenAPI.PathItem?
896940
try assertEqualNewToOld(newServer, oldServer)
897941
}
898942
}
899-
assertEqualNewToOld(newPathItem.parameters, oldPathItem.parameters)
943+
try assertEqualNewToOld(newPathItem.parameters, oldPathItem.parameters)
900944
try assertEqualNewToOld(newPathItem.get, oldPathItem.get)
901945
try assertEqualNewToOld(newPathItem.put, oldPathItem.put)
902946
try assertEqualNewToOld(newPathItem.post, oldPathItem.post)
@@ -909,9 +953,17 @@ fileprivate func assertEqualNewToOld(_ newPathItem: OpenAPIKit.OpenAPI.PathItem?
909953
XCTAssertEqual(newPathItem.vendorExtensions, oldPathItem.vendorExtensions)
910954
}
911955

912-
fileprivate func assertEqualNewToOld(_ newParam: OpenAPIKit.OpenAPI.Parameter, _ oldParam: OpenAPIKit30.OpenAPI.Parameter) {
956+
fileprivate func assertEqualNewToOld(_ newParam: OpenAPIKit.OpenAPI.Parameter, _ oldParam: OpenAPIKit30.OpenAPI.Parameter) throws {
913957
XCTAssertEqual(newParam.name, oldParam.name)
914958
assertEqualNewToOld(newParam.context, oldParam.context)
959+
switch (newParam.schemaOrContent, oldParam.schemaOrContent) {
960+
case (.a(let newSchema), .a(let oldSchema)):
961+
try assertEqualNewToOld(newSchema, oldSchema)
962+
case (.b(let newContent), .b(let oldContent)):
963+
try assertEqualNewToOld(newContent, oldContent)
964+
default:
965+
XCTFail("Parameter schemaOrContent are not equal. \(newParam.schemaOrContent) / \(oldParam.schemaOrContent)")
966+
}
915967
XCTAssertEqual(newParam.description, oldParam.description)
916968
XCTAssertEqual(newParam.deprecated, oldParam.deprecated)
917969
XCTAssertEqual(newParam.vendorExtensions, oldParam.vendorExtensions)
@@ -943,7 +995,7 @@ fileprivate func assertEqualNewToOld(_ newOperation: OpenAPIKit.OpenAPI.Operatio
943995
XCTAssertEqual(newOp.description, oldOp.description)
944996
try assertEqualNewToOld(newOp.externalDocs, oldOp.externalDocs)
945997
XCTAssertEqual(newOp.operationId, oldOp.operationId)
946-
assertEqualNewToOld(newOp.parameters, oldOp.parameters)
998+
try assertEqualNewToOld(newOp.parameters, oldOp.parameters)
947999
if let newRequest = newOp.requestBody {
9481000
let oldRequest = try XCTUnwrap(oldOp.requestBody)
9491001
switch (newRequest, oldRequest) {
@@ -1407,7 +1459,7 @@ fileprivate func assertEqualNewToOld(_ newComponents: OpenAPIKit.OpenAPI.Compone
14071459
}
14081460
for (key, newParameter) in newComponents.parameters {
14091461
let oldParameter = try XCTUnwrap(oldComponents.parameters[key])
1410-
assertEqualNewToOld(newParameter, oldParameter)
1462+
try assertEqualNewToOld(newParameter, oldParameter)
14111463
}
14121464
for (key, newExample) in newComponents.examples {
14131465
let oldExample = try XCTUnwrap(oldComponents.examples[key])

0 commit comments

Comments
 (0)