diff --git a/Package.resolved b/Package.resolved index 4a251e7..f7356ed 100644 --- a/Package.resolved +++ b/Package.resolved @@ -6,8 +6,8 @@ "repositoryURL": "https://github.com/mattpolzin/Poly.git", "state": { "branch": null, - "revision": "38051821d7ef49e590e26e819a2fe447e50be9ff", - "version": "2.0.1" + "revision": "4a08517b24f8e9f6dd8c02ec7da316aac5c00e2e", + "version": "2.1.0" } } ] diff --git a/Package.swift b/Package.swift index 33d743d..e0f38ab 100644 --- a/Package.swift +++ b/Package.swift @@ -18,7 +18,7 @@ let package = Package( targets: ["JSONAPITesting"]) ], dependencies: [ - .package(url: "https://github.com/mattpolzin/Poly.git", .upToNextMajor(from: "2.0.0")), + .package(url: "https://github.com/mattpolzin/Poly.git", .upToNextMajor(from: "2.1.0")), ], targets: [ .target( diff --git a/Sources/JSONAPI/Document/Includes.swift b/Sources/JSONAPI/Document/Includes.swift index dc9eb02..65ccee0 100644 --- a/Sources/JSONAPI/Document/Includes.swift +++ b/Sources/JSONAPI/Document/Includes.swift @@ -161,3 +161,11 @@ extension Includes where I: _Poly9 { return values.compactMap { $0.i } } } + +// MARK: - 10 includes +public typealias Include10 = Poly10 +extension Includes where I: _Poly10 { + public subscript(_ lookup: I.J.Type) -> [I.J] { + return values.compactMap { $0.j } + } +} diff --git a/Sources/JSONAPI/Resource/Poly+PrimaryResource.swift b/Sources/JSONAPI/Resource/Poly+PrimaryResource.swift index f1cad3a..d1e1e5f 100644 --- a/Sources/JSONAPI/Resource/Poly+PrimaryResource.swift +++ b/Sources/JSONAPI/Resource/Poly+PrimaryResource.swift @@ -74,3 +74,8 @@ extension Poly8: PrimaryResource, OptionalPrimaryResource where A: PolyWrapped, extension Poly9: EncodablePrimaryResource, OptionalEncodablePrimaryResource where A: EncodablePolyWrapped, B: EncodablePolyWrapped, C: EncodablePolyWrapped, D: EncodablePolyWrapped, E: EncodablePolyWrapped, F: EncodablePolyWrapped, G: EncodablePolyWrapped, H: EncodablePolyWrapped, I: EncodablePolyWrapped {} extension Poly9: PrimaryResource, OptionalPrimaryResource where A: PolyWrapped, B: PolyWrapped, C: PolyWrapped, D: PolyWrapped, E: PolyWrapped, F: PolyWrapped, G: PolyWrapped, H: PolyWrapped, I: PolyWrapped {} + +// MARK: - 10 types +extension Poly10: EncodablePrimaryResource, OptionalEncodablePrimaryResource where A: EncodablePolyWrapped, B: EncodablePolyWrapped, C: EncodablePolyWrapped, D: EncodablePolyWrapped, E: EncodablePolyWrapped, F: EncodablePolyWrapped, G: EncodablePolyWrapped, H: EncodablePolyWrapped, I: EncodablePolyWrapped, J: EncodablePolyWrapped {} + +extension Poly10: PrimaryResource, OptionalPrimaryResource where A: PolyWrapped, B: PolyWrapped, C: PolyWrapped, D: PolyWrapped, E: PolyWrapped, F: PolyWrapped, G: PolyWrapped, H: PolyWrapped, I: PolyWrapped, J: PolyWrapped {} diff --git a/Tests/JSONAPITests/Includes/IncludeTests.swift b/Tests/JSONAPITests/Includes/IncludeTests.swift index 1bca6f5..ed94e89 100644 --- a/Tests/JSONAPITests/Includes/IncludeTests.swift +++ b/Tests/JSONAPITests/Includes/IncludeTests.swift @@ -176,6 +176,27 @@ class IncludedTests: XCTestCase { test_DecodeEncodeEquality(type: Includes>.self, data: nine_different_type_includes) } + + func test_TenDifferentIncludes() { + let includes = decoded(type: Includes>.self, + data: ten_different_type_includes) + + XCTAssertEqual(includes[TestEntity.self].count, 1) + XCTAssertEqual(includes[TestEntity2.self].count, 1) + XCTAssertEqual(includes[TestEntity3.self].count, 1) + XCTAssertEqual(includes[TestEntity4.self].count, 1) + XCTAssertEqual(includes[TestEntity5.self].count, 1) + XCTAssertEqual(includes[TestEntity6.self].count, 1) + XCTAssertEqual(includes[TestEntity7.self].count, 1) + XCTAssertEqual(includes[TestEntity8.self].count, 1) + XCTAssertEqual(includes[TestEntity9.self].count, 1) + XCTAssertEqual(includes[TestEntity10.self].count, 1) + } + + func test_TenDifferentIncludes_encode() { + test_DecodeEncodeEquality(type: Includes>.self, + data: ten_different_type_includes) + } } // MARK: - Appending @@ -471,4 +492,15 @@ extension IncludedTests { } typealias TestEntity9 = BasicEntity + + enum TestEntityType10: ResourceObjectDescription { + + typealias Attributes = NoAttributes + + public static var jsonType: String { return "test_entity10" } + + typealias Relationships = NoRelationships + } + + typealias TestEntity10 = BasicEntity } diff --git a/Tests/JSONAPITests/Includes/stubs/IncludeStubs.swift b/Tests/JSONAPITests/Includes/stubs/IncludeStubs.swift index 10fd6a3..80f1bfa 100644 --- a/Tests/JSONAPITests/Includes/stubs/IncludeStubs.swift +++ b/Tests/JSONAPITests/Includes/stubs/IncludeStubs.swift @@ -512,3 +512,88 @@ let nine_different_type_includes = """ } ] """.data(using: .utf8)! + +let ten_different_type_includes = """ +[ + { + "type": "test_entity1", + "id": "2DF03B69-4B0A-467F-B52E-B0C9E44FCECF", + "attributes": { + "foo": "Hello", + "bar": 123 + } + }, + { + "type": "test_entity2", + "id": "90F03B69-4DF1-467F-B52E-B0C9E44FC333", + "attributes": { + "foo": "World", + "bar": 456 + }, + "relationships": { + "entity1": { + "data": { + "type": "test_entity1", + "id": "2DF03B69-4B0A-467F-B52E-B0C9E44FCECF" + } + } + } + }, + { + "type": "test_entity3", + "id": "11223B69-4DF1-467F-B52E-B0C9E44FC443", + "relationships": { + "entity1": { + "data": { + "type": "test_entity1", + "id": "2DF03B69-4B0A-467F-B52E-B0C9E44FCECF" + } + }, + "entity2": { + "data": [ + { + "type": "test_entity2", + "id": "90F03B69-4DF1-467F-B52E-B0C9E44FC333" + } + ] + } + } + }, + { + "type": "test_entity6", + "id": "11113B69-4DF1-467F-B52E-B0C9E44FC444", + "relationships": { + "entity4": { + "data": { + "type": "test_entity4", + "id": "364B3B69-4DF1-467F-B52E-B0C9E44F666E" + } + } + } + }, + { + "type": "test_entity5", + "id": "A24B3B69-4DF1-467F-B52E-B0C9E44F436A" + }, + { + "type": "test_entity4", + "id": "364B3B69-4DF1-467F-B52E-B0C9E44F666E" + }, + { + "type": "test_entity7", + "id": "364B3B69-4DF1-222F-B52E-B0C9E44F666E" + }, + { + "type": "test_entity8", + "id": "364B3B69-4DF1-222F-B52E-B0C9E44F266F" + }, + { + "type": "test_entity9", + "id": "364B3B69-4DF1-218F-B52E-B0C9E44F2661" + }, + { + "type": "test_entity10", + "id": "264B3B69-4DF1-212F-B52E-B0C9E44F2660" + } +] +""".data(using: .utf8)! diff --git a/Tests/JSONAPITests/Poly/PolyTests.swift b/Tests/JSONAPITests/Poly/PolyTests.swift deleted file mode 100644 index 0662ba0..0000000 --- a/Tests/JSONAPITests/Poly/PolyTests.swift +++ /dev/null @@ -1,683 +0,0 @@ -// -// PolyTests.swift -// JSONAPITests -// -// Created by Mathew Polzin on 11/23/18. -// - -import XCTest -import JSONAPI -import Poly - -// MARK: - init -class PolyTests: XCTestCase { - func test_init_Poly0() { - let _ = Poly0() - } - - func test_init_Poly1() { - let entity = TestEntity5(attributes: .none, relationships: .none, meta: .none, links: .none) - let poly = Poly1(entity) - XCTAssertEqual(poly.a, entity) - } - - func test_init_Poly2() { - let entity = TestEntity5(attributes: .none, relationships: .none, meta: .none, links: .none) - let poly = Poly2(entity) - XCTAssertEqual(poly.a, entity) - XCTAssertNil(poly.b) - - let poly2 = Poly2(entity) - XCTAssertEqual(poly2.b, entity) - XCTAssertNil(poly2.a) - } - - func test_init_Poly3() { - let entity = TestEntity5(attributes: .none, relationships: .none, meta: .none, links: .none) - let poly = Poly3(entity) - XCTAssertEqual(poly.a, entity) - XCTAssertNil(poly.b) - XCTAssertNil(poly.c) - - let poly2 = Poly3(entity) - XCTAssertEqual(poly2.b, entity) - XCTAssertNil(poly2.a) - XCTAssertNil(poly2.c) - - let poly3 = Poly3(entity) - XCTAssertEqual(poly3.c, entity) - XCTAssertNil(poly3.a) - XCTAssertNil(poly3.b) - } - - func test_init_Poly4() { - let entity = TestEntity5(attributes: .none, relationships: .none, meta: .none, links: .none) - let poly = Poly4(entity) - XCTAssertEqual(poly.a, entity) - XCTAssertNil(poly.b) - XCTAssertNil(poly.c) - XCTAssertNil(poly.d) - - let poly2 = Poly4(entity) - XCTAssertEqual(poly2.b, entity) - XCTAssertNil(poly2.a) - XCTAssertNil(poly2.c) - XCTAssertNil(poly2.d) - - let poly3 = Poly4(entity) - XCTAssertEqual(poly3.c, entity) - XCTAssertNil(poly3.a) - XCTAssertNil(poly3.b) - XCTAssertNil(poly3.d) - - let poly4 = Poly4(entity) - XCTAssertEqual(poly4.d, entity) - XCTAssertNil(poly4.a) - XCTAssertNil(poly4.b) - XCTAssertNil(poly4.c) - } - - func test_init_Poly5() { - let entity = TestEntity5(attributes: .none, relationships: .none, meta: .none, links: .none) - let poly = Poly5(entity) - XCTAssertEqual(poly.a, entity) - XCTAssertNil(poly.b) - XCTAssertNil(poly.c) - XCTAssertNil(poly.d) - XCTAssertNil(poly.e) - - let poly2 = Poly5(entity) - XCTAssertEqual(poly2.b, entity) - XCTAssertNil(poly2.a) - XCTAssertNil(poly2.c) - XCTAssertNil(poly2.d) - XCTAssertNil(poly2.e) - - let poly3 = Poly5(entity) - XCTAssertEqual(poly3.c, entity) - XCTAssertNil(poly3.a) - XCTAssertNil(poly3.b) - XCTAssertNil(poly3.d) - XCTAssertNil(poly3.e) - - let poly4 = Poly5(entity) - XCTAssertEqual(poly4.d, entity) - XCTAssertNil(poly4.a) - XCTAssertNil(poly4.b) - XCTAssertNil(poly4.c) - XCTAssertNil(poly4.e) - - let poly5 = Poly5(entity) - XCTAssertEqual(poly5.e, entity) - XCTAssertNil(poly5.a) - XCTAssertNil(poly5.b) - XCTAssertNil(poly5.c) - XCTAssertNil(poly5.d) - } - - func test_init_Poly6() { - let entity = TestEntity5(attributes: .none, relationships: .none, meta: .none, links: .none) - let poly = Poly6(entity) - XCTAssertEqual(poly.a, entity) - XCTAssertNil(poly.b) - XCTAssertNil(poly.c) - XCTAssertNil(poly.d) - XCTAssertNil(poly.e) - XCTAssertNil(poly.f) - - let poly2 = Poly6(entity) - XCTAssertEqual(poly2.b, entity) - XCTAssertNil(poly2.a) - XCTAssertNil(poly2.c) - XCTAssertNil(poly2.d) - XCTAssertNil(poly2.e) - XCTAssertNil(poly2.f) - - let poly3 = Poly6(entity) - XCTAssertEqual(poly3.c, entity) - XCTAssertNil(poly3.a) - XCTAssertNil(poly3.b) - XCTAssertNil(poly3.d) - XCTAssertNil(poly3.e) - XCTAssertNil(poly3.f) - - let poly4 = Poly6(entity) - XCTAssertEqual(poly4.d, entity) - XCTAssertNil(poly4.a) - XCTAssertNil(poly4.b) - XCTAssertNil(poly4.c) - XCTAssertNil(poly4.e) - XCTAssertNil(poly4.f) - - let poly5 = Poly6(entity) - XCTAssertEqual(poly5.e, entity) - XCTAssertNil(poly5.a) - XCTAssertNil(poly5.b) - XCTAssertNil(poly5.c) - XCTAssertNil(poly5.d) - XCTAssertNil(poly5.f) - - let poly6 = Poly6(entity) - XCTAssertEqual(poly6.f, entity) - XCTAssertNil(poly6.a) - XCTAssertNil(poly6.b) - XCTAssertNil(poly6.c) - XCTAssertNil(poly6.d) - XCTAssertNil(poly6.e) - } - - func test_init_Poly7() { - let entity = TestEntity5(attributes: .none, relationships: .none, meta: .none, links: .none) - let poly = Poly7(entity) - XCTAssertEqual(poly.a, entity) - XCTAssertNil(poly.b) - XCTAssertNil(poly.c) - XCTAssertNil(poly.d) - XCTAssertNil(poly.e) - XCTAssertNil(poly.f) - XCTAssertNil(poly.g) - - let poly2 = Poly7(entity) - XCTAssertEqual(poly2.b, entity) - XCTAssertNil(poly2.a) - XCTAssertNil(poly2.c) - XCTAssertNil(poly2.d) - XCTAssertNil(poly2.e) - XCTAssertNil(poly2.f) - XCTAssertNil(poly2.g) - - let poly3 = Poly7(entity) - XCTAssertEqual(poly3.c, entity) - XCTAssertNil(poly3.a) - XCTAssertNil(poly3.b) - XCTAssertNil(poly3.d) - XCTAssertNil(poly3.e) - XCTAssertNil(poly3.f) - XCTAssertNil(poly3.g) - - let poly4 = Poly7(entity) - XCTAssertEqual(poly4.d, entity) - XCTAssertNil(poly4.a) - XCTAssertNil(poly4.b) - XCTAssertNil(poly4.c) - XCTAssertNil(poly4.e) - XCTAssertNil(poly4.f) - XCTAssertNil(poly4.g) - - let poly5 = Poly7(entity) - XCTAssertEqual(poly5.e, entity) - XCTAssertNil(poly5.a) - XCTAssertNil(poly5.b) - XCTAssertNil(poly5.c) - XCTAssertNil(poly5.d) - XCTAssertNil(poly5.f) - XCTAssertNil(poly5.g) - - let poly6 = Poly7(entity) - XCTAssertEqual(poly6.f, entity) - XCTAssertNil(poly6.a) - XCTAssertNil(poly6.b) - XCTAssertNil(poly6.c) - XCTAssertNil(poly6.d) - XCTAssertNil(poly6.e) - XCTAssertNil(poly6.g) - - let poly7 = Poly7(entity) - XCTAssertEqual(poly7.g, entity) - XCTAssertNil(poly7.a) - XCTAssertNil(poly7.b) - XCTAssertNil(poly7.c) - XCTAssertNil(poly7.d) - XCTAssertNil(poly7.e) - XCTAssertNil(poly7.f) - } - - func test_init_Poly8() { - let entity = TestEntity5(attributes: .none, relationships: .none, meta: .none, links: .none) - let poly = Poly8(entity) - XCTAssertEqual(poly.a, entity) - XCTAssertNil(poly.b) - XCTAssertNil(poly.c) - XCTAssertNil(poly.d) - XCTAssertNil(poly.e) - XCTAssertNil(poly.f) - XCTAssertNil(poly.g) - XCTAssertNil(poly.h) - - let poly2 = Poly8(entity) - XCTAssertEqual(poly2.b, entity) - XCTAssertNil(poly2.a) - XCTAssertNil(poly2.c) - XCTAssertNil(poly2.d) - XCTAssertNil(poly2.e) - XCTAssertNil(poly2.f) - XCTAssertNil(poly2.g) - XCTAssertNil(poly2.h) - - let poly3 = Poly8(entity) - XCTAssertEqual(poly3.c, entity) - XCTAssertNil(poly3.a) - XCTAssertNil(poly3.b) - XCTAssertNil(poly3.d) - XCTAssertNil(poly3.e) - XCTAssertNil(poly3.f) - XCTAssertNil(poly3.g) - XCTAssertNil(poly3.h) - - let poly4 = Poly8(entity) - XCTAssertEqual(poly4.d, entity) - XCTAssertNil(poly4.a) - XCTAssertNil(poly4.b) - XCTAssertNil(poly4.c) - XCTAssertNil(poly4.e) - XCTAssertNil(poly4.f) - XCTAssertNil(poly4.g) - XCTAssertNil(poly4.h) - - let poly5 = Poly8(entity) - XCTAssertEqual(poly5.e, entity) - XCTAssertNil(poly5.a) - XCTAssertNil(poly5.b) - XCTAssertNil(poly5.c) - XCTAssertNil(poly5.d) - XCTAssertNil(poly5.f) - XCTAssertNil(poly5.g) - XCTAssertNil(poly5.h) - - let poly6 = Poly8(entity) - XCTAssertEqual(poly6.f, entity) - XCTAssertNil(poly6.a) - XCTAssertNil(poly6.b) - XCTAssertNil(poly6.c) - XCTAssertNil(poly6.d) - XCTAssertNil(poly6.e) - XCTAssertNil(poly6.g) - XCTAssertNil(poly6.h) - - let poly7 = Poly8(entity) - XCTAssertEqual(poly7.g, entity) - XCTAssertNil(poly7.a) - XCTAssertNil(poly7.b) - XCTAssertNil(poly7.c) - XCTAssertNil(poly7.d) - XCTAssertNil(poly7.e) - XCTAssertNil(poly7.f) - XCTAssertNil(poly7.h) - - let poly8 = Poly8(entity) - XCTAssertEqual(poly8.h, entity) - XCTAssertNil(poly8.a) - XCTAssertNil(poly8.b) - XCTAssertNil(poly8.c) - XCTAssertNil(poly8.d) - XCTAssertNil(poly8.e) - XCTAssertNil(poly8.f) - XCTAssertNil(poly8.g) - } - - func test_init_Poly9() { - let entity = TestEntity5(attributes: .none, relationships: .none, meta: .none, links: .none) - let poly = Poly9(entity) - XCTAssertEqual(poly.a, entity) - XCTAssertNil(poly.b) - XCTAssertNil(poly.c) - XCTAssertNil(poly.d) - XCTAssertNil(poly.e) - XCTAssertNil(poly.f) - XCTAssertNil(poly.g) - XCTAssertNil(poly.h) - XCTAssertNil(poly.i) - - let poly2 = Poly9(entity) - XCTAssertEqual(poly2.b, entity) - XCTAssertNil(poly2.a) - XCTAssertNil(poly2.c) - XCTAssertNil(poly2.d) - XCTAssertNil(poly2.e) - XCTAssertNil(poly2.f) - XCTAssertNil(poly2.g) - XCTAssertNil(poly2.h) - XCTAssertNil(poly2.i) - - let poly3 = Poly9(entity) - XCTAssertEqual(poly3.c, entity) - XCTAssertNil(poly3.a) - XCTAssertNil(poly3.b) - XCTAssertNil(poly3.d) - XCTAssertNil(poly3.e) - XCTAssertNil(poly3.f) - XCTAssertNil(poly3.g) - XCTAssertNil(poly3.h) - XCTAssertNil(poly3.i) - - let poly4 = Poly9(entity) - XCTAssertEqual(poly4.d, entity) - XCTAssertNil(poly4.a) - XCTAssertNil(poly4.b) - XCTAssertNil(poly4.c) - XCTAssertNil(poly4.e) - XCTAssertNil(poly4.f) - XCTAssertNil(poly4.g) - XCTAssertNil(poly4.h) - XCTAssertNil(poly4.i) - - let poly5 = Poly9(entity) - XCTAssertEqual(poly5.e, entity) - XCTAssertNil(poly5.a) - XCTAssertNil(poly5.b) - XCTAssertNil(poly5.c) - XCTAssertNil(poly5.d) - XCTAssertNil(poly5.f) - XCTAssertNil(poly5.g) - XCTAssertNil(poly5.h) - XCTAssertNil(poly5.i) - - let poly6 = Poly9(entity) - XCTAssertEqual(poly6.f, entity) - XCTAssertNil(poly6.a) - XCTAssertNil(poly6.b) - XCTAssertNil(poly6.c) - XCTAssertNil(poly6.d) - XCTAssertNil(poly6.e) - XCTAssertNil(poly6.g) - XCTAssertNil(poly6.h) - XCTAssertNil(poly6.i) - - let poly7 = Poly9(entity) - XCTAssertEqual(poly7.g, entity) - XCTAssertNil(poly7.a) - XCTAssertNil(poly7.b) - XCTAssertNil(poly7.c) - XCTAssertNil(poly7.d) - XCTAssertNil(poly7.e) - XCTAssertNil(poly7.f) - XCTAssertNil(poly7.h) - XCTAssertNil(poly7.i) - - let poly8 = Poly9(entity) - XCTAssertEqual(poly8.h, entity) - XCTAssertNil(poly8.a) - XCTAssertNil(poly8.b) - XCTAssertNil(poly8.c) - XCTAssertNil(poly8.d) - XCTAssertNil(poly8.e) - XCTAssertNil(poly8.f) - XCTAssertNil(poly8.g) - XCTAssertNil(poly8.i) - - let poly9 = Poly9(entity) - XCTAssertEqual(poly9.i, entity) - XCTAssertNil(poly9.a) - XCTAssertNil(poly9.b) - XCTAssertNil(poly9.c) - XCTAssertNil(poly9.d) - XCTAssertNil(poly9.e) - XCTAssertNil(poly9.f) - XCTAssertNil(poly9.g) - XCTAssertNil(poly9.h) - } -} - -// MARK: - subscript lookup -extension PolyTests { - func test_Poly1_lookup() { - let entity = decoded(type: TestEntity.self, data: poly_entity1) - let poly = decoded(type: Poly1.self, data: poly_entity1) - - XCTAssertEqual(entity, poly[TestEntity.self]) - } - - func test_Poly2_lookup() { - let entity = decoded(type: TestEntity2.self, data: poly_entity2) - let poly = decoded(type: Poly2.self, data: poly_entity2) - - XCTAssertNil(poly[TestEntity.self]) - XCTAssertEqual(entity, poly[TestEntity2.self]) - } - - func test_Poly3_lookup() { - let entity = decoded(type: TestEntity3.self, data: poly_entity3) - let poly = decoded(type: Poly3.self, data: poly_entity3) - - XCTAssertNil(poly[TestEntity.self]) - XCTAssertNil(poly[TestEntity2.self]) - XCTAssertEqual(entity, poly[TestEntity3.self]) - } - - func test_Poly4_lookup() { - let entity = decoded(type: TestEntity4.self, data: poly_entity4) - let poly = decoded(type: Poly4.self, data: poly_entity4) - - XCTAssertNil(poly[TestEntity.self]) - XCTAssertNil(poly[TestEntity2.self]) - XCTAssertNil(poly[TestEntity3.self]) - XCTAssertEqual(entity, poly[TestEntity4.self]) - } - - func test_Poly5_lookup() { - let entity = decoded(type: TestEntity5.self, data: poly_entity5) - let poly = decoded(type: Poly5.self, data: poly_entity5) - - XCTAssertNil(poly[TestEntity.self]) - XCTAssertNil(poly[TestEntity2.self]) - XCTAssertNil(poly[TestEntity3.self]) - XCTAssertNil(poly[TestEntity4.self]) - XCTAssertEqual(entity, poly[TestEntity5.self]) - } - - func test_Poly6_lookup() { - let entity = decoded(type: TestEntity6.self, data: poly_entity6) - let poly = decoded(type: Poly6.self, data: poly_entity6) - - XCTAssertNil(poly[TestEntity.self]) - XCTAssertNil(poly[TestEntity2.self]) - XCTAssertNil(poly[TestEntity3.self]) - XCTAssertNil(poly[TestEntity4.self]) - XCTAssertNil(poly[TestEntity5.self]) - XCTAssertEqual(entity, poly[TestEntity6.self]) - } - - func test_Poly7_lookup() { - let entity = decoded(type: TestEntity7.self, data: poly_entity7) - let poly = decoded(type: Poly7.self, data: poly_entity7) - - XCTAssertNil(poly[TestEntity.self]) - XCTAssertNil(poly[TestEntity2.self]) - XCTAssertNil(poly[TestEntity3.self]) - XCTAssertNil(poly[TestEntity4.self]) - XCTAssertNil(poly[TestEntity5.self]) - XCTAssertNil(poly[TestEntity6.self]) - XCTAssertEqual(entity, poly[TestEntity7.self]) - } - - func test_Poly8_lookup() { - let entity = decoded(type: TestEntity8.self, data: poly_entity8) - let poly = decoded(type: Poly8.self, data: poly_entity8) - - XCTAssertNil(poly[TestEntity.self]) - XCTAssertNil(poly[TestEntity2.self]) - XCTAssertNil(poly[TestEntity3.self]) - XCTAssertNil(poly[TestEntity4.self]) - XCTAssertNil(poly[TestEntity5.self]) - XCTAssertNil(poly[TestEntity6.self]) - XCTAssertNil(poly[TestEntity7.self]) - XCTAssertEqual(entity, poly[TestEntity8.self]) - } - - func test_Poly9_lookup() { - let entity = decoded(type: TestEntity9.self, data: poly_entity9) - let poly = decoded(type: Poly9.self, data: poly_entity9) - - XCTAssertNil(poly[TestEntity.self]) - XCTAssertNil(poly[TestEntity2.self]) - XCTAssertNil(poly[TestEntity3.self]) - XCTAssertNil(poly[TestEntity4.self]) - XCTAssertNil(poly[TestEntity5.self]) - XCTAssertNil(poly[TestEntity6.self]) - XCTAssertNil(poly[TestEntity7.self]) - XCTAssertNil(poly[TestEntity8.self]) - XCTAssertEqual(entity, poly[TestEntity9.self]) - } -} - -// MARK: - failures -extension PolyTests { - func test_Poly0_encode_throws() { - XCTAssertThrowsError(try JSONEncoder().encode(Poly0())) - } - - func test_Poly0_decode_throws() { - XCTAssertThrowsError(try JSONDecoder().decode(Poly0.self, from: poly_entity1)) - } - - func test_Poly1_decode_throws_typeNotFound() { - XCTAssertThrowsError(try JSONDecoder().decode(Poly1.self, from: poly_entity2)) - } - - func test_Poly2_decode_throws_typeNotFound() { - XCTAssertThrowsError(try JSONDecoder().decode(Poly2.self, from: poly_entity3)) - } - - func test_Poly3_decode_throws_typeNotFound() { - XCTAssertThrowsError(try JSONDecoder().decode(Poly3.self, from: poly_entity4)) - } - - func test_Poly4_decode_throws_typeNotFound() { - XCTAssertThrowsError(try JSONDecoder().decode(Poly4.self, from: poly_entity5)) - } - - func test_Poly5_decode_throws_typeNotFound() { - XCTAssertThrowsError(try JSONDecoder().decode(Poly5.self, from: poly_entity6)) - } - - func test_Poly6_decode_throws_typeNotFound() { - XCTAssertThrowsError(try JSONDecoder().decode(Poly6.self, from: poly_entity7)) - } - - func test_Poly7_decode_throws_typeNotFound() { - XCTAssertThrowsError(try JSONDecoder().decode(Poly7.self, from: poly_entity8)) - } - - func test_Poly8_decode_throws_typeNotFound() { - XCTAssertThrowsError(try JSONDecoder().decode(Poly8.self, from: poly_entity9)) - } - - func test_Poly9_decode_throws_typeNotFound() { - XCTAssertThrowsError(try JSONDecoder().decode(Poly9.self, from: poly_entity10)) - } -} - -// MARK: - Test types -extension PolyTests { - enum TestEntityType: ResourceObjectDescription { - - typealias Relationships = NoRelationships - - public static var jsonType: String { return "test_entity1" } - - public struct Attributes: JSONAPI.Attributes { - let foo: Attribute - let bar: Attribute - } - } - - typealias TestEntity = BasicEntity - - enum TestEntityType2: ResourceObjectDescription { - - public static var jsonType: String { return "test_entity2" } - - public struct Relationships: JSONAPI.Relationships { - let entity1: ToOneRelationship - } - - public struct Attributes: JSONAPI.Attributes { - let foo: Attribute - let bar: Attribute - } - } - - typealias TestEntity2 = BasicEntity - - enum TestEntityType3: ResourceObjectDescription { - - typealias Attributes = NoAttributes - - public static var jsonType: String { return "test_entity3" } - - public struct Relationships: JSONAPI.Relationships { - let entity1: ToOneRelationship - let entity2: ToManyRelationship - } - } - - typealias TestEntity3 = BasicEntity - - enum TestEntityType4: ResourceObjectDescription { - - typealias Attributes = NoAttributes - - typealias Relationships = NoRelationships - - public static var jsonType: String { return "test_entity4" } - } - - typealias TestEntity4 = BasicEntity - - enum TestEntityType5: ResourceObjectDescription { - - typealias Attributes = NoAttributes - - typealias Relationships = NoRelationships - - public static var jsonType: String { return "test_entity5" } - } - - typealias TestEntity5 = BasicEntity - - enum TestEntityType6: ResourceObjectDescription { - - typealias Attributes = NoAttributes - - public static var jsonType: String { return "test_entity6" } - - struct Relationships: JSONAPI.Relationships { - let entity4: ToOneRelationship - } - } - - typealias TestEntity6 = BasicEntity - - enum TestEntityType7: ResourceObjectDescription { - - typealias Attributes = NoAttributes - - public static var jsonType: String { return "test_entity7" } - - typealias Relationships = NoRelationships - } - - typealias TestEntity7 = BasicEntity - - enum TestEntityType8: ResourceObjectDescription { - - typealias Attributes = NoAttributes - - public static var jsonType: String { return "test_entity8" } - - typealias Relationships = NoRelationships - } - - typealias TestEntity8 = BasicEntity - - enum TestEntityType9: ResourceObjectDescription { - - typealias Attributes = NoAttributes - - public static var jsonType: String { return "test_entity9" } - - typealias Relationships = NoRelationships - } - - typealias TestEntity9 = BasicEntity -}