Skip to content

Commit d069d68

Browse files
committed
fix component name tracking for jsonschema reference dereferencing
1 parent 8710e38 commit d069d68

File tree

3 files changed

+11
-11
lines changed

3 files changed

+11
-11
lines changed

Sources/OpenAPIKit/Schema Object/DereferencedJSONSchema.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -485,10 +485,10 @@ extension JSONSchema: LocallyDereferenceable {
485485
// TODO: consider which other core context properties to override here as with description ^
486486

487487
var extensions = dereferenced.vendorExtensions
488-
if let name {
488+
if let name = name ?? reference.name {
489489
extensions[OpenAPI.Components.componentNameExtension] = .init(name)
490490
}
491-
dereferenced = dereferenced.with(vendorExtensions: vendorExtensions)
491+
dereferenced = dereferenced.with(vendorExtensions: extensions)
492492

493493
return dereferenced
494494
case .boolean(let context):

Tests/OpenAPIKitTests/Schema Object/DereferencedSchemaObjectTests.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -278,15 +278,15 @@ final class DereferencedSchemaObjectTests: XCTestCase {
278278
schemas: ["test": .string]
279279
)
280280
let t1 = try JSONSchema.reference(.component(named: "test")).dereferenced(in: components)
281-
XCTAssertEqual(t1, .string(.init(), .init()))
281+
XCTAssertEqual(t1, .string(.init(vendorExtensions: ["x-component-name": "test"]), .init()))
282282
}
283283

284284
func test_throwingReferenceWithOverriddenDescription() throws {
285285
let components = OpenAPI.Components(
286286
schemas: ["test": .string]
287287
)
288288
let t1 = try JSONSchema.reference(.component(named: "test"), description: "hello").dereferenced(in: components)
289-
XCTAssertEqual(t1, .string(.init(description: "hello"), .init()))
289+
XCTAssertEqual(t1, .string(.init(description: "hello", vendorExtensions: ["x-component-name": "test"]), .init()))
290290
}
291291

292292
func test_optionalObjectWithoutReferences() {
@@ -360,7 +360,7 @@ final class DereferencedSchemaObjectTests: XCTestCase {
360360
let t1 = try JSONSchema.object(properties: ["test": .reference(.component(named: "test"))]).dereferenced(in: components)
361361
XCTAssertEqual(
362362
t1,
363-
.object(.init(), DereferencedJSONSchema.ObjectContext(.init(properties: ["test": .boolean]))!)
363+
.object(.init(), DereferencedJSONSchema.ObjectContext(.init(properties: ["test": .boolean(.init(vendorExtensions: ["x-component-name": "test"]))]))!)
364364
)
365365
XCTAssertThrowsError(try JSONSchema.object(properties: ["missing": .reference(.component(named: "missing"))]).dereferenced(in: components))
366366
}
@@ -394,7 +394,7 @@ final class DereferencedSchemaObjectTests: XCTestCase {
394394
let t1 = try JSONSchema.array(items: .reference(.component(named: "test"))).dereferenced(in: components)
395395
XCTAssertEqual(
396396
t1,
397-
.array(.init(), DereferencedJSONSchema.ArrayContext(.init(items: .boolean))!)
397+
.array(.init(), DereferencedJSONSchema.ArrayContext(.init(items: .boolean(.init(vendorExtensions: ["x-component-name": "test"]))))!)
398398
)
399399
XCTAssertThrowsError(try JSONSchema.array(items: .reference(.component(named: "missing"))).dereferenced(in: components))
400400
}
@@ -427,7 +427,7 @@ final class DereferencedSchemaObjectTests: XCTestCase {
427427
let t1 = try JSONSchema.one(of: .reference(.component(named: "test"))).dereferenced(in: components)
428428
XCTAssertEqual(
429429
t1,
430-
.one(of: [.boolean(.init())], core: .init())
430+
.one(of: [.boolean(.init(vendorExtensions: ["x-component-name": "test"]))], core: .init())
431431
)
432432
XCTAssertEqual(t1.coreContext as? JSONSchema.CoreContext<JSONTypeFormat.AnyFormat>, .init())
433433
XCTAssertThrowsError(try JSONSchema.one(of: .reference(.component(named: "missing"))).dereferenced(in: components))
@@ -461,7 +461,7 @@ final class DereferencedSchemaObjectTests: XCTestCase {
461461
let t1 = try JSONSchema.any(of: .reference(.component(named: "test"))).dereferenced(in: components)
462462
XCTAssertEqual(
463463
t1,
464-
.any(of: [.boolean(.init())], core: .init())
464+
.any(of: [.boolean(.init(vendorExtensions: ["x-component-name": "test"]))], core: .init())
465465
)
466466
XCTAssertEqual(t1.coreContext as? JSONSchema.CoreContext<JSONTypeFormat.AnyFormat>, .init())
467467
XCTAssertThrowsError(try JSONSchema.any(of: .reference(.component(named: "missing"))).dereferenced(in: components))
@@ -489,7 +489,7 @@ final class DereferencedSchemaObjectTests: XCTestCase {
489489
let t1 = try JSONSchema.not(.reference(.component(named: "test"))).dereferenced(in: components)
490490
XCTAssertEqual(
491491
t1,
492-
.not(.boolean(.init()), core: .init())
492+
.not(.boolean(.init(vendorExtensions: ["x-component-name": "test"])), core: .init())
493493
)
494494
XCTAssertEqual(t1.coreContext as? JSONSchema.CoreContext<JSONTypeFormat.AnyFormat>, .init())
495495
XCTAssertThrowsError(try JSONSchema.not(.reference(.component(named: "missing"))).dereferenced(in: components))

Tests/OpenAPIKitTests/Schema Object/SchemaFragmentCombiningTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -575,7 +575,7 @@ final class SchemaFragmentCombiningTests: XCTestCase {
575575
let schema1 = try t1.combined(resolvingAgainst: components)
576576
XCTAssertEqual(
577577
schema1,
578-
JSONSchema.string.dereferenced()
578+
JSONSchema.string(.init(vendorExtensions: ["x-component-name": "test"]), .init()).dereferenced()
579579
)
580580

581581
let t2 = [
@@ -585,7 +585,7 @@ final class SchemaFragmentCombiningTests: XCTestCase {
585585
let schema2 = try t2.combined(resolvingAgainst: components)
586586
XCTAssertEqual(
587587
schema2,
588-
JSONSchema.object(description: "test", properties: ["test": .string]).dereferenced()
588+
JSONSchema.object(description: "test", properties: ["test": .string(.init(vendorExtensions: ["x-component-name": "test"]), .init())]).dereferenced()
589589
)
590590
}
591591

0 commit comments

Comments
 (0)