diff --git a/tests/Entity/AttestationTest.php b/tests/Entity/AttestationTest.php index 3c7fcf0..610dcd1 100644 --- a/tests/Entity/AttestationTest.php +++ b/tests/Entity/AttestationTest.php @@ -87,5 +87,13 @@ class AttestationTest extends TestCase { $a = new Attestation('access', '1.1.1.1', 'a@t.com', 's'); $this->assertNull($a->getEmailTracking()); + + $tracking = new \App\Entity\EmailTracking('msg-1', 'a@t.com', 'Subject'); + $result = $a->setEmailTracking($tracking); + $this->assertSame($tracking, $a->getEmailTracking()); + $this->assertSame($a, $result); + + $a->setEmailTracking(null); + $this->assertNull($a->getEmailTracking()); } } diff --git a/tests/Entity/CustomerTest.php b/tests/Entity/CustomerTest.php index a85b5a0..aceae85 100644 --- a/tests/Entity/CustomerTest.php +++ b/tests/Entity/CustomerTest.php @@ -116,5 +116,7 @@ class CustomerTest extends TestCase $c->setState(Customer::STATE_SUSPENDED); $this->assertSame(Customer::STATE_SUSPENDED, $c->getState()); $this->assertFalse($c->isActive()); + $this->assertInstanceOf(\DateTimeImmutable::class, $c->getUpdatedAt()); } + } diff --git a/tests/Entity/ServiceTest.php b/tests/Entity/ServiceTest.php index 2d61c1e..12a2594 100644 --- a/tests/Entity/ServiceTest.php +++ b/tests/Entity/ServiceTest.php @@ -52,6 +52,15 @@ class ServiceTest extends TestCase $service->setStatus('down', 'Server error'); $this->assertSame('down', $service->getStatus()); $this->assertSame('Server error', $service->getMessage()); + $this->assertInstanceOf(\DateTimeImmutable::class, $service->getUpdatedAt()); + } + + public function testSetStatusSameStatus(): void + { + $service = $this->createService(); + $historyBefore = $service->getStatusHistory()->count(); + $service->setStatus('up', 'Still up'); + $this->assertSame($historyBefore, $service->getStatusHistory()->count()); } public function testExternal(): void diff --git a/tests/Entity/UserExtendedTest.php b/tests/Entity/UserExtendedTest.php index 414ec72..9894d27 100644 --- a/tests/Entity/UserExtendedTest.php +++ b/tests/Entity/UserExtendedTest.php @@ -92,6 +92,25 @@ class UserExtendedTest extends TestCase $this->assertSame('avatar.jpg', $user->getAvatar()); } + public function testAvatarFile(): void + { + $user = $this->createUser(); + $this->assertNull($user->getAvatarFile()); + + $tmpFile = tempnam(sys_get_temp_dir(), 'avatar_'); + file_put_contents($tmpFile, 'fake'); + $file = new \Symfony\Component\HttpFoundation\File\File($tmpFile); + + $result = $user->setAvatarFile($file); + $this->assertSame($file, $user->getAvatarFile()); + $this->assertSame($user, $result); + + $user->setAvatarFile(null); + $this->assertNull($user->getAvatarFile()); + + @unlink($tmpFile); + } + public function testFullName(): void { $user = $this->createUser(); diff --git a/tests/MessageHandler/AppLogMessageHandlerTest.php b/tests/MessageHandler/AppLogMessageHandlerTest.php new file mode 100644 index 0000000..fdb4644 --- /dev/null +++ b/tests/MessageHandler/AppLogMessageHandlerTest.php @@ -0,0 +1,47 @@ +setEmail('t@t.com'); + $user->setFirstName('T'); + $user->setLastName('T'); + $user->setPassword('h'); + + $userRepo = $this->createStub(UserRepository::class); + $userRepo->method('find')->willReturn($user); + + $em = $this->createMock(EntityManagerInterface::class); + $em->expects($this->once())->method('persist')->with($this->isInstanceOf(AppLog::class)); + $em->expects($this->once())->method('flush'); + + $handler = new AppLogMessageHandler($em, $userRepo, 'test-secret'); + $message = new AppLogMessage('GET', '/admin', 'app_admin_index', 'Consultation', 1, '127.0.0.1'); + $handler($message); + } + + public function testInvokeWithoutUser(): void + { + $userRepo = $this->createStub(UserRepository::class); + + $em = $this->createMock(EntityManagerInterface::class); + $em->expects($this->once())->method('persist')->with($this->isInstanceOf(AppLog::class)); + $em->expects($this->once())->method('flush'); + + $handler = new AppLogMessageHandler($em, $userRepo, 'test-secret'); + $message = new AppLogMessage('POST', '/admin/sync', 'app_admin_sync_all', 'Synchronisation', null, '10.0.0.1'); + $handler($message); + } +} diff --git a/tests/MessageHandler/MeilisearchSyncMessageHandlerTest.php b/tests/MessageHandler/MeilisearchSyncMessageHandlerTest.php new file mode 100644 index 0000000..6dbe79d --- /dev/null +++ b/tests/MessageHandler/MeilisearchSyncMessageHandlerTest.php @@ -0,0 +1,165 @@ +createStub(MeilisearchService::class), + $customerRepo ?? $this->createStub(CustomerRepository::class), + $revendeurRepo ?? $this->createStub(RevendeurRepository::class), + $priceRepo ?? $this->createStub(PriceAutomaticRepository::class), + ); + } + + public function testRemoveCustomer(): void + { + $meilisearch = $this->createMock(MeilisearchService::class); + $meilisearch->expects($this->once())->method('removeCustomer')->with(42); + + $handler = $this->createHandler(meilisearch: $meilisearch); + $handler(new MeilisearchSyncMessage(MeilisearchSyncMessage::TYPE_CUSTOMER, 42, 'remove')); + } + + public function testRemoveRevendeur(): void + { + $meilisearch = $this->createMock(MeilisearchService::class); + $meilisearch->expects($this->once())->method('removeRevendeur')->with(10); + + $handler = $this->createHandler(meilisearch: $meilisearch); + $handler(new MeilisearchSyncMessage(MeilisearchSyncMessage::TYPE_REVENDEUR, 10, 'remove')); + } + + public function testRemovePrice(): void + { + $meilisearch = $this->createMock(MeilisearchService::class); + $meilisearch->expects($this->once())->method('removePrice')->with(5); + + $handler = $this->createHandler(meilisearch: $meilisearch); + $handler(new MeilisearchSyncMessage(MeilisearchSyncMessage::TYPE_PRICE, 5, 'remove')); + } + + public function testRemoveUnknownType(): void + { + $meilisearch = $this->createStub(MeilisearchService::class); + $handler = $this->createHandler(meilisearch: $meilisearch); + $handler(new MeilisearchSyncMessage('unknown', 1, 'remove')); + $this->assertTrue(true); + } + + public function testIndexCustomer(): void + { + $user = new User(); + $user->setEmail('t@t.com'); + $user->setFirstName('T'); + $user->setLastName('T'); + $user->setPassword('h'); + $customer = new Customer($user); + + $customerRepo = $this->createStub(CustomerRepository::class); + $customerRepo->method('find')->willReturn($customer); + + $meilisearch = $this->createMock(MeilisearchService::class); + $meilisearch->expects($this->once())->method('indexCustomer')->with($customer); + + $handler = $this->createHandler(meilisearch: $meilisearch, customerRepo: $customerRepo); + $handler(new MeilisearchSyncMessage(MeilisearchSyncMessage::TYPE_CUSTOMER, 1)); + } + + public function testIndexCustomerNotFound(): void + { + $customerRepo = $this->createStub(CustomerRepository::class); + $customerRepo->method('find')->willReturn(null); + + $meilisearch = $this->createMock(MeilisearchService::class); + $meilisearch->expects($this->never())->method('indexCustomer'); + + $handler = $this->createHandler(meilisearch: $meilisearch, customerRepo: $customerRepo); + $handler(new MeilisearchSyncMessage(MeilisearchSyncMessage::TYPE_CUSTOMER, 999)); + } + + public function testIndexRevendeur(): void + { + $user = new User(); + $user->setEmail('r@t.com'); + $user->setFirstName('R'); + $user->setLastName('T'); + $user->setPassword('h'); + $revendeur = new Revendeur($user, 'REV-001'); + + $revendeurRepo = $this->createStub(RevendeurRepository::class); + $revendeurRepo->method('find')->willReturn($revendeur); + + $meilisearch = $this->createMock(MeilisearchService::class); + $meilisearch->expects($this->once())->method('indexRevendeur')->with($revendeur); + + $handler = $this->createHandler(meilisearch: $meilisearch, revendeurRepo: $revendeurRepo); + $handler(new MeilisearchSyncMessage(MeilisearchSyncMessage::TYPE_REVENDEUR, 1)); + } + + public function testIndexRevendeurNotFound(): void + { + $revendeurRepo = $this->createStub(RevendeurRepository::class); + $revendeurRepo->method('find')->willReturn(null); + + $meilisearch = $this->createMock(MeilisearchService::class); + $meilisearch->expects($this->never())->method('indexRevendeur'); + + $handler = $this->createHandler(meilisearch: $meilisearch, revendeurRepo: $revendeurRepo); + $handler(new MeilisearchSyncMessage(MeilisearchSyncMessage::TYPE_REVENDEUR, 999)); + } + + public function testIndexPrice(): void + { + $price = new PriceAutomatic(); + $price->setType('esyweb'); + $price->setTitle('T'); + $price->setPriceHt('1.00'); + + $priceRepo = $this->createStub(PriceAutomaticRepository::class); + $priceRepo->method('find')->willReturn($price); + + $meilisearch = $this->createMock(MeilisearchService::class); + $meilisearch->expects($this->once())->method('indexPrice')->with($price); + + $handler = $this->createHandler(meilisearch: $meilisearch, priceRepo: $priceRepo); + $handler(new MeilisearchSyncMessage(MeilisearchSyncMessage::TYPE_PRICE, 1)); + } + + public function testIndexPriceNotFound(): void + { + $priceRepo = $this->createStub(PriceAutomaticRepository::class); + $priceRepo->method('find')->willReturn(null); + + $meilisearch = $this->createMock(MeilisearchService::class); + $meilisearch->expects($this->never())->method('indexPrice'); + + $handler = $this->createHandler(meilisearch: $meilisearch, priceRepo: $priceRepo); + $handler(new MeilisearchSyncMessage(MeilisearchSyncMessage::TYPE_PRICE, 999)); + } + + public function testIndexUnknownType(): void + { + $handler = $this->createHandler(); + $handler(new MeilisearchSyncMessage('unknown', 1)); + $this->assertTrue(true); + } +}