ldc-boutique-cnc-sable/tests/Unit/App/Actions/Pages/UpdatePageInputTest.php

99 lines
2.7 KiB
PHP
Raw Permalink Normal View History

<?php
declare(strict_types=1);
use App\Actions\Pages\UpdatePageInput;
use App\Models\Page;
use Domain\Models\ValueObjects\SeoMetadata;
describe('UpdatePageInput', function (): void {
it('creates a valid UpdatePageInput instance', function (): void {
// GIVEN
$page = new Page();
$seo = new SeoMetadata('Titre SEO valide', 'Description SEO valide');
$title = 'Titre de page';
$content = '<p>Contenu HTML de la page</p>';
// WHEN
$input = new UpdatePageInput(
page: $page,
seo: $seo,
title: $title,
content: $content,
);
// THEN
expect($input->page)->toBe($page)
->and($input->seo)->toBe($seo)
->and($input->title)->toBe($title)
->and($input->content)->toBe($content);
});
it('allows null title', function (): void {
// GIVEN
$page = new Page();
$seo = new SeoMetadata('Titre SEO valide', 'Description SEO valide');
$content = '<p>Contenu HTML</p>';
// WHEN
$input = new UpdatePageInput(
page: $page,
seo: $seo,
title: null,
content: $content,
);
// THEN
expect($input->title)->toBeNull();
});
it('throws when title is empty string', function (): void {
// GIVEN
$page = new Page();
$seo = new SeoMetadata('Titre SEO valide', 'Description SEO valide');
// WHEN
expect(fn () => new UpdatePageInput(
page: $page,
seo: $seo,
title: ' ',
content: '<p>Contenu</p>',
))
// THEN
->toThrow(\InvalidArgumentException::class);
});
it('throws when title exceeds 255 characters', function (): void {
// GIVEN
$page = new Page();
$seo = new SeoMetadata('Titre SEO valide', 'Description SEO valide');
$longTitle = str_repeat('a', 256);
// WHEN
expect(fn () => new UpdatePageInput(
page: $page,
seo: $seo,
title: $longTitle,
content: '<p>Contenu</p>',
))
// THEN
->toThrow(\InvalidArgumentException::class);
});
it('throws when content is empty', function (): void {
// GIVEN
$page = new Page();
$seo = new SeoMetadata('Titre SEO valide', 'Description SEO valide');
// WHEN
expect(fn () => new UpdatePageInput(
page: $page,
seo: $seo,
title: 'Titre',
content: ' ',
))
// THEN
->toThrow(\InvalidArgumentException::class);
});
});