diff --git a/src/ItemsStorage.php b/src/ItemsStorage.php index ba918cf..f77a7af 100644 --- a/src/ItemsStorage.php +++ b/src/ItemsStorage.php @@ -174,7 +174,14 @@ public function getParents(string $name): array ->from([$this->tableName, $this->childrenTableName]) ->where(['child' => $name, 'name' => new Expression('parent')]) ->fetchAll(); - return array_map(fn (array $item): Item => $this->populateItem($item), $parents); + + return array_combine( + array_column($parents, 'name'), + array_map( + fn (array $item): Item => $this->populateItem($item), + $parents + ), + ); } /** diff --git a/tests/AssignmentsStorageTest.php b/tests/AssignmentsStorageTest.php index 6a62b85..a1deb29 100644 --- a/tests/AssignmentsStorageTest.php +++ b/tests/AssignmentsStorageTest.php @@ -22,6 +22,7 @@ public function testRenameItem(): void $storage = $this->getStorage(); $storage->renameItem('Admin', 'Tech Admin'); + $this->assertFalse($storage->hasItem('Admin')); $this->assertTrue($storage->hasItem('Tech Admin')); } @@ -31,8 +32,9 @@ public function testGetAll(): void $all = $storage->getAll(); $this->assertCount(2, $all); - foreach ($all as $assignments) { + foreach ($all as $userId => $assignments) { foreach ($assignments as $name => $assignment) { + $this->assertSame($userId, $assignment->getUserId()); $this->assertSame($name, $assignment->getItemName()); } } diff --git a/tests/ItemsStorageTest.php b/tests/ItemsStorageTest.php index bba83a5..bd33637 100644 --- a/tests/ItemsStorageTest.php +++ b/tests/ItemsStorageTest.php @@ -124,13 +124,27 @@ public function testRemove(): void $this->assertEmpty($storage->get('Parent 3')); } - public function testGetParents(): void + public function getParentsProvider(): array + { + return [ + ['Child 1', ['Parent 1']], + ['Child 2', ['Parent 2']], + ]; + } + + /** + * @dataProvider getParentsProvider + */ + public function testGetParents(string $childName, array $expectedParents): void { $storage = $this->getStorage(); - $parents = $storage->getParents('Child 1'); + $parents = $storage->getParents($childName); - $this->assertCount(1, $parents); - $this->assertSame('Parent 1', $parents[0]->getName()); + $this->assertCount(count($expectedParents), $parents); + foreach ($parents as $parentName => $parent) { + $this->assertContains($parentName, $expectedParents); + $this->assertSame($parentName, $parent->getName()); + } } public function testRemoveChildren(): void