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)
}
}