Resolve AT Protocol DIDs, handles, and schemas with intelligent caching for Laravel
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}