first commit
This commit is contained in:
121
tests/Shared/SlugHelperTest.php
Normal file
121
tests/Shared/SlugHelperTest.php
Normal file
@@ -0,0 +1,121 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Tests\Shared;
|
||||
|
||||
use App\Shared\Util\SlugHelper;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Tests unitaires pour SlugHelper::generate().
|
||||
*
|
||||
* Couvre la translittération ASCII, la normalisation en minuscules,
|
||||
* le remplacement des caractères non alphanumériques, et les cas limites.
|
||||
*/
|
||||
final class SlugHelperTest extends TestCase
|
||||
{
|
||||
|
||||
// ── Cas nominaux ───────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Une chaîne ASCII simple doit être mise en minuscules.
|
||||
*/
|
||||
public function testSimpleAsciiString(): void
|
||||
{
|
||||
$this->assertSame('hello-world', SlugHelper::generate('Hello World'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Les caractères accentués doivent être translittérés en ASCII.
|
||||
*/
|
||||
public function testAccentedCharacters(): void
|
||||
{
|
||||
$this->assertSame('ete-en-foret', SlugHelper::generate('Été en forêt'));
|
||||
}
|
||||
|
||||
/**
|
||||
* La cédille et les caractères spéciaux courants doivent être translittérés.
|
||||
*/
|
||||
public function testCedillaAndSpecialCharacters(): void
|
||||
{
|
||||
$this->assertSame('ca-la', SlugHelper::generate('Ça & Là !'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Les tirets multiples consécutifs doivent être fusionnés en un seul.
|
||||
*/
|
||||
public function testMultipleConsecutiveHyphens(): void
|
||||
{
|
||||
$this->assertSame('foo-bar', SlugHelper::generate('foo bar'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Les tirets en début et fin de slug doivent être supprimés.
|
||||
*/
|
||||
public function testLeadingAndTrailingHyphen(): void
|
||||
{
|
||||
$this->assertSame('foo', SlugHelper::generate(' foo '));
|
||||
}
|
||||
|
||||
/**
|
||||
* Les chiffres doivent être conservés dans le slug.
|
||||
*/
|
||||
public function testDigitsPreserved(): void
|
||||
{
|
||||
$this->assertSame('article-2024', SlugHelper::generate('Article 2024'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Les tirets déjà présents dans la chaîne doivent être conservés (fusionnés si doublons).
|
||||
*/
|
||||
public function testHyphensInSourceString(): void
|
||||
{
|
||||
$this->assertSame('mon-article', SlugHelper::generate('mon-article'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Une chaîne entièrement en majuscules doit être passée en minuscules.
|
||||
*/
|
||||
public function testUppercaseString(): void
|
||||
{
|
||||
$this->assertSame('php-est-super', SlugHelper::generate('PHP EST SUPER'));
|
||||
}
|
||||
|
||||
|
||||
// ── Cas limites ────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Une chaîne vide doit retourner une chaîne vide.
|
||||
*/
|
||||
public function testEmptyString(): void
|
||||
{
|
||||
$this->assertSame('', SlugHelper::generate(''));
|
||||
}
|
||||
|
||||
/**
|
||||
* Une chaîne composée uniquement d'espaces doit retourner une chaîne vide.
|
||||
*/
|
||||
public function testSpacesOnlyString(): void
|
||||
{
|
||||
$this->assertSame('', SlugHelper::generate(' '));
|
||||
}
|
||||
|
||||
/**
|
||||
* Une chaîne composée uniquement de caractères spéciaux sans équivalent ASCII
|
||||
* doit retourner une chaîne vide.
|
||||
*/
|
||||
public function testCharactersWithoutAsciiEquivalent(): void
|
||||
{
|
||||
// Les caractères CJK n'ont pas d'équivalent ASCII//TRANSLIT
|
||||
$result = SlugHelper::generate('日本語');
|
||||
$this->assertSame('', $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Un slug déjà valide doit rester identique.
|
||||
*/
|
||||
public function testAlreadyValidSlug(): void
|
||||
{
|
||||
$this->assertSame('mon-slug-valide', SlugHelper::generate('mon-slug-valide'));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user