sigs.k8s.io/prow@v0.0.0-20240503223140-c5e374dc7eb1/pkg/plugins/milestoneapplier/milestoneapplier_test.go (about) 1 /* 2 Copyright 2019 The Kubernetes Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package milestoneapplier 18 19 import ( 20 "testing" 21 22 "github.com/sirupsen/logrus" 23 24 "sigs.k8s.io/prow/pkg/github" 25 "sigs.k8s.io/prow/pkg/github/fakegithub" 26 ) 27 28 func TestMilestoneApplier(t *testing.T) { 29 var milestonesMap = map[string]int{"v1.0": 1, "v2.0": 2} 30 testcases := []struct { 31 name string 32 baseBranch string 33 prAction github.PullRequestEventAction 34 merged bool 35 previousMilestone int 36 configuredMilestone int 37 expectedMilestone int 38 }{ 39 { 40 name: "opened PR on default branch => do nothing", 41 baseBranch: "master", 42 prAction: github.PullRequestActionOpened, 43 expectedMilestone: 0, 44 configuredMilestone: 1, 45 }, 46 { 47 name: "closed (not merged) PR on default branch => do nothing", 48 baseBranch: "master", 49 prAction: github.PullRequestActionClosed, 50 merged: false, 51 expectedMilestone: 0, 52 configuredMilestone: 1, 53 }, 54 { 55 name: "merged PR but has existing milestone on default branch => apply configured milestone", 56 baseBranch: "master", 57 prAction: github.PullRequestActionClosed, 58 merged: true, 59 previousMilestone: 1, 60 configuredMilestone: 2, 61 expectedMilestone: 2, 62 }, 63 { 64 name: "merged PR but already has configured milestone on default branch => do nothing", 65 baseBranch: "master", 66 prAction: github.PullRequestActionClosed, 67 merged: true, 68 previousMilestone: 2, 69 configuredMilestone: 2, 70 expectedMilestone: 2, 71 }, 72 { 73 name: "merged PR but does not have existing milestone on default branch => add milestone", 74 prAction: github.PullRequestActionClosed, 75 baseBranch: "master", 76 merged: true, 77 previousMilestone: 0, 78 configuredMilestone: 2, 79 expectedMilestone: 2, 80 }, 81 { 82 name: "opened PR on non-default branch => add milestone", 83 baseBranch: "release-1.0", 84 prAction: github.PullRequestActionOpened, 85 configuredMilestone: 1, 86 expectedMilestone: 1, 87 }, 88 { 89 name: "synced PR on non-default branch => do nothing", 90 baseBranch: "release-1.0", 91 prAction: github.PullRequestActionSynchronize, 92 previousMilestone: 0, 93 configuredMilestone: 1, 94 expectedMilestone: 0, 95 }, 96 { 97 name: "closed (not merged) PR on non-default branch => do nothing", 98 baseBranch: "release-1.0", 99 prAction: github.PullRequestActionClosed, 100 merged: false, 101 expectedMilestone: 0, 102 configuredMilestone: 1, 103 }, 104 { 105 name: "merged PR but has existing milestone on non-default branch => add configured milestone", 106 baseBranch: "release-1.0", 107 prAction: github.PullRequestActionClosed, 108 merged: true, 109 previousMilestone: 1, 110 configuredMilestone: 2, 111 expectedMilestone: 2, 112 }, 113 { 114 name: "merged PR but already has configured milestone on non-default branch => do nothing", 115 baseBranch: "release-1.0", 116 prAction: github.PullRequestActionClosed, 117 merged: true, 118 previousMilestone: 2, 119 configuredMilestone: 2, 120 expectedMilestone: 2, 121 }, 122 { 123 name: "merged PR but does not have existing milestone on non-default branch => add milestone", 124 prAction: github.PullRequestActionClosed, 125 baseBranch: "release-1.0", 126 merged: true, 127 previousMilestone: 0, 128 configuredMilestone: 1, 129 expectedMilestone: 1, 130 }, 131 } 132 133 for _, tc := range testcases { 134 t.Run(tc.name, func(t *testing.T) { 135 basicPR := github.PullRequest{ 136 Number: 1, 137 Base: github.PullRequestBranch{ 138 Repo: github.Repo{ 139 Owner: github.User{ 140 Login: "kubernetes", 141 }, 142 Name: "kubernetes", 143 DefaultBranch: "master", 144 }, 145 Ref: tc.baseBranch, 146 }, 147 } 148 149 basicPR.Merged = tc.merged 150 if tc.previousMilestone != 0 { 151 basicPR.Milestone = &github.Milestone{ 152 Number: tc.previousMilestone, 153 } 154 } 155 156 event := github.PullRequestEvent{ 157 Action: tc.prAction, 158 Number: basicPR.Number, 159 PullRequest: basicPR, 160 } 161 162 fakeClient := fakegithub.NewFakeClient() 163 fakeClient.PullRequests = map[int]*github.PullRequest{ 164 basicPR.Number: &basicPR, 165 } 166 fakeClient.MilestoneMap = milestonesMap 167 fakeClient.Milestone = tc.previousMilestone 168 169 var configuredMilestoneTitle string 170 for title, number := range milestonesMap { 171 if number == tc.configuredMilestone { 172 configuredMilestoneTitle = title 173 } 174 } 175 176 if err := handle(fakeClient, logrus.WithField("plugin", pluginName), configuredMilestoneTitle, event); err != nil { 177 t.Fatalf("(%s): Unexpected error from handle: %v.", tc.name, err) 178 } 179 180 if fakeClient.Milestone != tc.expectedMilestone { 181 t.Fatalf("%s: expected milestone: %d, received milestone: %d", tc.name, tc.expectedMilestone, fakeClient.Milestone) 182 } 183 }) 184 } 185 }