Add getSuggestedUsers method in EntityWorkflowManager

Implemented the method to retrieve a list of suggested users for an entity workflow, filtering out duplicates. Added corresponding unit tests to verify the method's functionality and ensure its correctness in various scenarios.
This commit is contained in:
Julien Fastré 2024-10-22 23:35:13 +02:00
parent c877076429
commit 85dc9bdb2f
Signed by: julienfastre
GPG Key ID: BDE2190974723FCB
2 changed files with 76 additions and 0 deletions

View File

@ -0,0 +1,49 @@
<?php
declare(strict_types=1);
/*
* Chill is a software for social workers
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace Chill\MainBundle\Tests\Workflow;
use Chill\MainBundle\Entity\User;
use Chill\MainBundle\Entity\Workflow\EntityWorkflow;
use Chill\MainBundle\Workflow\EntityWorkflowHandlerInterface;
use Chill\MainBundle\Workflow\EntityWorkflowManager;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Workflow\Registry;
/**
* @internal
*
* @coversNothing
*/
class EntityWorkflowManagerTest extends TestCase
{
public function testGetSuggestedUsers()
{
$user1 = new User();
$user2 = new User();
$entityWorkflow = $this->createMock(EntityWorkflow::class);
$entityWorkflow->method('getUsersInvolved')->willReturn([$user1, $user2]);
$user3 = new User();
$handler = $this->createMock(EntityWorkflowHandlerInterface::class);
$handler->method('getSuggestedUsers')->willReturn([$user1, $user3]);
$handler->method('supports')->willReturn(true);
$manager = new EntityWorkflowManager([$handler], new Registry());
$users = $manager->getSuggestedUsers($entityWorkflow);
self::assertcount(3, $users);
self::assertContains($user1, $users);
self::assertContains($user2, $users);
self::assertContains($user3, $users);
}
}

View File

@ -12,6 +12,7 @@ declare(strict_types=1);
namespace Chill\MainBundle\Workflow;
use Chill\DocStoreBundle\Entity\StoredObject;
use Chill\MainBundle\Entity\User;
use Chill\MainBundle\Entity\Workflow\EntityWorkflow;
use Chill\MainBundle\Entity\Workflow\EntityWorkflowSend;
use Chill\MainBundle\Workflow\Exception\HandlerNotFoundException;
@ -93,4 +94,30 @@ class EntityWorkflowManager
throw new HandlerWithPublicViewNotFoundException();
}
/**
* @return list<User>
*/
public function getSuggestedUsers(EntityWorkflow $entityWorkflow, bool $addUsersInvolved = true): array
{
$users = [];
if ($addUsersInvolved) {
foreach ($entityWorkflow->getUsersInvolved() as $user) {
$users[] = $user;
}
}
foreach ($this->getHandler($entityWorkflow)->getSuggestedUsers($entityWorkflow) as $user) {
$users[] = $user;
}
return array_values(
// filter objects to remove duplicates
array_filter(
$users,
fn ($o, $k) => array_search($o, $users, true) === $k,
ARRAY_FILTER_USE_BOTH
)
);
}
}