fork of indigo with slightly nicer lexgen
at main 1.8 kB view raw
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}