Skip to content
quarry Artifact [0c5a3eac6f]
Login

Artifact [0c5a3eac6f]

Artifact 0c5a3eac6f907e321b4506807f365f98bb69b08669fedde4e9b24c2f070ac34e:


package oltp

import (
	"reflect"
	"testing"
)

// RFC 0009 §verdicts: required checks match branches the way protection
// does — names or globs, every matching rule applies — and a rule with
// no checks is a removed rule.
func TestRequiredChecksMatchLikeProtection(t *testing.T) {
	db := testDB(t)
	must := func(err error) {
		t.Helper()
		if err != nil {
			t.Fatal(err)
		}
	}
	must(db.SetCheckRule("r", "trunk", []string{"test", "build"}))
	must(db.SetCheckRule("r", "release-*", []string{"test", "sign"}))
	if got := db.RequiredChecks("r", "trunk"); !reflect.DeepEqual(got, []string{"build", "test"}) {
		t.Fatalf("trunk: %v", got)
	}
	if got := db.RequiredChecks("r", "release-1.2"); !reflect.DeepEqual(got, []string{"sign", "test"}) {
		t.Fatalf("glob: %v", got)
	}
	if got := db.RequiredChecks("r", "feature"); got != nil {
		t.Fatalf("unmatched branch requires %v", got)
	}
	// Overlapping rules union without repeating.
	must(db.SetCheckRule("r", "*", []string{"lint", "test"}))
	if got := db.RequiredChecks("r", "trunk"); !reflect.DeepEqual(got, []string{"lint", "test", "build"}) {
		t.Fatalf("union: %v", got)
	}
	// Blanking removes.
	must(db.SetCheckRule("r", "*", nil))
	must(db.SetCheckRule("r", "trunk", nil))
	if got := db.RequiredChecks("r", "trunk"); got != nil {
		t.Fatalf("removed but requires %v", got)
	}
}