Resolve AT Protocol DIDs, handles, and schemas with intelligent caching for Laravel
at main 2.5 kB view raw
1<?php 2 3namespace SocialDept\AtpResolver\Tests\Unit; 4 5use PHPUnit\Framework\TestCase; 6use SocialDept\AtpResolver\Contracts\DidResolver; 7use SocialDept\AtpResolver\Data\DidDocument; 8use SocialDept\AtpResolver\Exceptions\DidResolutionException; 9use SocialDept\AtpResolver\Resolvers\DidResolverManager; 10 11class DidResolverManagerTest extends TestCase 12{ 13 public function test_it_supports_plc_method_by_default(): void 14 { 15 $manager = new DidResolverManager(); 16 17 $this->assertTrue($manager->supports('plc')); 18 } 19 20 public function test_it_supports_web_method_by_default(): void 21 { 22 $manager = new DidResolverManager(); 23 24 $this->assertTrue($manager->supports('web')); 25 } 26 27 public function test_it_does_not_support_unknown_methods(): void 28 { 29 $manager = new DidResolverManager(); 30 31 $this->assertFalse($manager->supports('unknown')); 32 } 33 34 public function test_it_can_register_custom_resolver(): void 35 { 36 $manager = new DidResolverManager(); 37 38 $customResolver = $this->createMock(DidResolver::class); 39 $customResolver->method('supports')->willReturn(true); 40 41 $manager->register('custom', $customResolver); 42 43 $this->assertTrue($manager->supports('custom')); 44 } 45 46 public function test_it_throws_exception_for_unsupported_method(): void 47 { 48 $this->expectException(DidResolutionException::class); 49 $this->expectExceptionMessage('Unsupported DID method: unknown'); 50 51 $manager = new DidResolverManager(); 52 $manager->resolve('did:unknown:abc123'); 53 } 54 55 public function test_it_throws_exception_for_invalid_did_format(): void 56 { 57 $this->expectException(DidResolutionException::class); 58 $this->expectExceptionMessage('Invalid DID format'); 59 60 $manager = new DidResolverManager(); 61 $manager->resolve('not-a-did'); 62 } 63 64 public function test_it_delegates_to_registered_resolver(): void 65 { 66 $manager = new DidResolverManager(); 67 68 $mockDocument = DidDocument::fromArray(['id' => 'did:custom:abc123']); 69 70 $customResolver = $this->createMock(DidResolver::class); 71 $customResolver->expects($this->once()) 72 ->method('resolve') 73 ->with('did:custom:abc123') 74 ->willReturn($mockDocument); 75 76 $manager->register('custom', $customResolver); 77 78 $result = $manager->resolve('did:custom:abc123'); 79 80 $this->assertSame($mockDocument, $result); 81 } 82}