package xrpc import ( "encoding/json" "net/http" "net/http/httptest" "strings" "testing" "tangled.org/core/api/tangled" db "tangled.org/core/deliberi/db" "tangled.org/core/deliberi/models" ) func TestResolveCommitters(t *testing.T) { _, router, database, sign := newTestXrpcFull(t, func(x *Xrpc) { x.Config.TrustedServiceDIDs = []string{"did:web:another.example", testActor} }) for _, email := range []models.Email{ {Did: testActor, Address: "Verified@Example.com", Verified: true, VerificationCode: ""}, {Did: testActor, Address: "pending@example.com", Verified: false, VerificationCode: "pending"}, } { if err := db.AddEmail(database, email); err != nil { t.Fatal(err) } } req := httptest.NewRequest( http.MethodPost, "/"+tangled.IdentityResolveCommittersNSID, strings.NewReader(`{"actor":"`+testActor+`"}`), ) req.Header.Set("Authorization", "Bearer "+sign(tangled.IdentityResolveCommittersNSID)) response := httptest.NewRecorder() router.ServeHTTP(response, req) if response.Code != http.StatusOK { t.Fatalf("status = %d, body = %s", response.Code, response.Body.String()) } var output tangled.IdentityResolveCommitters_Output if err := json.Unmarshal(response.Body.Bytes(), &output); err != nil { t.Fatal(err) } if got, want := strings.Join(output.Committers, ","), testActor+",verified@example.com"; got != want { t.Fatalf("committers = %q, want %q", got, want) } } func TestResolveCommittersRejectsAnotherService(t *testing.T) { _, router, _, sign := newTestXrpcFull(t, func(x *Xrpc) { x.Config.TrustedServiceDIDs = []string{"did:web:mirror.example", "did:web:indexer.example"} }) req := httptest.NewRequest( http.MethodPost, "/"+tangled.IdentityResolveCommittersNSID, strings.NewReader(`{"actor":"`+testActor+`"}`), ) req.Header.Set("Authorization", "Bearer "+sign(tangled.IdentityResolveCommittersNSID)) response := httptest.NewRecorder() router.ServeHTTP(response, req) if response.Code != http.StatusForbidden { t.Fatalf("status = %d, want 403", response.Code) } } func TestResolveCommittersIsDisabledWithoutTrustedServices(t *testing.T) { router, _, sign := newTestXrpc(t) req := httptest.NewRequest( http.MethodPost, "/"+tangled.IdentityResolveCommittersNSID, strings.NewReader(`{"actor":"`+testActor+`"}`), ) req.Header.Set("Authorization", "Bearer "+sign(tangled.IdentityResolveCommittersNSID)) response := httptest.NewRecorder() router.ServeHTTP(response, req) if response.Code != http.StatusNotFound { t.Fatalf("status = %d, want 404", response.Code) } }