From b2c81026f4aae51d827ec2e05ed2d7db7a1fc2fd Mon Sep 17 00:00:00 2001 From: Mathew Polzin Date: Sat, 26 Jan 2019 18:55:47 -0800 Subject: [PATCH] remove 'id' from Unidentified Entity OpenAPI node. --- .../JSONAPI/JSONAPITypes+OpenAPI.swift | 10 ++++--- .../JSONAPIEntityOpenAPITests.swift | 26 +++++++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/Sources/JSONAPIOpenAPI/JSONAPI/JSONAPITypes+OpenAPI.swift b/Sources/JSONAPIOpenAPI/JSONAPI/JSONAPITypes+OpenAPI.swift index 4ac1da3..cfdef4b 100644 --- a/Sources/JSONAPIOpenAPI/JSONAPI/JSONAPITypes+OpenAPI.swift +++ b/Sources/JSONAPIOpenAPI/JSONAPI/JSONAPITypes+OpenAPI.swift @@ -148,10 +148,12 @@ extension Entity: OpenAPIEncodedNodeType where Description.Attributes: Sampleabl // TODO: metadata, links - let idNode = JSONNode.string(.init(format: .generic, - required: true), - .init()) - let idProperty = ("id", idNode) + let idNode: JSONNode? = Id.RawType.self != Unidentified.self + ? JSONNode.string(.init(format: .generic, + required: true), + .init()) + : nil + let idProperty = idNode.map { ("id", $0) } let typeNode = JSONNode.string(.init(format: .generic, required: true, diff --git a/Tests/JSONAPIOpenAPITests/JSONAPIEntityOpenAPITests.swift b/Tests/JSONAPIOpenAPITests/JSONAPIEntityOpenAPITests.swift index a9e6b76..2321c02 100644 --- a/Tests/JSONAPIOpenAPITests/JSONAPIEntityOpenAPITests.swift +++ b/Tests/JSONAPIOpenAPITests/JSONAPIEntityOpenAPITests.swift @@ -39,6 +39,31 @@ class JSONAPIEntityOpenAPITests: XCTestCase { .init())) } + func test_UnidentifiedEmptyEntity() { + let node = try! UnidentifiedTestType1.openAPINode(using: JSONEncoder()) + + XCTAssertTrue(node.required) + XCTAssertEqual(node.jsonTypeFormat, .object(.generic)) + + guard case let .object(contextA, objectContext1) = node else { + XCTFail("Expected Object node") + return + } + + XCTAssertEqual(contextA, .init(format: .generic, + required: true, + nullable: false, + allowedValues: nil)) + + XCTAssertEqual(objectContext1.minProperties, 1) + XCTAssertEqual(Set(objectContext1.requiredProperties), Set(["type"])) + XCTAssertEqual(Set(objectContext1.properties.keys), Set(["type"])) + XCTAssertEqual(objectContext1.properties["type"], .string(.init(format: .generic, + required: true, + allowedValues: [.init(TestType1.jsonType)]), + .init())) + } + func test_AttributesEntity() { let dateFormatter = DateFormatter() @@ -272,6 +297,7 @@ extension JSONAPIEntityOpenAPITests { } typealias TestType1 = BasicEntity + typealias UnidentifiedTestType1 = JSONAPI.Entity enum TestType2Description: EntityDescription { public static var jsonType: String { return "test2" }