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)); } }