1package identity
2
3import (
4 "encoding/json"
5 "io"
6 "os"
7 "testing"
8
9 "github.com/stretchr/testify/assert"
10)
11
12func TestDIDDocParse(t *testing.T) {
13 assert := assert.New(t)
14 docFiles := []string{
15 "testdata/did_plc_doc.json",
16 "testdata/did_plc_doc_legacy.json",
17 }
18 for _, path := range docFiles {
19 f, err := os.Open(path)
20 if err != nil {
21 t.Fatal(err)
22 }
23 defer f.Close()
24
25 docBytes, err := io.ReadAll(f)
26 if err != nil {
27 t.Fatal(err)
28 }
29
30 var doc DIDDocument
31 err = json.Unmarshal(docBytes, &doc)
32 assert.NoError(err)
33
34 id := ParseIdentity(&doc)
35
36 assert.Equal("did:plc:ewvi7nxzyoun6zhxrhs64oiz", id.DID.String())
37 assert.Equal([]string{"at://atproto.com"}, id.AlsoKnownAs)
38 pk, err := id.PublicKey()
39 assert.NoError(err)
40 assert.NotNil(pk)
41 assert.Equal("https://bsky.social", id.PDSEndpoint())
42 hdl, err := id.DeclaredHandle()
43 assert.NoError(err)
44 assert.Equal("atproto.com", hdl.String())
45
46 // NOTE: doesn't work if 'id' was in long form
47 if path != "testdata/did_plc_doc_legacy.json" {
48 assert.Equal(doc, id.DIDDocument())
49 }
50 }
51}
52
53func TestDIDDocFeedGenParse(t *testing.T) {
54 assert := assert.New(t)
55 f, err := os.Open("testdata/did_web_doc.json")
56 if err != nil {
57 t.Fatal(err)
58 }
59 defer f.Close()
60
61 docBytes, err := io.ReadAll(f)
62 if err != nil {
63 t.Fatal(err)
64 }
65
66 var doc DIDDocument
67 err = json.Unmarshal(docBytes, &doc)
68 assert.NoError(err)
69
70 id := ParseIdentity(&doc)
71
72 assert.Equal("did:web:discover.bsky.social", id.DID.String())
73 assert.Equal([]string{}, id.AlsoKnownAs)
74 pk, err := id.PublicKey()
75 assert.Error(err)
76 assert.ErrorIs(err, ErrKeyNotDeclared)
77 assert.Nil(pk)
78 assert.Equal("", id.PDSEndpoint())
79 hdl, err := id.DeclaredHandle()
80 assert.Error(err)
81 assert.Empty(hdl)
82 svc, ok := id.Services["bsky_fg"]
83 assert.True(ok)
84 assert.Equal("https://discover.bsky.social", svc.URL)
85}