| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- <?php
- namespace Tests\Unit\Helpers;
- use App\Helpers\DateHelper;
- use Carbon\Exceptions\InvalidDateException;
- use PHPUnit\Framework\TestCase;
- class DateHelperTest extends TestCase
- {
- public function test_excel_date_to_iso_date_converts_correctly(): void
- {
- // Excel date 44927 = 2023-01-01
- $this->assertEquals('2023-01-01', DateHelper::excelDateToISODate(44927));
- // Excel date 45292 = 2024-01-01
- $this->assertEquals('2024-01-01', DateHelper::excelDateToISODate(45292));
- // Excel date 25569 = 1970-01-01 (Unix epoch)
- $this->assertEquals('1970-01-01', DateHelper::excelDateToISODate(25569));
- }
- public function test_iso_date_to_excel_date_converts_correctly(): void
- {
- $this->assertEquals(44927, DateHelper::ISODateToExcelDate('2023-01-01'));
- $this->assertEquals(45292, DateHelper::ISODateToExcelDate('2024-01-01'));
- $this->assertEquals(25569, DateHelper::ISODateToExcelDate('1970-01-01'));
- }
- public function test_excel_date_conversion_is_reversible(): void
- {
- $excelDate = 45000;
- $isoDate = DateHelper::excelDateToISODate($excelDate);
- $backToExcel = DateHelper::ISODateToExcelDate($isoDate);
- $this->assertEquals($excelDate, $backToExcel);
- }
- public function test_get_human_date_returns_text_format_by_default(): void
- {
- $result = DateHelper::getHumanDate('2024-03-15');
- // Should contain month name in Russian
- $this->assertStringContainsString('марта', $result);
- $this->assertStringContainsString('15', $result);
- $this->assertStringContainsString('2024', $result);
- }
- public function test_get_human_date_returns_numeric_format_when_requested(): void
- {
- $result = DateHelper::getHumanDate('2024-03-15', true);
- $this->assertEquals('15.03.2024', $result);
- }
- public function test_is_date_validates_correct_dates(): void
- {
- $this->assertTrue(DateHelper::isDate('2024-01-01'));
- $this->assertTrue(DateHelper::isDate('2023-12-31'));
- $this->assertTrue(DateHelper::isDate('1990-06-15'));
- }
- public function test_is_date_rejects_invalid_dates(): void
- {
- $this->assertFalse(DateHelper::isDate('2024-13-01')); // Invalid month
- $this->assertFalse(DateHelper::isDate('2024-00-01')); // Invalid month
- $this->assertFalse(DateHelper::isDate('2024-01-32')); // Invalid day
- $this->assertFalse(DateHelper::isDate('24-01-01')); // Short year
- $this->assertFalse(DateHelper::isDate('01-01-2024')); // Wrong format
- $this->assertFalse(DateHelper::isDate('not-a-date'));
- }
- public function test_get_date_for_db_formats_correctly(): void
- {
- $this->assertEquals('2024-03-15', DateHelper::getDateForDB('March 15, 2024'));
- $this->assertEquals('2024-03-15', DateHelper::getDateForDB('15.03.2024'));
- }
- public function test_add_months_works_correctly(): void
- {
- $this->assertEquals('2024-04-01', DateHelper::addMonths('2024-01-01', 3));
- $this->assertEquals('2025-01-01', DateHelper::addMonths('2024-01-01', 12));
- $this->assertEquals('2023-10-01', DateHelper::addMonths('2024-01-01', -3));
- }
- public function test_get_date_of_week_returns_correct_date(): void
- {
- // Week 1 of 2024, Monday
- $result = DateHelper::getDateOfWeek(2024, 1, 1);
- $this->assertEquals('2024-01-01', $result);
- // Week 1 of 2024, Sunday
- $result = DateHelper::getDateOfWeek(2024, 1, 7);
- $this->assertEquals('2024-01-07', $result);
- }
- public function test_get_random_date_returns_valid_date(): void
- {
- $result = DateHelper::getRandomDate(1);
- $this->assertTrue(DateHelper::isDate($result));
- }
- public function test_get_random_date_throws_exception_for_invalid_years(): void
- {
- $this->expectException(InvalidDateException::class);
- DateHelper::getRandomDate(-1);
- }
- public function test_get_human_day_of_week_returns_russian_day_name(): void
- {
- // 2024-01-01 is Monday
- $result = DateHelper::getHumanDayOfWeek('2024-01-01');
- $this->assertEquals('Понедельник', $result);
- // 2024-01-07 is Sunday
- $result = DateHelper::getHumanDayOfWeek('2024-01-07');
- $this->assertEquals('Воскресенье', $result);
- }
- }
|