44 lines
1.4 KiB
PHP
44 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace Tests\Unit;
|
|
|
|
use App\Support\DateRange;
|
|
use DateTime;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class DateRangeTest extends TestCase
|
|
{
|
|
public function test_a_single_day_counts_as_one(): void
|
|
{
|
|
$day = new DateTime('2026-07-16');
|
|
|
|
$this->assertSame(1, DateRange::inclusiveDays($day, $day));
|
|
}
|
|
|
|
public function test_both_ends_are_counted(): void
|
|
{
|
|
// An- und Abreisetag zählen beide mit.
|
|
$this->assertSame(2, DateRange::inclusiveDays(new DateTime('2026-07-16'), new DateTime('2026-07-17')));
|
|
$this->assertSame(5, DateRange::inclusiveDays(new DateTime('2026-07-16'), new DateTime('2026-07-20')));
|
|
}
|
|
|
|
public function test_the_order_of_the_arguments_does_not_matter(): void
|
|
{
|
|
$early = new DateTime('2026-07-16');
|
|
$late = new DateTime('2026-07-20');
|
|
|
|
$this->assertSame(
|
|
DateRange::inclusiveDays($early, $late),
|
|
DateRange::inclusiveDays($late, $early)
|
|
);
|
|
}
|
|
|
|
public function test_month_and_year_boundaries_are_handled(): void
|
|
{
|
|
$this->assertSame(3, DateRange::inclusiveDays(new DateTime('2026-07-30'), new DateTime('2026-08-01')));
|
|
$this->assertSame(3, DateRange::inclusiveDays(new DateTime('2026-12-31'), new DateTime('2027-01-02')));
|
|
// 2028 ist ein Schaltjahr.
|
|
$this->assertSame(2, DateRange::inclusiveDays(new DateTime('2028-02-28'), new DateTime('2028-02-29')));
|
|
}
|
|
}
|