From 650937dbb97649c4a117fff24d779e82eb452117 Mon Sep 17 00:00:00 2001 From: Mathew Polzin Date: Sun, 25 Nov 2018 19:41:10 -0800 Subject: [PATCH] improve test coverage of some JSONAPIDocument accessors. --- .../JSONAPITests/Document/DocumentTests.swift | 101 ++++++++++++++++++ .../Document/stubs/DocumentStubs.swift | 45 ++++++++ 2 files changed, 146 insertions(+) diff --git a/Tests/JSONAPITests/Document/DocumentTests.swift b/Tests/JSONAPITests/Document/DocumentTests.swift index 5d152bc..ba86611 100644 --- a/Tests/JSONAPITests/Document/DocumentTests.swift +++ b/Tests/JSONAPITests/Document/DocumentTests.swift @@ -15,6 +15,7 @@ class DocumentTests: XCTestCase { data: single_document_null) XCTAssertFalse(document.body.isError) + XCTAssertNil(document.body.errors) XCTAssertNotNil(document.body.primaryData) XCTAssertEqual(document.body.meta, NoMetadata()) XCTAssertNil(document.body.primaryData?.value) @@ -33,6 +34,7 @@ class DocumentTests: XCTestCase { XCTAssertTrue(document.body.isError) XCTAssertEqual(document.body.meta, NoMetadata()) XCTAssertNil(document.body.primaryData) + XCTAssertNil(document.body.includes) guard case let .errors(errors) = document.body else { XCTFail("Needed body to be in errors case but it was not.") @@ -40,6 +42,7 @@ class DocumentTests: XCTestCase { } XCTAssertEqual(errors.0.count, 1) + XCTAssertEqual(errors.0, document.body.errors) XCTAssertEqual(errors.0[0], .unknown) XCTAssertEqual(errors.meta, NoMetadata()) } @@ -55,6 +58,7 @@ class DocumentTests: XCTestCase { XCTAssertTrue(document.body.isError) XCTAssertNil(document.body.meta) XCTAssertNil(document.body.primaryData) + XCTAssertNil(document.body.includes) guard case let .errors(errors) = document.body else { XCTFail("Needed body to be in errors case but it was not.") @@ -62,6 +66,7 @@ class DocumentTests: XCTestCase { } XCTAssertEqual(errors.0.count, 1) + XCTAssertEqual(errors.0, document.body.errors) XCTAssertEqual(errors.0[0], .unknown) XCTAssertNil(errors.meta) } @@ -77,6 +82,7 @@ class DocumentTests: XCTestCase { XCTAssertTrue(document.body.isError) XCTAssertEqual(document.body.meta, NoMetadata()) XCTAssertNil(document.body.primaryData) + XCTAssertNil(document.body.includes) guard case let .errors(errors) = document.body else { XCTFail("Needed body to be in errors case but it was not.") @@ -84,6 +90,7 @@ class DocumentTests: XCTestCase { } XCTAssertEqual(errors.0.count, 1) + XCTAssertEqual(errors.0, document.body.errors) XCTAssertEqual(errors.0[0], TestError.basic(.init(code: 1, description: "Boooo!"))) XCTAssertEqual(errors.meta, NoMetadata()) } @@ -100,6 +107,7 @@ class DocumentTests: XCTestCase { XCTAssertTrue(document.body.isError) XCTAssertEqual(document.body.meta, TestPageMetadata(total: 70, limit: 40, offset: 10)) XCTAssertNil(document.body.primaryData) + XCTAssertNil(document.body.includes) guard case let .errors(errors) = document.body else { XCTFail("Needed body to be in errors case but it was not.") @@ -107,6 +115,7 @@ class DocumentTests: XCTestCase { } XCTAssertEqual(errors.0.count, 1) + XCTAssertEqual(errors.0, document.body.errors) XCTAssertEqual(errors.meta, TestPageMetadata(total: 70, limit: 40, offset: 10)) } @@ -115,11 +124,89 @@ class DocumentTests: XCTestCase { data: error_document_with_metadata) } + func test_unknownErrorDocumentWithMetaWithLinks() { + let document = decoded(type: JSONAPIDocument.self, + data: error_document_with_metadata_with_links) + + XCTAssertTrue(document.body.isError) + XCTAssertEqual(document.body.meta, TestPageMetadata(total: 70, limit: 40, offset: 10)) + XCTAssertNil(document.body.primaryData) + XCTAssertNil(document.body.includes) + + guard case let .errors(errors) = document.body else { + XCTFail("Needed body to be in errors case but it was not.") + return + } + + XCTAssertEqual(errors.0.count, 1) + XCTAssertEqual(errors.0, document.body.errors) + XCTAssertEqual(errors.meta, TestPageMetadata(total: 70, limit: 40, offset: 10)) + XCTAssertEqual(document.body.links?.link.url, "https://website.com") + XCTAssertEqual(document.body.links?.link.meta, NoMetadata()) + XCTAssertEqual(document.body.links?.link2.url, "https://othersite.com") + XCTAssertEqual(document.body.links?.link2.meta, TestLinks.TestMetadata(hello: "world")) + } + + func test_unknownErrorDocumentWithMetaWithLinks_encode() { + test_DecodeEncodeEquality(type: JSONAPIDocument.self, + data: error_document_with_metadata_with_links) + } + + func test_unknownErrorDocumentWithLinks() { + let document = decoded(type: JSONAPIDocument.self, + data: error_document_with_links) + + XCTAssertTrue(document.body.isError) + XCTAssertNil(document.body.primaryData) + XCTAssertNil(document.body.includes) + + guard case let .errors(errors) = document.body else { + XCTFail("Needed body to be in errors case but it was not.") + return + } + + XCTAssertEqual(errors.0.count, 1) + XCTAssertEqual(errors.0, document.body.errors) + XCTAssertEqual(document.body.links?.link.url, "https://website.com") + XCTAssertEqual(document.body.links?.link.meta, NoMetadata()) + XCTAssertEqual(document.body.links?.link2.url, "https://othersite.com") + XCTAssertEqual(document.body.links?.link2.meta, TestLinks.TestMetadata(hello: "world")) + } + + func test_unknownErrorDocumentWithLinks_encode() { + test_DecodeEncodeEquality(type: JSONAPIDocument.self, + data: error_document_with_links) + } + + func test_unknownErrorDocumentMissingLinks() { + let document = decoded(type: JSONAPIDocument.self, + data: error_document_no_metadata) + + XCTAssertTrue(document.body.isError) + XCTAssertNil(document.body.primaryData) + XCTAssertNil(document.body.includes) + + guard case let .errors(errors) = document.body else { + XCTFail("Needed body to be in errors case but it was not.") + return + } + + XCTAssertEqual(errors.0.count, 1) + XCTAssertEqual(errors.0, document.body.errors) + XCTAssertNil(document.body.links) + } + + func test_unknownErrorDocumentMissingLinks_encode() { + test_DecodeEncodeEquality(type: JSONAPIDocument.self, + data: error_document_no_metadata) + } + func test_metaDataDocument() { let document = decoded(type: JSONAPIDocument.self, data: metadata_document) XCTAssertFalse(document.body.isError) + XCTAssertNil(document.body.errors) XCTAssertEqual(document.body.meta?.total, 100) XCTAssertEqual(document.body.meta?.limit, 50) XCTAssertEqual(document.body.meta?.offset, 0) @@ -135,6 +222,7 @@ class DocumentTests: XCTestCase { data: metadata_document_with_links) XCTAssertFalse(document.body.isError) + XCTAssertNil(document.body.errors) XCTAssertEqual(document.body.meta?.total, 100) XCTAssertEqual(document.body.meta?.limit, 50) XCTAssertEqual(document.body.meta?.offset, 0) @@ -160,6 +248,7 @@ class DocumentTests: XCTestCase { data: single_document_no_includes) XCTAssertFalse(document.body.isError) + XCTAssertNil(document.body.errors) XCTAssertNotNil(document.body.primaryData) XCTAssertEqual(document.body.primaryData?.value?.id.rawValue, "1") XCTAssertEqual(document.body.includes?.count, 0) @@ -176,6 +265,7 @@ class DocumentTests: XCTestCase { data: single_document_no_includes_with_metadata) XCTAssertFalse(document.body.isError) + XCTAssertNil(document.body.errors) XCTAssertNotNil(document.body.primaryData) XCTAssertEqual(document.body.primaryData?.value?.id.rawValue, "1") XCTAssertEqual(document.body.includes?.count, 0) @@ -192,6 +282,7 @@ class DocumentTests: XCTestCase { data: single_document_no_includes_with_links) XCTAssertFalse(document.body.isError) + XCTAssertNil(document.body.errors) XCTAssertNotNil(document.body.primaryData) XCTAssertEqual(document.body.primaryData?.value?.id.rawValue, "1") XCTAssertEqual(document.body.includes?.count, 0) @@ -213,6 +304,7 @@ class DocumentTests: XCTestCase { data: single_document_no_includes_with_metadata_with_links) XCTAssertFalse(document.body.isError) + XCTAssertNil(document.body.errors) XCTAssertNotNil(document.body.primaryData) XCTAssertEqual(document.body.primaryData?.value?.id.rawValue, "1") XCTAssertEqual(document.body.includes?.count, 0) @@ -229,6 +321,10 @@ class DocumentTests: XCTestCase { data: single_document_no_includes_with_metadata_with_links) } + func test_singleDocumentNoIncludesWithMetadataMissingLinks() { + XCTAssertThrowsError(try JSONDecoder().decode(JSONAPIDocument, TestPageMetadata, TestLinks, NoIncludes, BasicJSONAPIError>.self, from: single_document_no_includes_with_metadata)) + } + func test_singleDocumentNoIncludesMissingMetadata() { XCTAssertThrowsError(try JSONDecoder().decode(JSONAPIDocument, TestPageMetadata, NoLinks, NoIncludes, BasicJSONAPIError>.self, from: single_document_no_includes)) } @@ -238,6 +334,7 @@ class DocumentTests: XCTestCase { data: single_document_some_includes) XCTAssertFalse(document.body.isError) + XCTAssertNil(document.body.errors) XCTAssertNotNil(document.body.primaryData) XCTAssertEqual(document.body.primaryData?.value?.id.rawValue, "1") XCTAssertEqual(document.body.includes?.count, 1) @@ -255,6 +352,7 @@ class DocumentTests: XCTestCase { data: single_document_some_includes_with_metadata) XCTAssertFalse(document.body.isError) + XCTAssertNil(document.body.errors) XCTAssertNotNil(document.body.primaryData) XCTAssertEqual(document.body.primaryData?.value?.id.rawValue, "1") XCTAssertEqual(document.body.includes?.count, 1) @@ -273,6 +371,7 @@ class DocumentTests: XCTestCase { data: single_document_some_includes_with_metadata_with_links) XCTAssertFalse(document.body.isError) + XCTAssertNil(document.body.errors) XCTAssertNotNil(document.body.primaryData) XCTAssertEqual(document.body.primaryData?.value?.id.rawValue, "1") XCTAssertEqual(document.body.meta, TestPageMetadata(total: 70, limit: 40, offset: 10)) @@ -307,6 +406,7 @@ class DocumentTests: XCTestCase { data: many_document_no_includes) XCTAssertFalse(document.body.isError) + XCTAssertNil(document.body.errors) XCTAssertNotNil(document.body.primaryData) XCTAssertEqual(document.body.primaryData?.values.count, 3) XCTAssertEqual(document.body.primaryData?.values[0].id.rawValue, "1") @@ -325,6 +425,7 @@ class DocumentTests: XCTestCase { data: many_document_some_includes) XCTAssertFalse(document.body.isError) + XCTAssertNil(document.body.errors) XCTAssertNotNil(document.body.primaryData) XCTAssertEqual(document.body.primaryData?.values.count, 3) XCTAssertEqual(document.body.primaryData?.values[0].id.rawValue, "1") diff --git a/Tests/JSONAPITests/Document/stubs/DocumentStubs.swift b/Tests/JSONAPITests/Document/stubs/DocumentStubs.swift index 8d0026b..214a4d6 100644 --- a/Tests/JSONAPITests/Document/stubs/DocumentStubs.swift +++ b/Tests/JSONAPITests/Document/stubs/DocumentStubs.swift @@ -322,6 +322,51 @@ let error_document_with_metadata = """ } """.data(using: .utf8)! +let error_document_with_links = """ +{ + "errors": [ + { + "description": "Boooo!", + "code": 1 + } + ], + "links": { + "link": "https://website.com", + "link2": { + "href": "https://othersite.com", + "meta": { + "hello": "world" + } + } + } +} +""".data(using: .utf8)! + +let error_document_with_metadata_with_links = """ +{ + "errors": [ + { + "description": "Boooo!", + "code": 1 + } + ], + "meta": { + "total": 70, + "limit": 40, + "offset": 10 + }, + "links": { + "link": "https://website.com", + "link2": { + "href": "https://othersite.com", + "meta": { + "hello": "world" + } + } + } +} +""".data(using: .utf8)! + let metadata_document = """ { "meta": {