From e8bfbc881b1ca0f438cc7fa0ced5c1efb33006ff Mon Sep 17 00:00:00 2001 From: Mathew Polzin Date: Sun, 27 Jan 2019 22:24:13 -0800 Subject: [PATCH] Added a couple of test cases for JSONDocuments --- .../JSONAPIDocumentOpenAPITests.swift | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) diff --git a/Tests/JSONAPIOpenAPITests/JSONAPIDocumentOpenAPITests.swift b/Tests/JSONAPIOpenAPITests/JSONAPIDocumentOpenAPITests.swift index e82ca34..b65d8e5 100644 --- a/Tests/JSONAPIOpenAPITests/JSONAPIDocumentOpenAPITests.swift +++ b/Tests/JSONAPIOpenAPITests/JSONAPIDocumentOpenAPITests.swift @@ -25,6 +25,106 @@ class JSONAPIDocumentOpenAPITests: XCTestCase { let node = try! SingleEntityDocument.openAPINodeWithExample(using: encoder) print(String(data: try! encoder.encode(node), encoding: .utf8)!) + + XCTAssertTrue(node.required) + XCTAssertEqual(node.jsonTypeFormat, .object(.generic)) + + guard case let .object(contextA, objectContext1) = node else { + XCTFail("Expected JSON Document to be an Object Node") + return + } + + XCTAssertNotNil(contextA.example) + XCTAssertFalse(contextA.nullable) + XCTAssertEqual(contextA.format, .generic) + XCTAssertTrue(contextA.required) + + XCTAssertEqual(objectContext1.minProperties, 1) + XCTAssertEqual(Set(objectContext1.requiredProperties), Set(["data"])) + XCTAssertEqual(Set(objectContext1.properties.keys), Set(["data"])) + + guard case let .object(contextB, objectContext2)? = objectContext1.properties["data"] else { + XCTFail("Expected Data field of JSON Document to be an Object Node") + return + } + + XCTAssertFalse(contextB.nullable) + XCTAssertEqual(contextB.format, .generic) + XCTAssertTrue(contextB.required) + + XCTAssertEqual(objectContext2.minProperties, 3) + XCTAssertEqual(Set(objectContext2.requiredProperties), Set(["id", "attributes", "type"])) + XCTAssertEqual(Set(objectContext2.properties.keys), Set(["id", "attributes", "type"])) + + XCTAssertEqual(objectContext2.properties["type"], + JSONNode.string(.init(format: .generic, + required: true, + allowedValues: [.init("test")]), + .init())) + } + + func test_ManyResourceDocument() { + + let dateFormatter = DateFormatter() + dateFormatter.dateStyle = .medium + dateFormatter.timeStyle = .none + dateFormatter.locale = Locale(identifier: "en_US") + + let encoder = JSONEncoder() + encoder.outputFormatting = .prettyPrinted + encoder.dateEncodingStrategy = .formatted(dateFormatter) + + let node = try! ManyEntityDocument.openAPINodeWithExample(using: encoder) + + print(String(data: try! encoder.encode(node), encoding: .utf8)!) + + XCTAssertTrue(node.required) + XCTAssertEqual(node.jsonTypeFormat, .object(.generic)) + + guard case let .object(contextA, objectContext1) = node else { + XCTFail("Expected JSON Document to be an Object Node") + return + } + + XCTAssertNotNil(contextA.example) + XCTAssertFalse(contextA.nullable) + XCTAssertEqual(contextA.format, .generic) + XCTAssertTrue(contextA.required) + + XCTAssertEqual(objectContext1.minProperties, 1) + XCTAssertEqual(Set(objectContext1.requiredProperties), Set(["data"])) + XCTAssertEqual(Set(objectContext1.properties.keys), Set(["data"])) + + guard case let .array(contextB, arrayContext)? = objectContext1.properties["data"] else { + XCTFail("Expected Data field of JSON Document to be an Array Node") + return + } + + XCTAssertFalse(contextB.nullable) + XCTAssertEqual(contextB.format, .generic) + XCTAssertTrue(contextB.required) + + XCTAssertFalse(arrayContext.uniqueItems) + XCTAssertEqual(arrayContext.minItems, 0) + + guard case let .object(contextC, objectContext2) = arrayContext.items else { + XCTFail("Expected Items of Array under Data to be an Object Node") + return + } + + XCTAssertFalse(contextC.nullable) + XCTAssertEqual(contextC.format, .generic) + XCTAssertTrue(contextC.required) + + XCTAssertEqual(objectContext2.minProperties, 3) + XCTAssertEqual(Set(objectContext2.requiredProperties), Set(["id", "attributes", "type"])) + XCTAssertEqual(Set(objectContext2.properties.keys), Set(["id", "attributes", "type"])) + + XCTAssertEqual(objectContext2.properties["type"], + JSONNode.string(.init(format: .generic, + required: true, + allowedValues: [.init("test")]), + .init())) } } @@ -49,6 +149,8 @@ extension JSONAPIDocumentOpenAPITests { typealias TestEntity = BasicEntity typealias SingleEntityDocument = Document, NoMetadata, NoLinks, NoIncludes, NoAPIDescription, UnknownJSONAPIError> + + typealias ManyEntityDocument = Document, NoMetadata, NoLinks, NoIncludes, NoAPIDescription, UnknownJSONAPIError> } extension Id: Sampleable where RawType == String {