Fix testMerge method in AccompanyingPeriodWorkMergeServiceTest.php

This commit is contained in:
Julie Lenaerts 2025-07-10 11:33:23 +02:00
parent f383fab578
commit 837089ff5d

View File

@ -14,22 +14,20 @@ namespace Chill\PersonBundle\Tests\Service\AccompanyingPeriodWork;
use Chill\MainBundle\Entity\User; use Chill\MainBundle\Entity\User;
use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork; use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork;
use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkEvaluation; use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkEvaluation;
use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkGoal;
use Chill\PersonBundle\Entity\SocialWork\Result;
use Chill\PersonBundle\Service\AccompanyingPeriodWork\AccompanyingPeriodWorkMergeService; use Chill\PersonBundle\Service\AccompanyingPeriodWork\AccompanyingPeriodWorkMergeService;
use Chill\ThirdPartyBundle\Entity\ThirdParty; use Chill\ThirdPartyBundle\Entity\ThirdParty;
use Doctrine\DBAL\Connection; use Doctrine\DBAL\Connection;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Monolog\Test\TestCase;
use Prophecy\Argument; use Prophecy\Argument;
use Prophecy\PhpUnit\ProphecyTrait; use Prophecy\PhpUnit\ProphecyTrait;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
/** /**
* @internal * @internal
* *
* @coversNothing * @coversNothing
*/ */
class AccompanyingPeriodWorkMergeServiceTest extends TestCase class AccompanyingPeriodWorkMergeServiceTest extends KernelTestCase
{ {
use ProphecyTrait; use ProphecyTrait;
@ -160,46 +158,62 @@ class AccompanyingPeriodWorkMergeServiceTest extends TestCase
]; ];
} }
public function testMerge(): void public function testMergeAccompanyingPeriodWorks(): void
{ {
$accompanyingPeriodWork = new AccompanyingPeriodWork(); $em = self::getContainer()->get(EntityManagerInterface::class);
$accompanyingPeriodWork->setStartDate(new \DateTime('2022-01-01'));
$accompanyingPeriodWork->addReferrer($userA = new User()); $userA = new User();
$accompanyingPeriodWork->addReferrer($userC = new User()); $userA->setUsername('someUser');
$accompanyingPeriodWork->addAccompanyingPeriodWorkEvaluation($evaluationA = new AccompanyingPeriodWorkEvaluation()); $userA->setEmail('someUser@example.com');
$accompanyingPeriodWork->setNote('blabla'); $em->persist($userA);
$accompanyingPeriodWork->addThirdParty($thirdPartyA = new ThirdParty());
$toKeep = new AccompanyingPeriodWork();
$toKeep->setStartDate(new \DateTime('2022-01-02'));
$toKeep->setNote('Keep note');
$toKeep->setCreatedBy($userA);
$toKeep->setUpdatedBy($userA);
$toKeep->addReferrer($userA);
$em->persist($toKeep);
$userB = new User();
$userB->setUsername('anotherUser');
$userB->setEmail('anotherUser@example.com');
$em->persist($userB);
$toDelete = new AccompanyingPeriodWork(); $toDelete = new AccompanyingPeriodWork();
$toDelete->setStartDate(new \DateTime('2022-01-01')); $toDelete->setStartDate(new \DateTime('2022-01-01'));
$toDelete->addReferrer($userB = new User()); $toDelete->setNote('Delete note');
$toDelete->addReferrer($userC); $toDelete->setCreatedBy($userB);
$toDelete->addAccompanyingPeriodWorkEvaluation($evaluationB = new AccompanyingPeriodWorkEvaluation()); $toDelete->setUpdatedBy($userB);
$toDelete->setNote('boum'); $toDelete->addReferrer($userB);
$toDelete->addThirdParty($thirdPartyB = new ThirdParty()); $em->persist($toDelete);
$toDelete->addGoal($goalA = new AccompanyingPeriodWorkGoal());
$toDelete->addResult($resultA = new Result());
$service = $this->buildMergeService($toDelete); $evaluation = new AccompanyingPeriodWorkEvaluation();
$service->merge($accompanyingPeriodWork, $toDelete); $evaluation->setAccompanyingPeriodWork($toDelete);
$em->persist($evaluation);
self::assertTrue($accompanyingPeriodWork->getReferrers()->contains($userA)); $em->flush();
self::assertTrue($accompanyingPeriodWork->getReferrers()->contains($userB));
self::assertTrue($accompanyingPeriodWork->getReferrers()->contains($userC));
self::assertTrue($accompanyingPeriodWork->getAccompanyingPeriodWorkEvaluations()->contains($evaluationA)); $service = new AccompanyingPeriodWorkMergeService($em);
self::assertTrue($accompanyingPeriodWork->getAccompanyingPeriodWorkEvaluations()->contains($evaluationB)); $merged = $service->merge($toKeep, $toDelete);
foreach ($accompanyingPeriodWork->getAccompanyingPeriodWorkEvaluations() as $evaluation) {
self::assertSame($accompanyingPeriodWork, $evaluation->getAccompanyingPeriodWork());
}
self::assertStringContainsString('blabla', $accompanyingPeriodWork->getNote()); $em->refresh($merged);
self::assertStringContainsString('boum', $toDelete->getNote());
self::assertTrue($accompanyingPeriodWork->getThirdParties()->contains($thirdPartyA)); // Assertions
self::assertTrue($accompanyingPeriodWork->getThirdParties()->contains($thirdPartyB));
self::assertTrue($accompanyingPeriodWork->getGoals()->contains($goalA)); $this->assertEquals(new \DateTime('2022-01-01'), $merged->getStartDate());
self::assertTrue($accompanyingPeriodWork->getResults()->contains($resultA));
$this->assertStringContainsString('Keep note', $merged->getNote());
$this->assertStringContainsString('Delete note', $merged->getNote());
$em->refresh($evaluation);
$this->assertEquals($toKeep->getId(), $evaluation->getAccompanyingPeriodWork()->getId());
$em->remove($evaluation);
$em->remove($toKeep);
$em->remove($toDelete);
$em->remove($userA);
$em->remove($userB);
$em->flush();
} }
} }