- Updated DataTableService to accept a Pagination object for pagination parameters. - Refactored paginateQuery method to utilize pageSize and pageNumber from Pagination. refactor: replace ActionExecutor with Executor in controller traits - Updated ChangesModelOrder, TogglesModelStar, and TogglesModelStatus traits to use Executor interface instead of ActionExecutor. feat: add PictureMetadata and Slug value objects - Introduced PictureMetadata for managing image metadata with validation. - Added Slug value object for slug generation and validation. feat: update breadcrumbs to support RangeDto - Modified breadcrumbs-bo.php to accept RangeDto in the edit route. test: add tests for RangesController - Added tests for accessing, creating, updating, and deleting ranges. - Included tests for toggling range status. test: add integration tests for range actions - Created tests for CreateRange, DeleteRange, and UpdateRange actions. - Validated input handling and database interactions. test: add unit tests for range input classes - Implemented tests for CreateRangeInput and UpdateRangeInput to validate input constraints. test: add unit tests for value objects - Added tests for PictureMetadata and Slug to ensure proper validation and instantiation. test: add unit tests for RangeDto - Created tests to verify RangeDto mapping from Range model. test: add unit tests for RangePolicy - Implemented tests for RangePolicy to validate permissions based on user roles.
68 lines
1.9 KiB
PHP
68 lines
1.9 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use Domain\Models\ValueObjects\Slug;
|
|
use InvalidArgumentException;
|
|
|
|
describe('Slug Value Object', function () {
|
|
test('it can be instantiated with a valid slug', function () {
|
|
// GIVEN
|
|
$validSlug = 'ma-belle-gamme';
|
|
|
|
// WHEN
|
|
$slug = new Slug($validSlug);
|
|
|
|
// THEN
|
|
expect($slug->value)->toBe('ma-belle-gamme')
|
|
->and((string) $slug)->toBe('ma-belle-gamme');
|
|
});
|
|
|
|
test('it throws when slug is empty', function () {
|
|
// GIVEN
|
|
$empty = ' ';
|
|
|
|
// WHEN & THEN
|
|
expect(fn () => new Slug($empty))
|
|
->toThrow(InvalidArgumentException::class, 'Slug cannot be empty.');
|
|
});
|
|
|
|
test('it throws when slug exceeds 255 characters', function () {
|
|
// GIVEN
|
|
$long = str_repeat('a', 256);
|
|
|
|
// WHEN & THEN
|
|
expect(fn () => new Slug($long))
|
|
->toThrow(InvalidArgumentException::class, 'Slug cannot exceed 255 characters.');
|
|
});
|
|
|
|
test('it throws when slug format is invalid', function () {
|
|
// GIVEN
|
|
$invalid = 'Invalid Slug With Spaces!';
|
|
|
|
// WHEN & THEN
|
|
expect(fn () => new Slug($invalid))
|
|
->toThrow(InvalidArgumentException::class, 'Slug format is invalid.');
|
|
});
|
|
|
|
test('it creates slug from raw string with fromString', function () {
|
|
// GIVEN
|
|
$raw = 'Nouvelle Gamme Spéciale 2026 !';
|
|
|
|
// WHEN
|
|
$slug = Slug::fromString($raw);
|
|
|
|
// THEN
|
|
expect($slug->value)->toBe('nouvelle-gamme-speciale-2026')
|
|
->and((string) $slug)->toBe('nouvelle-gamme-speciale-2026');
|
|
});
|
|
|
|
test('it throws fromString when string produces empty slug', function () {
|
|
// GIVEN
|
|
$raw = '??? !!!';
|
|
|
|
// WHEN & THEN
|
|
expect(fn () => Slug::fromString($raw))
|
|
->toThrow(InvalidArgumentException::class, 'Cannot generate a valid slug from given string.');
|
|
});
|
|
});
|