package spindle import ( "fmt" "testing" ) func TestRevokeAfterAFailedCollaboratorRowWriteRemovesAccess(t *testing.T) { env := newEnsureEnv(t) env.serve("repo") env.ensure(t) if _, err := env.s.db.Exec(fmt.Sprintf(`create trigger fail_collaborator_row before insert on repo_collaborators when new.subject = '%s' begin select raise(abort, 'boom'); end`, testBob)); err != nil { t.Fatal(err) } env.grant(testBob) if _, err := env.s.ensureRepo(t.Context(), env.k, testRepoDid); err == nil { t.Fatal("setup: the sync survived a failing collaborator row write") } if _, err := env.s.db.Exec(`drop trigger fail_collaborator_row`); err != nil { t.Fatal(err) } env.revoke(testBob) env.ensure(t) env.wantNoPushFor(t, testBob) if rows := env.collaboratorRows(t); len(rows) != 0 { t.Fatalf("collaborator rows = %+v after the revoke", rows) } }