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