Skip to content

Commit c598406

Browse files
authored
Merge pull request #302 from mattpolzin/bugfix/300/explode-the-header-2
fix explode in header decoding.
2 parents 97618fa + 0b04063 commit c598406

File tree

4 files changed

+134
-0
lines changed

4 files changed

+134
-0
lines changed

Sources/OpenAPIKit/Header/Header.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ extension OpenAPI.Header {
186186

187187
// the following are parsed as part of Schema
188188
case style
189+
case explode
189190
case allowReserved
190191
case example
191192
case examples
@@ -200,6 +201,7 @@ extension OpenAPI.Header {
200201
.content,
201202
.schema,
202203
.style,
204+
.explode,
203205
.allowReserved,
204206
.example,
205207
.examples
@@ -224,6 +226,8 @@ extension OpenAPI.Header {
224226
self = .schema
225227
case "style":
226228
self = .style
229+
case "explode":
230+
self = .explode
227231
case "allowReserved":
228232
self = .allowReserved
229233
case "example":
@@ -249,6 +253,8 @@ extension OpenAPI.Header {
249253
return "schema"
250254
case .style:
251255
return "style"
256+
case .explode:
257+
return "explode"
252258
case .allowReserved:
253259
return "allowReserved"
254260
case .example:

Sources/OpenAPIKit30/Header/Header.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ extension OpenAPI.Header {
172172

173173
// the following are parsed as part of Schema
174174
case style
175+
case explode
175176
case allowReserved
176177
case example
177178
case examples
@@ -186,6 +187,7 @@ extension OpenAPI.Header {
186187
.content,
187188
.schema,
188189
.style,
190+
.explode,
189191
.allowReserved,
190192
.example,
191193
.examples
@@ -210,6 +212,8 @@ extension OpenAPI.Header {
210212
self = .schema
211213
case "style":
212214
self = .style
215+
case "explode":
216+
self = .explode
213217
case "allowReserved":
214218
self = .allowReserved
215219
case "example":
@@ -235,6 +239,8 @@ extension OpenAPI.Header {
235239
return "schema"
236240
case .style:
237241
return "style"
242+
case .explode:
243+
return "explode"
238244
case .allowReserved:
239245
return "allowReserved"
240246
case .example:

Tests/OpenAPIKit30Tests/Header/HeaderTests.swift

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,6 +511,67 @@ extension HeaderTests {
511511
)
512512
}
513513

514+
func test_header_withStyleAndExplode_encode() throws {
515+
let header = OpenAPI.Header(
516+
schema: .init(
517+
.array(items: .string),
518+
style: .form,
519+
explode: false
520+
),
521+
required: true
522+
)
523+
524+
let encodedHeader = try orderUnstableTestStringFromEncoding(of: header)
525+
526+
assertJSONEquivalent(
527+
encodedHeader,
528+
"""
529+
{
530+
"explode" : false,
531+
"required" : true,
532+
"schema" : {
533+
"items" : {
534+
"type" : "string"
535+
},
536+
"type" : "array"
537+
},
538+
"style" : "form"
539+
}
540+
"""
541+
)
542+
}
543+
544+
func test_header_withStyleAndExplode_decode() throws {
545+
let headerData =
546+
"""
547+
{
548+
"explode" : false,
549+
"required" : true,
550+
"schema" : {
551+
"items" : {
552+
"type" : "string"
553+
},
554+
"type" : "array"
555+
},
556+
"style" : "form"
557+
}
558+
""".data(using: .utf8)!
559+
560+
let header = try orderUnstableDecode(OpenAPI.Header.self, from: headerData)
561+
562+
XCTAssertEqual(
563+
header,
564+
OpenAPI.Header(
565+
schema: .init(
566+
.array(items: .string),
567+
style: .form,
568+
explode: false
569+
),
570+
required: true
571+
)
572+
)
573+
}
574+
514575
func test_header_errorForBothContentAndSchema_decode() {
515576
let headerData =
516577
"""

Tests/OpenAPIKitTests/Header/HeaderTests.swift

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,67 @@ extension HeaderTests {
547547
)
548548
}
549549

550+
func test_header_withStyleAndExplode_encode() throws {
551+
let header = OpenAPI.Header(
552+
schema: .init(
553+
.array(items: .string),
554+
style: .form,
555+
explode: false
556+
),
557+
required: true
558+
)
559+
560+
let encodedHeader = try orderUnstableTestStringFromEncoding(of: header)
561+
562+
assertJSONEquivalent(
563+
encodedHeader,
564+
"""
565+
{
566+
"explode" : false,
567+
"required" : true,
568+
"schema" : {
569+
"items" : {
570+
"type" : "string"
571+
},
572+
"type" : "array"
573+
},
574+
"style" : "form"
575+
}
576+
"""
577+
)
578+
}
579+
580+
func test_header_withStyleAndExplode_decode() throws {
581+
let headerData =
582+
"""
583+
{
584+
"explode" : false,
585+
"required" : true,
586+
"schema" : {
587+
"items" : {
588+
"type" : "string"
589+
},
590+
"type" : "array"
591+
},
592+
"style" : "form"
593+
}
594+
""".data(using: .utf8)!
595+
596+
let header = try orderUnstableDecode(OpenAPI.Header.self, from: headerData)
597+
598+
XCTAssertEqual(
599+
header,
600+
OpenAPI.Header(
601+
schema: .init(
602+
.array(items: .string),
603+
style: .form,
604+
explode: false
605+
),
606+
required: true
607+
)
608+
)
609+
}
610+
550611
func test_header_errorForBothContentAndSchema_decode() {
551612
let headerData =
552613
"""

0 commit comments

Comments
 (0)