package spindle import ( "testing" "github.com/bluesky-social/indigo/atproto/syntax" "tangled.org/core/spindle/config" "tangled.org/core/spindle/db" ) func TestEnrollsShouldFollowAdmission(t *testing.T) { admin := syntax.DID("did:plc:admin") owner := syntax.DID("did:plc:owner") nel := syntax.DID("did:plc:nel") squid := syntax.DID("did:plc:squid") d, _ := newTestSpindleDB(t) srv := &config.Server{Owner: owner.String(), Admins: []string{admin.String()}} enrolls := func(want bool, did syntax.DID) { t.Helper() got, err := db.Enrolls(d, srv, did) if err != nil { t.Fatal(err) } if got != want { t.Fatalf("Enrolls(%s) = %v under %q admission, want %v", did, got, srv.Admission, want) } } // an empty allow-list serves only the admins enrolls(false, nel) enrolls(true, owner) enrolls(true, admin) if err := db.AddToAllowlist(d, squid); err != nil { t.Fatal(err) } enrolls(true, squid) enrolls(false, nel) srv.Admission = config.AdmissionClosed enrolls(false, nel) srv.Admission = config.AdmissionOpen enrolls(true, nel) enrolls(true, squid) } func TestBanShouldBeatEveryAdmission(t *testing.T) { admin := syntax.DID("did:plc:admin") owner := syntax.DID("did:plc:owner") squid := syntax.DID("did:plc:squid") nel := syntax.DID("did:plc:nel") d, _ := newTestSpindleDB(t) if err := db.AddToAllowlist(d, squid); err != nil { t.Fatal(err) } for _, did := range []syntax.DID{admin, owner, squid, nel} { if err := d.PutBan(db.BanEntry{SubjectDid: did}); err != nil { t.Fatal(err) } } for _, admission := range []config.Admission{config.AdmissionClosed, config.AdmissionOpen} { srv := &config.Server{Owner: owner.String(), Admins: []string{admin.String()}, Admission: admission} for _, did := range []syntax.DID{admin, owner, squid, nel} { if got, err := db.Enrolls(d, srv, did); err != nil || got { t.Fatalf("Enrolls(%s) = %v, %v under %q admission, want a ban to refuse", did, got, err, admission) } } } }