Parse and validate AT Protocol Lexicons with DTO generation for Laravel
1<?php
2
3namespace SocialDept\AtpSchema\Tests\Unit\Validation\Rules;
4
5use Orchestra\Testbench\TestCase;
6use SocialDept\AtpSchema\Validation\Rules\Nsid;
7
8class NsidTest extends TestCase
9{
10 protected Nsid $rule;
11
12 protected function setUp(): void
13 {
14 parent::setUp();
15
16 $this->rule = new Nsid();
17 }
18
19 public function test_it_validates_valid_nsid(): void
20 {
21 $valid = 'app.bsky.feed.post';
22
23 $failed = false;
24 $this->rule->validate('nsid', $valid, function () use (&$failed) {
25 $failed = true;
26 });
27
28 $this->assertFalse($failed);
29 }
30
31 public function test_it_rejects_invalid_nsid(): void
32 {
33 $invalid = 'invalid-nsid';
34
35 $failed = false;
36 $this->rule->validate('nsid', $invalid, function () use (&$failed) {
37 $failed = true;
38 });
39
40 $this->assertTrue($failed);
41 }
42
43 public function test_it_rejects_non_string(): void
44 {
45 $failed = false;
46 $this->rule->validate('nsid', 123, function () use (&$failed) {
47 $failed = true;
48 });
49
50 $this->assertTrue($failed);
51 }
52
53 public function test_it_validates_various_nsids(): void
54 {
55 $validNsids = [
56 'com.example.test',
57 'app.bsky.feed.post',
58 'io.github.user.action',
59 ];
60
61 foreach ($validNsids as $nsid) {
62 $failed = false;
63 $this->rule->validate('nsid', $nsid, function () use (&$failed) {
64 $failed = true;
65 });
66
67 $this->assertFalse($failed, "Expected {$nsid} to be valid");
68 }
69 }
70}