Skip to content

Commit

Permalink
Fix ItemsStorage::getParents and add more unit tests (#23)
Browse files Browse the repository at this point in the history
  • Loading branch information
razonyang committed Sep 4, 2022
1 parent b39aa40 commit 3a338e8
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 6 deletions.
9 changes: 8 additions & 1 deletion src/ItemsStorage.php
Expand Up @@ -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
),
);
}

/**
Expand Down
4 changes: 3 additions & 1 deletion tests/AssignmentsStorageTest.php
Expand Up @@ -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'));
}

Expand All @@ -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());
}
}
Expand Down
22 changes: 18 additions & 4 deletions tests/ItemsStorageTest.php
Expand Up @@ -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
Expand Down

0 comments on commit 3a338e8

Please sign in to comment.