This repository has no description
2.5 kB
83 lines
1package xrpc
2
3import (
4 "os"
5 "path/filepath"
6 "testing"
7)
8
9const (
10 resolveOwnerDid = "did:plc:akshay"
11 resolveRepoDid = "did:plc:squid"
12 resolveStoredKey = "squidbot"
13)
14
15func setupResolveRepo(t *testing.T) (*Xrpc, string) {
16 t.Helper()
17 x := newTestXrpc(t)
18 scanPath := t.TempDir()
19 x.Config.Repo.ScanPath = scanPath
20
21 if err := x.Db.StoreRepoKey(resolveRepoDid, []byte("k256"), resolveOwnerDid, resolveStoredKey); err != nil {
22 t.Fatalf("StoreRepoKey: %v", err)
23 }
24 if err := os.MkdirAll(filepath.Join(scanPath, resolveRepoDid), 0o755); err != nil {
25 t.Fatalf("mkdir repo dir: %v", err)
26 }
27 return x, scanPath
28}
29
30func TestResolveRepoDID_PrefersRepoOverName(t *testing.T) {
31 x, scanPath := setupResolveRepo(t)
32
33 repo := resolveRepoDid
34 gotDid, gotPath, err := x.resolveRepoDID(&repo, resolveOwnerDid, "SquidBot")
35 if err != nil {
36 t.Fatalf("resolveRepoDID with repo set: %v", err)
37 }
38 if gotDid != resolveRepoDid {
39 t.Errorf("repoDid = %q, want %q", gotDid, resolveRepoDid)
40 }
41 if want := filepath.Join(scanPath, resolveRepoDid); gotPath != want {
42 t.Errorf("repoPath = %q, want %q", gotPath, want)
43 }
44}
45
46func TestResolveRepoDID_RejectsMalformedRepoDid(t *testing.T) {
47 x, _ := setupResolveRepo(t)
48
49 malformed := "not-a-did"
50 if _, _, err := x.resolveRepoDID(&malformed, resolveOwnerDid, resolveStoredKey); err == nil {
51 t.Fatal("resolveRepoDID with malformed repo DID: got nil error, want failure")
52 }
53}
54
55func TestResolveRepoDID_UnknownRepoDidDoesNotFallBackToName(t *testing.T) {
56 x, _ := setupResolveRepo(t)
57
58 unknown := "did:plc:limpet"
59 if _, _, err := x.resolveRepoDID(&unknown, resolveOwnerDid, resolveStoredKey); err == nil {
60 t.Fatal("resolveRepoDID with unknown repo DID and resolvable name: got nil error, want failure")
61 }
62}
63
64func TestResolveRepoDID_NameFallbackIsCaseSensitive(t *testing.T) {
65 x, _ := setupResolveRepo(t)
66
67 if _, _, err := x.resolveRepoDID(nil, resolveOwnerDid, "SquidBot"); err == nil {
68 t.Fatal("resolveRepoDID with mismatched-case name: got nil error, want failure")
69 }
70
71 empty := ""
72 if _, _, err := x.resolveRepoDID(&empty, resolveOwnerDid, "SquidBot"); err == nil {
73 t.Fatal("resolveRepoDID with empty repo and mismatched-case name: got nil error, want failure")
74 }
75
76 gotDid, _, err := x.resolveRepoDID(nil, resolveOwnerDid, resolveStoredKey)
77 if err != nil {
78 t.Fatalf("resolveRepoDID with exact-case name: %v", err)
79 }
80 if gotDid != resolveRepoDid {
81 t.Errorf("repoDid = %q, want %q", gotDid, resolveRepoDid)
82 }
83}