diff --git a/Halley/Core/Traverser/Traverser.swift b/Halley/Core/Traverser/Traverser.swift index ce218e6..e6b4e65 100644 --- a/Halley/Core/Traverser/Traverser.swift +++ b/Halley/Core/Traverser/Traverser.swift @@ -129,16 +129,22 @@ private extension Traverser { ) } + var responseModel = resource.parameters + // Remove parameters for relationships that are not included + // eg. remove embedded relationship that we do not include + resource._links?.relationships + .filter { rel in !relationshipsToFetch.contains(where: { $0.relationship == rel.key }) } + .forEach { responseModel.removeValue(forKey: $0.key) } + // Ensure .zip() doesn't end up with Empty Publisher which produces no elements // and ends whole pipeline guard requests.isEmpty == false else { - return .success(resource.parameters) + return .success(responseModel) } return requests .zip() .map { responses -> JSONResult in - var responseModel = resource.parameters for response in responses { switch response.result { case .success(let value): diff --git a/Tests/Decoding/SingleResourceTests.swift b/Tests/Decoding/SingleResourceTests.swift index d3b358a..9e43fb4 100644 --- a/Tests/Decoding/SingleResourceTests.swift +++ b/Tests/Decoding/SingleResourceTests.swift @@ -4,31 +4,31 @@ import Halley final class SingleResourceTests: XCTestCase { func testDecodingAttributes() throws { - let fetcher = HalleyResourceFetcher(fromJson: "simple_single_resource") + let fetcher = HalleyResourceFetcher(fromJson: "simple_single_resource", for: Contact.self, includeType: .full) let person = try awaitPublisher(fetcher.resource(ofType: Contact.self)) XCTAssertTrue(person.name == "Matthew Weier O'Phinney") } func testDecodingToOneRelationship() throws { - let fetcher = HalleyResourceFetcher(fromJson: "simple_single_resource") + let fetcher = HalleyResourceFetcher(fromJson: "simple_single_resource", for: Contact.self, includeType: .full) let person = try awaitPublisher(fetcher.resource(ofType: Contact.self)) XCTAssertNotNil(person.website) } func testDecodingToManyRelationship() throws { - let fetcher = HalleyResourceFetcher(fromJson: "simple_single_resource") + let fetcher = HalleyResourceFetcher(fromJson: "simple_single_resource", for: Contact.self, includeType: .full) let person = try awaitPublisher(fetcher.resource(ofType: Contact.self)) XCTAssertEqual(person.contacts?.count, 2) } func testDecodingSelfLink() throws { - let fetcher = HalleyResourceFetcher(fromJson: "simple_single_resource") + let fetcher = HalleyResourceFetcher(fromJson: "simple_single_resource", for: Contact.self, includeType: .full) let person = try awaitPublisher(fetcher.resource(ofType: Contact.self)) XCTAssertEqual(person._links?.selfLink?.href, "http://example.org/api/user/matthew") } func testDecodingRelationshipSelfLink() throws { - let fetcher = HalleyResourceFetcher(fromJson: "simple_single_resource") + let fetcher = HalleyResourceFetcher(fromJson: "simple_single_resource", for: Contact.self, includeType: .full) let person = try awaitPublisher(fetcher.resource(ofType: Contact.self)) XCTAssertEqual(person.website?._links?.selfLink?.href, "http://example.org/api/locations/mwop") }