- 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>
43 lines
1.4 KiB
PHP
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());
|
|
}
|
|
}
|