/** * Adds a included resource for a compound document * @param JsonApiResource $resource * @return boolean True when added, false if not */ public function addIncluded(JsonApiResource $resource) { $type = $resource->getType(); $id = $resource->getId(); $relationships = $resource->getRelationships(); if (isset($this->index[$type][$id]) || !$resource->getAttributes() && !$relationships) { return false; } $this->indexResource($resource); if (!isset($this->included[$type])) { $this->included[$type] = array(); } $this->included[$type][$id] = $resource; $relationshipPath = $resource->getRelationshipPath(); foreach ($relationships as $name => $relationship) { $fieldRelationshipPath = ($relationshipPath ? $relationshipPath . '.' : '') . $name; if (!$this->query->isIncluded($fieldRelationshipPath)) { continue; } $data = $relationship->getData(); if (is_array($data)) { foreach ($data as $d) { $this->addIncluded($d); } } elseif ($data) { $this->addIncluded($data); } } return true; }
/** * @dataProvider providerIsIncluded */ public function testIsIncluded($expected, $include, $type) { $query = new JsonApiQuery(array(JsonApiQuery::PARAMETER_INCLUDE => $include)); $result = $query->isIncluded($type); $this->assertEquals($result, $expected); }