From dfd5a9acc134f1ea849a49efee7dd7f50c836e75 Mon Sep 17 00:00:00 2001 From: Aleksandr Nogikh Date: Tue, 9 May 2023 18:25:02 +0200 Subject: dashboard: support filtering over multiple labels For each label, allow only one value to be specified. At the same time, allow multiple different labels (subsystem, origin, prio, etc) be specified together. --- dashboard/app/main_test.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) (limited to 'dashboard/app/main_test.go') diff --git a/dashboard/app/main_test.go b/dashboard/app/main_test.go index be1b3e847..fff94d7f9 100644 --- a/dashboard/app/main_test.go +++ b/dashboard/app/main_test.go @@ -247,3 +247,51 @@ func TestSubsystemPage(t *testing.T) { assert.Contains(t, string(reply), crash1.Title) assert.NotContains(t, string(reply), crash2.Title) } + +func TestMultiLabelFilter(t *testing.T) { + c := NewCtx(t) + defer c.Close() + + client := c.makeClient(clientPublicEmail, keyPublicEmail, true) + mailingList := config.Namespaces["access-public-email"].Reporting[0].Config.(*EmailConfig).Email + + build1 := testBuild(1) + build1.Manager = "manager-name-123" + client.UploadBuild(build1) + + crash1 := testCrash(build1, 1) + crash1.GuiltyFiles = []string{"a.c"} + crash1.Title = "crash-with-subsystem-A" + client.ReportCrash(crash1) + c.pollEmailBug() + + crash2 := testCrash(build1, 2) + crash2.GuiltyFiles = []string{"a.c"} + crash2.Title = "prio-crash-subsystem-A" + client.ReportCrash(crash2) + + c.incomingEmail(c.pollEmailBug().Sender, "#syz set prio: low\n", + EmailOptFrom("test@requester.com"), EmailOptCC([]string{mailingList})) + + // The normal main page. + reply, err := c.AuthGET(AccessAdmin, "/access-public-email") + c.expectOK(err) + assert.Contains(t, string(reply), build1.Manager) + assert.NotContains(t, string(reply), "Applied filters") + + reply, err = c.AuthGET(AccessAdmin, "/access-public-email?label=subsystems:subsystemA") + c.expectOK(err) + assert.Contains(t, string(reply), "Applied filters") // we're seeing a prompt to disable the filter + assert.Contains(t, string(reply), crash1.Title) + assert.Contains(t, string(reply), crash2.Title) + + // Test filters together. + reply, err = c.AuthGET(AccessAdmin, "/access-public-email?label=subsystems:subsystemA&&label=prio:low") + c.expectOK(err) + assert.NotContains(t, string(reply), crash1.Title) + assert.Contains(t, string(reply), crash2.Title) + + // Ensure we provide links that drop labels. + assert.NotContains(t, string(reply), "/access-public-email?label=subsystems:subsystemA\"") + assert.NotContains(t, string(reply), "/access-public-email?label=prop:low\"") +} -- cgit mrf-deployment