1package identity
2
3import (
4 "context"
5 "testing"
6
7 "github.com/bluesky-social/indigo/atproto/syntax"
8
9 "github.com/stretchr/testify/assert"
10)
11
12func TestMockDirectory(t *testing.T) {
13 var err error
14 assert := assert.New(t)
15 ctx := context.Background()
16 c := NewMockDirectory()
17 id1 := Identity{
18 DID: syntax.DID("did:plc:abc111"),
19 Handle: syntax.Handle("handle.example.com"),
20 }
21 id2 := Identity{
22 DID: syntax.DID("did:plc:abc222"),
23 Handle: syntax.HandleInvalid,
24 }
25 id3 := Identity{
26 DID: syntax.DID("did:plc:abc333"),
27 Handle: syntax.Handle("handle3.example.com"),
28 }
29
30 // first, empty directory
31 _, err = c.LookupHandle(ctx, syntax.Handle("handle.example.com"))
32 assert.ErrorIs(err, ErrHandleNotFound)
33 _, err = c.LookupDID(ctx, syntax.DID("did:plc:abc123"))
34 assert.ErrorIs(err, ErrDIDNotFound)
35
36 c.Insert(id1)
37 c.Insert(id2)
38 c.Insert(id3)
39
40 out, err := c.LookupHandle(ctx, syntax.Handle("handle.example.com"))
41 assert.NoError(err)
42 assert.Equal(&id1, out)
43 out, err = c.LookupDID(ctx, syntax.DID("did:plc:abc111"))
44 assert.NoError(err)
45 assert.Equal(&id1, out)
46
47 out, err = c.LookupDID(ctx, syntax.DID("did:plc:abc222"))
48 assert.NoError(err)
49 assert.True(out.Handle.IsInvalidHandle())
50
51 _, err = c.LookupHandle(ctx, syntax.HandleInvalid)
52 assert.ErrorIs(err, ErrHandleNotFound)
53 _, err = c.LookupDID(ctx, syntax.DID("did:plc:abc999"))
54 assert.ErrorIs(err, ErrDIDNotFound)
55
56 did, err := c.ResolveHandle(ctx, syntax.Handle("handle.example.com"))
57 assert.NoError(err)
58 assert.Equal(id1.DID, did)
59 _, err = c.ResolveHandle(ctx, syntax.Handle("notfound.example.com"))
60 assert.ErrorIs(err, ErrHandleNotFound)
61
62 _, err = c.ResolveDID(ctx, syntax.DID("did:plc:abc222"))
63 assert.NoError(err)
64 // TODO: verify structure matches
65
66 _, err = c.ResolveDID(ctx, syntax.DID("did:plc:abc999"))
67 assert.ErrorIs(err, ErrDIDNotFound)
68
69 // handle lookups should be case-insensitive
70 _, err = c.ResolveHandle(ctx, syntax.Handle("handle.EXAMPLE.com"))
71 assert.NoError(err)
72 assert.Equal(id1.DID, did)
73}