first commit
This commit is contained in:
93
tests/Shared/DateParserTest.php
Normal file
93
tests/Shared/DateParserTest.php
Normal file
@@ -0,0 +1,93 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Tests\Shared;
|
||||
|
||||
use App\Shared\Util\DateParser;
|
||||
use DateTime;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Tests unitaires pour DateParser::parse().
|
||||
*
|
||||
* Couvre la conversion de valeurs brutes de base de données en DateTime,
|
||||
* ainsi que les cas silencieux (null, chaîne vide, valeur invalide).
|
||||
*/
|
||||
final class DateParserTest extends TestCase
|
||||
{
|
||||
|
||||
// ── Valeurs valides ────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Une date au format SQLite standard doit produire un DateTime correct.
|
||||
*/
|
||||
public function testStandardSqliteDate(): void
|
||||
{
|
||||
$result = DateParser::parse('2024-06-15 10:30:00');
|
||||
|
||||
$this->assertInstanceOf(DateTime::class, $result);
|
||||
$this->assertSame('2024-06-15', $result->format('Y-m-d'));
|
||||
$this->assertSame('10:30:00', $result->format('H:i:s'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Une date ISO 8601 doit être correctement parsée.
|
||||
*/
|
||||
public function testIso8601Date(): void
|
||||
{
|
||||
$result = DateParser::parse('2024-01-01T00:00:00');
|
||||
|
||||
$this->assertInstanceOf(DateTime::class, $result);
|
||||
$this->assertSame('2024-01-01', $result->format('Y-m-d'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Une date seule (sans heure) doit être parsée correctement.
|
||||
*/
|
||||
public function testDateOnly(): void
|
||||
{
|
||||
$result = DateParser::parse('2024-12-31');
|
||||
|
||||
$this->assertInstanceOf(DateTime::class, $result);
|
||||
$this->assertSame('2024-12-31', $result->format('Y-m-d'));
|
||||
}
|
||||
|
||||
|
||||
// ── Valeurs silencieuses — doit retourner null sans exception ────
|
||||
|
||||
/**
|
||||
* null doit retourner null.
|
||||
*/
|
||||
public function testNullReturnsNull(): void
|
||||
{
|
||||
$this->assertNull(DateParser::parse(null));
|
||||
}
|
||||
|
||||
/**
|
||||
* Une chaîne vide doit retourner null.
|
||||
*/
|
||||
public function testEmptyStringReturnsNull(): void
|
||||
{
|
||||
$this->assertNull(DateParser::parse(''));
|
||||
}
|
||||
|
||||
/**
|
||||
* Une valeur non parseable doit retourner null sans lever d'exception.
|
||||
*/
|
||||
public function testInvalidValueReturnsNull(): void
|
||||
{
|
||||
$this->assertNull(DateParser::parse('pas-une-date'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Un entier doit être interprété comme un timestamp si valide,
|
||||
* ou retourner null si la conversion échoue.
|
||||
* Ici on vérifie simplement qu'aucune exception n'est levée.
|
||||
*/
|
||||
public function testIntegerThrowsNoException(): void
|
||||
{
|
||||
$result = DateParser::parse(0);
|
||||
// Pas d'assertion sur la valeur — on vérifie juste la robustesse
|
||||
$this->assertTrue($result === null || $result instanceof DateTime);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user