Files
e-ticket/tests/Entity/EmailTrackingTest.php
Serreau Jovann dc3d464b17 Add PHPUnit tests with coverage for all src classes
- 21 test files covering controllers, services, entities, enums, messages
- CI: add test job with Xdebug coverage (clover + text)
- SonarQube: configure coverage report path and test sources

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 22:50:23 +01:00

43 lines
1.4 KiB
PHP

<?php
namespace App\Tests\Entity;
use App\Entity\EmailTracking;
use PHPUnit\Framework\TestCase;
class EmailTrackingTest extends TestCase
{
public function testConstructorSetsFields(): void
{
$tracking = new EmailTracking('msg-123', 'user@example.com', 'Hello');
self::assertSame('msg-123', $tracking->getMessageId());
self::assertSame('user@example.com', $tracking->getRecipient());
self::assertSame('Hello', $tracking->getSubject());
self::assertSame('sent', $tracking->getState());
self::assertInstanceOf(\DateTimeImmutable::class, $tracking->getSentAt());
self::assertNull($tracking->getOpenedAt());
self::assertNull($tracking->getId());
}
public function testMarkAsOpenedTransitionsState(): void
{
$tracking = new EmailTracking('msg-123', 'user@example.com', 'Hello');
$tracking->markAsOpened();
self::assertSame('opened', $tracking->getState());
self::assertInstanceOf(\DateTimeImmutable::class, $tracking->getOpenedAt());
}
public function testMarkAsOpenedDoesNotTransitionTwice(): void
{
$tracking = new EmailTracking('msg-123', 'user@example.com', 'Hello');
$tracking->markAsOpened();
$firstOpenedAt = $tracking->getOpenedAt();
$tracking->markAsOpened();
self::assertSame($firstOpenedAt, $tracking->getOpenedAt());
}
}