func TestQueueOrder(t *testing.T) { timeBase := time.Now() time2 := timeBase.Add(6 * time.Minute).Unix() time3 := timeBase.Add(5 * time.Minute).Unix() time4 := timeBase.Add(4 * time.Minute).Unix() time5 := timeBase.Add(3 * time.Minute).Unix() time6 := timeBase.Add(2 * time.Minute).Unix() labelEvents := map[int][]github_test.LabelTime{ 2: {{"me", lgtmLabel, time2}}, 3: {{"me", lgtmLabel, time3}}, 4: {{"me", lgtmLabel, time4}}, 5: {{"me", lgtmLabel, time5}}, 6: {{"me", lgtmLabel, time6}}, } tests := []struct { name string issues []*github.Issue issueToEvents map[int][]github_test.LabelTime expected []int }{ { name: "Just prNum", issues: []*github.Issue{ github_test.Issue(someUserName, 2, nil, true), github_test.Issue(someUserName, 3, nil, true), github_test.Issue(someUserName, 4, nil, true), github_test.Issue(someUserName, 5, nil, true), }, issueToEvents: labelEvents, expected: []int{5, 4, 3, 2}, }, { name: "With a priority label", issues: []*github.Issue{ github_test.Issue(someUserName, 2, []string{"priority/P1"}, true), github_test.Issue(someUserName, 3, []string{"priority/P1"}, true), github_test.Issue(someUserName, 4, []string{"priority/P0"}, true), github_test.Issue(someUserName, 5, nil, true), }, issueToEvents: labelEvents, expected: []int{4, 3, 2, 5}, }, { name: "With two priority labels", issues: []*github.Issue{ github_test.Issue(someUserName, 2, []string{"priority/P1", "priority/P0"}, true), github_test.Issue(someUserName, 3, []string{"priority/P1"}, true), github_test.Issue(someUserName, 4, []string{"priority/P0"}, true), github_test.Issue(someUserName, 5, nil, true), }, issueToEvents: labelEvents, expected: []int{4, 2, 3, 5}, }, { name: "With unrelated labels", issues: []*github.Issue{ github_test.Issue(someUserName, 2, []string{"priority/P1", "priority/P0"}, true), github_test.Issue(someUserName, 3, []string{"priority/P1", "kind/design"}, true), github_test.Issue(someUserName, 4, []string{"priority/P0"}, true), github_test.Issue(someUserName, 5, []string{lgtmLabel, "kind/new-api"}, true), }, issueToEvents: labelEvents, expected: []int{4, 2, 3, 5}, }, { name: "With invalid priority label", issues: []*github.Issue{ github_test.Issue(someUserName, 2, []string{"priority/P1", "priority/P0"}, true), github_test.Issue(someUserName, 3, []string{"priority/P1", "kind/design", "priority/high"}, true), github_test.Issue(someUserName, 4, []string{"priority/P0", "priorty/bob"}, true), github_test.Issue(someUserName, 5, nil, true), }, issueToEvents: labelEvents, expected: []int{4, 2, 3, 5}, }, { name: "Unlabeled counts as P3", issues: []*github.Issue{ github_test.Issue(someUserName, 2, nil, true), github_test.Issue(someUserName, 3, []string{"priority/P3"}, true), github_test.Issue(someUserName, 4, []string{"priority/P2"}, true), github_test.Issue(someUserName, 5, nil, true), }, issueToEvents: labelEvents, expected: []int{4, 5, 3, 2}, }, { name: "retestNotRequiredLabel counts as P-negative 1", issues: []*github.Issue{ github_test.Issue(someUserName, 2, nil, true), github_test.Issue(someUserName, 3, []string{"priority/P3"}, true), github_test.Issue(someUserName, 4, []string{"priority/P0"}, true), github_test.Issue(someUserName, 5, nil, true), github_test.Issue(someUserName, 6, []string{"priority/P3", retestNotRequiredLabel}, true), }, issueToEvents: labelEvents, expected: []int{6, 4, 5, 3, 2}, }, } for testNum, test := range tests { config := &github_util.Config{} client, server, mux := github_test.InitServer(t, nil, nil, github_test.MultiIssueEvents(test.issueToEvents), nil, nil, nil, nil) config.Org = "o" config.Project = "r" config.SetClient(client) sq := getTestSQ(false, config, server) for i := range test.issues { issue := test.issues[i] github_test.ServeIssue(t, mux, issue) issueNum := *issue.Number obj, err := config.GetObject(issueNum) if err != nil { t.Fatalf("%d:%q unable to get issue: %v", testNum, test.name, err) } sq.githubE2EQueue[issueNum] = obj } actual := sq.orderedE2EQueue() if len(actual) != len(test.expected) { t.Fatalf("%d:%q len(actual):%v != len(expected):%v", testNum, test.name, actual, test.expected) } for i, a := range actual { e := test.expected[i] if a != e { t.Errorf("%d:%q a[%d]:%d != e[%d]:%d", testNum, test.name, i, a, i, e) } } server.Close() } }
func TestQueueOrder(t *testing.T) { tests := []struct { name string issues []github.Issue expected []int }{ { name: "Just prNum", issues: []github.Issue{ *github_test.Issue(whitelistUser, 2, nil, true), *github_test.Issue(whitelistUser, 3, nil, true), *github_test.Issue(whitelistUser, 4, nil, true), *github_test.Issue(whitelistUser, 5, nil, true), }, expected: []int{2, 3, 4, 5}, }, { name: "With a priority label", issues: []github.Issue{ *github_test.Issue(whitelistUser, 2, []string{"priority/P1"}, true), *github_test.Issue(whitelistUser, 3, []string{"priority/P1"}, true), *github_test.Issue(whitelistUser, 4, []string{"priority/P0"}, true), *github_test.Issue(whitelistUser, 5, nil, true), }, expected: []int{4, 2, 3, 5}, }, { name: "With two priority labels", issues: []github.Issue{ *github_test.Issue(whitelistUser, 2, []string{"priority/P1", "priority/P0"}, true), *github_test.Issue(whitelistUser, 3, []string{"priority/P1"}, true), *github_test.Issue(whitelistUser, 4, []string{"priority/P0"}, true), *github_test.Issue(whitelistUser, 5, nil, true), }, expected: []int{2, 4, 3, 5}, }, { name: "With unrelated labels", issues: []github.Issue{ *github_test.Issue(whitelistUser, 2, []string{"priority/P1", "priority/P0"}, true), *github_test.Issue(whitelistUser, 3, []string{"priority/P1", "kind/design"}, true), *github_test.Issue(whitelistUser, 4, []string{"priority/P0"}, true), *github_test.Issue(whitelistUser, 5, []string{"LGTM", "kind/new-api"}, true), }, expected: []int{2, 4, 3, 5}, }, { name: "With invalid priority label", issues: []github.Issue{ *github_test.Issue(whitelistUser, 2, []string{"priority/P1", "priority/P0"}, true), *github_test.Issue(whitelistUser, 3, []string{"priority/P1", "kind/design", "priority/high"}, true), *github_test.Issue(whitelistUser, 4, []string{"priority/P0", "priorty/bob"}, true), *github_test.Issue(whitelistUser, 5, nil, true), }, expected: []int{2, 4, 3, 5}, }, { name: "Unlabeled counts as P3", issues: []github.Issue{ *github_test.Issue(whitelistUser, 2, nil, true), *github_test.Issue(whitelistUser, 3, []string{"priority/P3"}, true), *github_test.Issue(whitelistUser, 4, []string{"priority/P2"}, true), *github_test.Issue(whitelistUser, 5, nil, true), }, expected: []int{4, 2, 3, 5}, }, { name: "e2e-not-required counts as P-negative 1", issues: []github.Issue{ *github_test.Issue(whitelistUser, 2, nil, true), *github_test.Issue(whitelistUser, 3, []string{"priority/P3"}, true), *github_test.Issue(whitelistUser, 4, []string{"priority/P2"}, true), *github_test.Issue(whitelistUser, 5, nil, true), *github_test.Issue(whitelistUser, 6, []string{"priority/P3", e2eNotRequiredLabel}, true), }, expected: []int{6, 4, 2, 3, 5}, }, } for testNum, test := range tests { config := &github_util.Config{} client, server, mux := github_test.InitServer(t, nil, nil, nil, nil, nil) config.Org = "o" config.Project = "r" config.SetClient(client) sq := getTestSQ(false, config, server) for i := range test.issues { issue := &test.issues[i] github_test.ServeIssue(t, mux, issue) issueNum := *issue.Number obj, err := config.GetObject(issueNum) if err != nil { t.Fatalf("%d:%q unable to get issue: %v", testNum, test.name, err) } sq.githubE2EQueue[issueNum] = obj } actual := sq.orderedE2EQueue() if len(actual) != len(test.expected) { t.Fatalf("%d:%q len(actual):%v != len(expected):%v", testNum, test.name, actual, test.expected) } for i, a := range actual { e := test.expected[i] if a != e { t.Errorf("%d:%q a[%d]:%d != e[%d]:%d", testNum, test.name, i, a, i, e) } } server.Close() } }