Monorepo for Tangled tangled.org
2

Configure Feed

Select the types of activity you want to include in your feed.

1package xrpc 2 3import ( 4 "context" 5 "encoding/json" 6 "io" 7 "log/slog" 8 "net/http" 9 "net/http/httptest" 10 "net/url" 11 "path/filepath" 12 "testing" 13 14 "tangled.org/core/api/tangled" 15 "tangled.org/core/knotserver/config" 16 "tangled.org/core/knotserver/db" 17) 18 19func newTestXrpc(t *testing.T) *Xrpc { 20 t.Helper() 21 d, err := db.Setup(context.Background(), filepath.Join(t.TempDir(), "test.db")) 22 if err != nil { 23 t.Fatalf("db.Setup: %v", err) 24 } 25 return &Xrpc{ 26 Db: d, 27 Config: &config.Config{Server: config.Server{Hostname: "knot.example", MaxResponseKB: 5120}}, 28 Logger: slog.New(slog.NewTextHandler(io.Discard, nil)), 29 } 30} 31 32func TestRepoDescribeRepo_ReturnsOwner(t *testing.T) { 33 x := newTestXrpc(t) 34 if err := x.Db.StoreRepoKey("did:plc:repo1", []byte("dummy"), "did:plc:akshay", "myrepo"); err != nil { 35 t.Fatalf("StoreRepoKey: %v", err) 36 } 37 38 req := httptest.NewRequest(http.MethodGet, "/xrpc/sh.tangled.repo.describeRepo?repoDid=did:plc:repo1", nil) 39 rec := httptest.NewRecorder() 40 x.RepoDescribeRepo(rec, req) 41 42 if rec.Code != http.StatusOK { 43 t.Fatalf("status = %d, want 200; body=%s", rec.Code, rec.Body.String()) 44 } 45 46 var out tangled.RepoDescribeRepo_Output 47 if err := json.Unmarshal(rec.Body.Bytes(), &out); err != nil { 48 t.Fatalf("decode: %v", err) 49 } 50 if out.RepoDid != "did:plc:repo1" { 51 t.Errorf("RepoDid = %q", out.RepoDid) 52 } 53 if out.OwnerDid != "did:plc:akshay" { 54 t.Errorf("OwnerDid = %q, want did:plc:akshay", out.OwnerDid) 55 } 56 if out.Rkey != "myrepo" { 57 t.Errorf("Rkey = %q, want myrepo", out.Rkey) 58 } 59} 60 61func TestRepoDescribeRepo_UnknownRepoDidReturns404(t *testing.T) { 62 x := newTestXrpc(t) 63 64 req := httptest.NewRequest(http.MethodGet, "/xrpc/sh.tangled.repo.describeRepo?repoDid=did:plc:unknown", nil) 65 rec := httptest.NewRecorder() 66 x.RepoDescribeRepo(rec, req) 67 68 if rec.Code != http.StatusNotFound { 69 t.Errorf("status = %d, want 404", rec.Code) 70 } 71} 72 73func TestRepoDescribeRepo_MissingParamReturns400(t *testing.T) { 74 x := newTestXrpc(t) 75 76 req := httptest.NewRequest(http.MethodGet, "/xrpc/sh.tangled.repo.describeRepo", nil) 77 rec := httptest.NewRecorder() 78 x.RepoDescribeRepo(rec, req) 79 80 if rec.Code != http.StatusBadRequest { 81 t.Errorf("status = %d, want 400", rec.Code) 82 } 83} 84 85func TestRepoDescribeRepo_MalformedDidParamReturns400(t *testing.T) { 86 x := newTestXrpc(t) 87 u := "/xrpc/sh.tangled.repo.describeRepo?repoDid=" + url.QueryEscape("notadid") 88 req := httptest.NewRequest(http.MethodGet, u, nil) 89 rec := httptest.NewRecorder() 90 x.RepoDescribeRepo(rec, req) 91 if rec.Code != http.StatusBadRequest { 92 t.Errorf("status = %d, want 400", rec.Code) 93 } 94}