Files
SGF/tests/Unit/CalendarDimensionTest.php
T
2026-11-11 09:00:17 +02:00

57 lines
2.3 KiB
PHP

<?php
namespace Tests\Unit;
use App\Console\Commands\PopulateDimTempo;
use App\Services\Sgc\CalendarDimension;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Console\Tester\CommandTester;
final class CalendarDimensionTest extends TestCase
{
private function tester(): CommandTester
{
$command = new PopulateDimTempo;
$command->setLaravel(new \Illuminate\Foundation\Application(dirname(__DIR__, 2)));
return new CommandTester($command);
}
public function test_ten_complete_years_have_unique_dates_and_correct_boundaries(): void
{
$days = iterator_to_array(CalendarDimension::days(2026, 10));
self::assertCount(3652, $days);
self::assertSame('2026-01-01', $days[0]['data_completa']);
self::assertSame('2035-12-31', $days[array_key_last($days)]['data_completa']);
self::assertCount(3652, array_unique(array_column($days, 'data_id')));
$leap = array_values(array_filter($days, fn($d)=>$d['data_completa']==='2028-02-29'))[0];
self::assertSame(2, $leap['dia_semana']);
self::assertSame('Fevereiro', $leap['nome_mes']);
self::assertSame(1, $leap['trimestre']);
self::assertFalse($leap['eh_feriado']);
}
public function test_weekend_and_semester_fields_are_calendar_based(): void
{
$days = array_column(iterator_to_array(CalendarDimension::days(2026, 1)), null, 'data_completa');
self::assertFalse($days['2026-01-03']['eh_dia_util']);
self::assertFalse($days['2026-01-04']['eh_dia_util']);
self::assertTrue($days['2026-01-05']['eh_dia_util']);
self::assertSame(2, $days['2026-07-01']['semestre']);
self::assertSame(3, $days['2026-07-01']['trimestre']);
}
public function test_dry_run_never_needs_an_application_or_database(): void
{
$tester = $this->tester();
self::assertSame(0, $tester->execute(['--start-year'=>'2026', '--years'=>'10', '--dry-run'=>true]));
self::assertStringContainsString('3652', $tester->getDisplay());
}
public function test_invalid_range_is_refused_before_database_access(): void
{
$tester = $this->tester();
self::assertSame(2, $tester->execute(['--start-year'=>'2026', '--years'=>'-1']));
$this->expectException(\InvalidArgumentException::class);
iterator_to_array(CalendarDimension::days(9999, 2));
}
}