Parse and validate AT Protocol Lexicons with DTO generation for Laravel
at main 110 lines 2.6 kB view raw
1<?php 2 3namespace SocialDept\AtpSchema\Tests\Unit\Validation\Rules; 4 5use Orchestra\Testbench\TestCase; 6use SocialDept\AtpSchema\Validation\Rules\Language; 7 8class LanguageTest extends TestCase 9{ 10 protected Language $rule; 11 12 protected function setUp(): void 13 { 14 parent::setUp(); 15 16 $this->rule = new Language(); 17 } 18 19 public function test_it_validates_simple_language_code(): void 20 { 21 $valid = 'en'; 22 23 $failed = false; 24 $this->rule->validate('language', $valid, function () use (&$failed) { 25 $failed = true; 26 }); 27 28 $this->assertFalse($failed); 29 } 30 31 public function test_it_validates_language_with_region(): void 32 { 33 $valid = 'en-US'; 34 35 $failed = false; 36 $this->rule->validate('language', $valid, function () use (&$failed) { 37 $failed = true; 38 }); 39 40 $this->assertFalse($failed); 41 } 42 43 public function test_it_validates_language_with_script(): void 44 { 45 $valid = 'zh-Hans'; 46 47 $failed = false; 48 $this->rule->validate('language', $valid, function () use (&$failed) { 49 $failed = true; 50 }); 51 52 $this->assertFalse($failed); 53 } 54 55 public function test_it_validates_complex_language_tags(): void 56 { 57 $validLanguages = [ 58 'en', 59 'en-US', 60 'zh-Hans', 61 'zh-Hans-CN', 62 'en-GB', 63 'es-419', 64 'fr-CA', 65 ]; 66 67 foreach ($validLanguages as $language) { 68 $failed = false; 69 $this->rule->validate('language', $language, function () use (&$failed) { 70 $failed = true; 71 }); 72 73 $this->assertFalse($failed, "Expected {$language} to be valid"); 74 } 75 } 76 77 public function test_it_rejects_invalid_language_code(): void 78 { 79 $invalid = 'not-a-language-123'; 80 81 $failed = false; 82 $this->rule->validate('language', $invalid, function () use (&$failed) { 83 $failed = true; 84 }); 85 86 $this->assertTrue($failed); 87 } 88 89 public function test_it_rejects_too_short_code(): void 90 { 91 $invalid = 'e'; 92 93 $failed = false; 94 $this->rule->validate('language', $invalid, function () use (&$failed) { 95 $failed = true; 96 }); 97 98 $this->assertTrue($failed); 99 } 100 101 public function test_it_rejects_non_string(): void 102 { 103 $failed = false; 104 $this->rule->validate('language', 123, function () use (&$failed) { 105 $failed = true; 106 }); 107 108 $this->assertTrue($failed); 109 } 110}