package chain import ( "context" "testing" ) func TestSubjectsMatchAsTheBusFiltersThem(t *testing.T) { for _, c := range []struct { pattern, key string want bool }{ {"alpha.>", "alpha.build-1", true}, {"alpha.>", "alpha.commit.c1", true}, {"alpha.>", "beta.build-1", false}, {"alpha.>", "alpha", false}, {"*.newest", "alpha.newest", true}, {"*.newest", "alpha.commit.newest", false}, {"*", "build-1", true}, {"*", "alpha.build-1", false}, {">", "a.b.c", true}, {"req.*", "req.build-1", true}, } { if got := SubjectMatches(c.pattern, c.key); got != c.want { t.Errorf("SubjectMatches(%q, %q) = %v", c.pattern, c.key, got) } } } func TestOnlyTheKeysOfAFilterAreWatched(t *testing.T) { ctx := context.Background() c := InMemory(nil) for _, k := range []string{"alpha.build.b1", "alpha.build.b2", "beta.build.b3", "alpha.newest"} { if _, err := c.Builds.CreateRaw(ctx, k, []byte(`{"id":"x"}`)); err != nil { t.Fatal(err) } } got, err := c.Builds.FilteredRaw(ctx, ModuleFilter("alpha")) if err != nil || len(got) != 2 { t.Fatalf("alpha.> gave %v: %v", got, err) } if !IsRecordKey("alpha.build.b1") || IsRecordKey("alpha.newest") || IsRecordKey("alpha.commit.c") || IsRecordKey("manifest.build.x") || IsRecordKey("req.b1") || IsRecordKey("id.b1") { t.Error("IsRecordKey tells a record from a pointer wrongly") } }