1, 'content' => 'Post by user 1' ], [ 'user_id' => 2, 'content' => 'Post by user 2' ], [ 'user_id' => 3, 'content' => 'Post by user 3' ], ]; $enrichment = new Enrichment($this->getRepositories()); $enricher = new Enricher($enrichment); $items = new ItemsBag(); $items->push(new Item('*.user_id', 'user')); $target = new Target('user', 'id'); $requests = new Requests([ new Request($items, $target) ]); $enriched = $enricher->enrich($posts, $requests); $this->assertSame( [ 'user_id' => 1, 'content' => 'Post by user 1', 'user' => [ 'id' => 1, 'name' => 'Blank.1', ], ], $enriched[0] ); $this->assertSame( [ 'user_id' => 2, 'content' => 'Post by user 2', 'user' => [ 'id' => 2, 'name' => 'Blank.2', ], ], $enriched[1] ); $this->assertSame( [ 'user_id' => 3, 'content' => 'Post by user 3', 'user' => [ 'id' => 3, 'name' => 'Blank.3', ], ], $enriched[2] ); } private function getRepositories(): Repositories { return new Repositories([ 'user' => new EnricherTestUserRepository(), ]); } } class EnricherTestUserRepository implements Repository { public function getByFieldValues(string $field, array $values): iterable { return [ $this->getBlankWithId(1), $this->getBlankWithId(2), $this->getBlankWithId(3), ]; } private function getBlankWithId(int $id): array { return [ 'id' => $id, 'name' => sprintf('Blank.%d', $id) ]; } }