mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-09-30 18:39:43 +00:00
Fix test according to Junie guidelines
This commit is contained in:
@@ -19,6 +19,9 @@ use Chill\TaskBundle\Event\TaskAssignEventSubscriber;
|
||||
use Chill\TaskBundle\Notification\AssignTaskNotificationFlagProvider;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Prophecy\Argument;
|
||||
use Prophecy\PhpUnit\ProphecyTrait;
|
||||
use Prophecy\Prophecy\ObjectProphecy;
|
||||
use Twig\Environment;
|
||||
|
||||
/**
|
||||
@@ -28,53 +31,53 @@ use Twig\Environment;
|
||||
*/
|
||||
class TaskAssignEventSubscriberTest extends TestCase
|
||||
{
|
||||
private EntityManagerInterface $entityManager;
|
||||
private Environment $twig;
|
||||
use ProphecyTrait;
|
||||
|
||||
private ObjectProphecy $entityManager;
|
||||
private ObjectProphecy $twig;
|
||||
private TaskAssignEventSubscriber $subscriber;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->entityManager = $this->createMock(EntityManagerInterface::class);
|
||||
$this->twig = $this->createMock(Environment::class);
|
||||
$this->subscriber = new TaskAssignEventSubscriber($this->entityManager, $this->twig);
|
||||
$this->entityManager = $this->prophesize(EntityManagerInterface::class);
|
||||
$this->twig = $this->prophesize(Environment::class);
|
||||
$this->subscriber = new TaskAssignEventSubscriber(
|
||||
$this->entityManager->reveal(),
|
||||
$this->twig->reveal()
|
||||
);
|
||||
}
|
||||
|
||||
public function testGetSubscribedEvents(): void
|
||||
private function setEntityId(object $entity, int $id): void
|
||||
{
|
||||
$events = TaskAssignEventSubscriber::getSubscribedEvents();
|
||||
|
||||
$this->assertArrayHasKey(AssignTaskEvent::PERSIST, $events);
|
||||
$this->assertEquals(['onTaskAssigned', 0], $events[AssignTaskEvent::PERSIST]);
|
||||
$reflection = new \ReflectionClass($entity);
|
||||
$property = $reflection->getProperty('id');
|
||||
$property->setAccessible(true);
|
||||
$property->setValue($entity, $id);
|
||||
}
|
||||
|
||||
public function testOnTaskAssignedCreatesNotificationWhenAssigneeChanges(): void
|
||||
{
|
||||
// Arrange
|
||||
$task = $this->createMock(SingleTask::class);
|
||||
$assignee = $this->createMock(User::class);
|
||||
$event = $this->createMock(AssignTaskEvent::class);
|
||||
$initialAssignee = new User();
|
||||
$newAssignee = new User();
|
||||
|
||||
$task->method('getId')->willReturn(123);
|
||||
$task->method('getTitle')->willReturn('Test Task');
|
||||
$task->method('getAssignee')->willReturn($assignee);
|
||||
$task = new SingleTask();
|
||||
$task->setTitle('Test Task');
|
||||
$task->setAssignee($newAssignee);
|
||||
$this->setEntityId($task, 123);
|
||||
|
||||
$event->method('hasAssigneeChanged')->willReturn(true);
|
||||
$event->method('getTask')->willReturn($task);
|
||||
$event = new AssignTaskEvent($task, $initialAssignee);
|
||||
|
||||
$this->twig->expects($this->exactly(2))
|
||||
->method('render')
|
||||
->with(
|
||||
$this->logicalOr(
|
||||
'@ChillTask/Notification/task_assignment_notification_title.txt.twig',
|
||||
'@ChillTask/Notification/task_assignment_notification_content.txt.twig'
|
||||
),
|
||||
$this->isType('array')
|
||||
)
|
||||
->willReturnOnConsecutiveCalls('Notification Title', 'Notification Content');
|
||||
$this->twig->render('@ChillTask/Notification/task_assignment_notification_title.txt.twig', Argument::type('array'))
|
||||
->shouldBeCalledOnce()
|
||||
->willReturn('Notification Title');
|
||||
|
||||
$this->entityManager->expects($this->once())
|
||||
->method('persist')
|
||||
->with($this->isInstanceOf(Notification::class));
|
||||
$this->twig->render('@ChillTask/Notification/task_assignment_notification_content.txt.twig', Argument::type('array'))
|
||||
->shouldBeCalledOnce()
|
||||
->willReturn('Notification Content');
|
||||
|
||||
$this->entityManager->persist(Argument::type(Notification::class))
|
||||
->shouldBeCalledOnce();
|
||||
|
||||
// Act
|
||||
$this->subscriber->onTaskAssigned($event);
|
||||
@@ -83,11 +86,16 @@ class TaskAssignEventSubscriberTest extends TestCase
|
||||
public function testOnTaskAssignedDoesNothingWhenAssigneeDoesNotChange(): void
|
||||
{
|
||||
// Arrange
|
||||
$event = $this->createMock(AssignTaskEvent::class);
|
||||
$event->method('hasAssigneeChanged')->willReturn(false);
|
||||
$assignee = new User();
|
||||
|
||||
$this->twig->expects($this->never())->method('render');
|
||||
$this->entityManager->expects($this->never())->method('persist');
|
||||
$task = new SingleTask();
|
||||
$task->setTitle('Test Task');
|
||||
$task->setAssignee($assignee);
|
||||
|
||||
$event = new AssignTaskEvent($task, $assignee);
|
||||
|
||||
$this->twig->render(Argument::any(), Argument::any())->shouldNotBeCalled();
|
||||
$this->entityManager->persist(Argument::any())->shouldNotBeCalled();
|
||||
|
||||
// Act
|
||||
$this->subscriber->onTaskAssigned($event);
|
||||
@@ -96,25 +104,24 @@ class TaskAssignEventSubscriberTest extends TestCase
|
||||
public function testNotificationHasCorrectProperties(): void
|
||||
{
|
||||
// Arrange
|
||||
$task = $this->createMock(SingleTask::class);
|
||||
$assignee = $this->createMock(User::class);
|
||||
$event = $this->createMock(AssignTaskEvent::class);
|
||||
$initialAssignee = new User();
|
||||
$newAssignee = new User();
|
||||
|
||||
$task->method('getId')->willReturn(456);
|
||||
$task->method('getTitle')->willReturn('Important Task');
|
||||
$task->method('getAssignee')->willReturn($assignee);
|
||||
$task = new SingleTask();
|
||||
$task->setTitle('Important Task');
|
||||
$task->setAssignee($newAssignee);
|
||||
$this->setEntityId($task, 456);
|
||||
|
||||
$event->method('hasAssigneeChanged')->willReturn(true);
|
||||
$event->method('getTask')->willReturn($task);
|
||||
$event = new AssignTaskEvent($task, $initialAssignee);
|
||||
|
||||
$this->twig->method('render')->willReturn('Test Content');
|
||||
$this->twig->render(Argument::any(), Argument::any())->willReturn('Test Content');
|
||||
|
||||
// Capture the persisted notification
|
||||
$persistedNotification = null;
|
||||
$this->entityManager->expects($this->once())
|
||||
->method('persist')
|
||||
->willReturnCallback(function ($notification) use (&$persistedNotification) {
|
||||
$persistedNotification = $notification;
|
||||
$this->entityManager->persist(Argument::type(Notification::class))
|
||||
->shouldBeCalledOnce()
|
||||
->will(function ($args) use (&$persistedNotification) {
|
||||
$persistedNotification = $args[0];
|
||||
});
|
||||
|
||||
// Act
|
||||
@@ -122,7 +129,7 @@ class TaskAssignEventSubscriberTest extends TestCase
|
||||
|
||||
// Assert
|
||||
$this->assertInstanceOf(Notification::class, $persistedNotification);
|
||||
$this->assertEquals(456, $persistedNotification->getRelatedEntityId());
|
||||
$this->assertEquals($task->getId(), $persistedNotification->getRelatedEntityId());
|
||||
$this->assertEquals(SingleTask::class, $persistedNotification->getRelatedEntityClass());
|
||||
$this->assertEquals(AssignTaskNotificationFlagProvider::FLAG, $persistedNotification->getType());
|
||||
$this->assertEquals('Test Content', $persistedNotification->getTitle());
|
||||
|
Reference in New Issue
Block a user