/** * convert data into transformed array * * @param mixed $data * @param Item|Collection $resource * @param array|string $embeds * @return array */ public function convert($data, Item $resource, $embeds = []) { if (is_string($embeds)) { $embeds = $this->embedManager->getEmbedsFromParam($embeds); } $embeds = $this->embedManager->filter($this->availableEmbeds, $embeds); return $resource->transform($data, $embeds); }
public function testFilter() { // All empty $embeds = []; $filteringEmbeds = []; $results = $this->embedManager->filter($embeds, $filteringEmbeds); $this->assertEquals([], $results); // Master list is empty $embeds = []; $filteringEmbeds = [new Embed('comments')]; $results = $this->embedManager->filter($embeds, $filteringEmbeds); $this->assertEquals([], $results); // Same list with 1 element $embeds = [new Embed('comments')]; $filteringEmbeds = [new Embed('comments')]; $results = $this->embedManager->filter($embeds, $filteringEmbeds); $this->assertEquals(1, count($results)); $this->assertEquals('comments', $results[0]->name); $this->assertEquals([], $results[0]->children); // Master list has more stuff $embeds = [new Embed('comments', [new Embed('users')]), new Embed('likes')]; $filteringEmbeds = [new Embed('comments')]; $results = $this->embedManager->filter($embeds, $filteringEmbeds); $this->assertEquals(1, count($results)); $this->assertEquals('comments', $results[0]->name); $this->assertEquals([], $results[0]->children); // Input list has more stuff $embeds = [new Embed('comments')]; $filteringEmbeds = [new Embed('comments', [new Embed('users')])]; $results = $this->embedManager->filter($embeds, $filteringEmbeds); $this->assertEquals(1, count($results)); $this->assertEquals('comments', $results[0]->name); $this->assertEquals([], $results[0]->children); // Input list has different stuff compare to master $embeds = [new Embed('likes')]; $filteringEmbeds = [new Embed('comments')]; $results = $this->embedManager->filter($embeds, $filteringEmbeds); $this->assertEquals([], $results); // Input list has different stuff compare to master on children level $embeds = [new Embed('comments', [new Embed('likes')])]; $filteringEmbeds = [new Embed('comments', [new Embed('users')])]; $results = $this->embedManager->filter($embeds, $filteringEmbeds); $this->assertEquals(1, count($results)); $this->assertEquals('comments', $results[0]->name); $this->assertEquals([], $results[0]->children); // Input list has different stuff compare to master on children level pretty complex one $embeds = [new Embed('comments', [new Embed('users')]), new Embed('likes', [new Embed('users')])]; $filteringEmbeds = [new Embed('comments', [new Embed('users')]), new Embed('likes')]; $results = $this->embedManager->filter($embeds, $filteringEmbeds); $this->assertEquals(2, count($results)); $this->assertEquals('comments', $results[0]->name); $this->assertEquals(1, count($results[0]->children)); $this->assertEquals('users', $results[0]->children[0]->name); $this->assertEquals('likes', $results[1]->name); $this->assertEquals([], $results[1]->children); // Input list has different stuff compare to master on children, oh what a mess! $embeds = [new Embed('comments', [new Embed('users')]), new Embed('likes', [new Embed('users')])]; $filteringEmbeds = [new Embed('comments', [new Embed('likes')]), new Embed('likes', [new Embed('guns')])]; $results = $this->embedManager->filter($embeds, $filteringEmbeds); $this->assertEquals(2, count($results)); $this->assertEquals('comments', $results[0]->name); $this->assertEquals([], $results[0]->children); $this->assertEquals('likes', $results[1]->name); $this->assertEquals([], $results[1]->children); }