56 lines
1.9 KiB
PHP
56 lines
1.9 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\Media;
|
|
|
|
use App\Media\Media;
|
|
use DateTime;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
#[\PHPUnit\Framework\Attributes\AllowMockObjectsWithoutExpectations]
|
|
|
|
final class MediaModelTest extends TestCase
|
|
{
|
|
public function testConstructAndGettersExposeMediaData(): void
|
|
{
|
|
$createdAt = new DateTime('2026-03-01 10:00:00');
|
|
$media = new Media(8, 'file.webp', '/media/file.webp', 'abc123', 12, $createdAt);
|
|
|
|
self::assertSame(8, $media->getId());
|
|
self::assertSame('file.webp', $media->getFilename());
|
|
self::assertSame('/media/file.webp', $media->getUrl());
|
|
self::assertSame('abc123', $media->getHash());
|
|
self::assertSame(12, $media->getUserId());
|
|
self::assertSame($createdAt, $media->getCreatedAt());
|
|
}
|
|
|
|
public function testFromArrayHydratesMedia(): void
|
|
{
|
|
$media = Media::fromArray([
|
|
'id' => '9',
|
|
'filename' => 'stored.webp',
|
|
'url' => '/media/stored.webp',
|
|
'hash' => 'hash-9',
|
|
'user_id' => '3',
|
|
'created_at' => '2026-03-02 12:30:00',
|
|
]);
|
|
|
|
self::assertSame(9, $media->getId());
|
|
self::assertSame('stored.webp', $media->getFilename());
|
|
self::assertSame('/media/stored.webp', $media->getUrl());
|
|
self::assertSame('hash-9', $media->getHash());
|
|
self::assertSame(3, $media->getUserId());
|
|
self::assertSame('2026-03-02 12:30:00', $media->getCreatedAt()->format('Y-m-d H:i:s'));
|
|
}
|
|
|
|
public function testCreatedAtDefaultsToNowWhenMissing(): void
|
|
{
|
|
$before = new DateTime('-2 seconds');
|
|
$media = new Media(1, 'f.webp', '/media/f.webp', 'h', null);
|
|
$after = new DateTime('+2 seconds');
|
|
|
|
self::assertGreaterThanOrEqual($before->getTimestamp(), $media->getCreatedAt()->getTimestamp());
|
|
self::assertLessThanOrEqual($after->getTimestamp(), $media->getCreatedAt()->getTimestamp());
|
|
}
|
|
}
|