Parse and validate AT Protocol Lexicons with DTO generation for Laravel
at main 94 lines 2.3 kB view raw
1<?php 2 3namespace SocialDept\AtpSchema\Tests\Unit\Validation\Rules; 4 5use Orchestra\Testbench\TestCase; 6use SocialDept\AtpSchema\Validation\Rules\AtDatetime; 7 8class AtDatetimeTest extends TestCase 9{ 10 protected AtDatetime $rule; 11 12 protected function setUp(): void 13 { 14 parent::setUp(); 15 16 $this->rule = new AtDatetime(); 17 } 18 19 public function test_it_validates_valid_datetime_with_z(): void 20 { 21 $valid = '2024-01-01T00:00:00Z'; 22 23 $failed = false; 24 $this->rule->validate('datetime', $valid, function () use (&$failed) { 25 $failed = true; 26 }); 27 28 $this->assertFalse($failed); 29 } 30 31 public function test_it_validates_datetime_with_milliseconds(): void 32 { 33 $valid = '2024-01-01T12:34:56.789Z'; 34 35 $failed = false; 36 $this->rule->validate('datetime', $valid, function () use (&$failed) { 37 $failed = true; 38 }); 39 40 $this->assertFalse($failed); 41 } 42 43 public function test_it_validates_various_datetime_formats(): void 44 { 45 $validDatetimes = [ 46 '2024-01-01T00:00:00Z', 47 '2024-12-31T23:59:59Z', 48 '2024-06-15T12:30:45Z', 49 ]; 50 51 foreach ($validDatetimes as $datetime) { 52 $failed = false; 53 $this->rule->validate('datetime', $datetime, function () use (&$failed) { 54 $failed = true; 55 }); 56 57 $this->assertFalse($failed, "Expected {$datetime} to be valid"); 58 } 59 } 60 61 public function test_it_rejects_invalid_datetime(): void 62 { 63 $invalid = 'not-a-datetime'; 64 65 $failed = false; 66 $this->rule->validate('datetime', $invalid, function () use (&$failed) { 67 $failed = true; 68 }); 69 70 $this->assertTrue($failed); 71 } 72 73 public function test_it_rejects_datetime_without_timezone(): void 74 { 75 $invalid = '2024-01-01T00:00:00'; 76 77 $failed = false; 78 $this->rule->validate('datetime', $invalid, function () use (&$failed) { 79 $failed = true; 80 }); 81 82 $this->assertTrue($failed); 83 } 84 85 public function test_it_rejects_non_string(): void 86 { 87 $failed = false; 88 $this->rule->validate('datetime', 123, function () use (&$failed) { 89 $failed = true; 90 }); 91 92 $this->assertTrue($failed); 93 } 94}