Skip to content

Commit

Permalink
Merge pull request #951 from mcdafydd/fix-azdo-pr-approved
Browse files Browse the repository at this point in the history
Azure Devops - Fixes #946
  • Loading branch information
lkysow authored Mar 23, 2020
2 parents 272bf09 + 3da442d commit 5335785
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 4 deletions.
19 changes: 15 additions & 4 deletions server/events_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -497,10 +497,21 @@ func (e *EventsController) HandleAzureDevopsPullRequestCommentedEvent(w http.Res
// request if the event is a pull request closed event. It's exported to make
// testing easier.
func (e *EventsController) HandleAzureDevopsPullRequestEvent(w http.ResponseWriter, event *azuredevops.Event, azuredevopsReqID string) {
if strings.Contains(event.Message.GetText(), "changed the reviewer list") {
msg := "pull request updated event is not a supported type [changed the reviewer list]"
e.respond(w, logging.Debug, http.StatusOK, "%s: %s", msg, azuredevopsReqID)
return
prText := event.Message.GetText()
ignoreEvents := []string{
"changed the reviewer list",
"approved pull request",
"has approved and left suggestions",
"is waiting for the author",
"rejected pull request",
"voted on pull request",
}
for _, s := range ignoreEvents {
if strings.Contains(prText, s) {
msg := fmt.Sprintf("pull request updated event is not a supported type [%s]", s)
e.respond(w, logging.Debug, http.StatusOK, "%s: %s", msg, azuredevopsReqID)
return
}
}

pull, pullEventType, baseRepo, headRepo, user, err := e.Parser.ParseAzureDevopsPullEvent(*event)
Expand Down
78 changes: 78 additions & 0 deletions server/events_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import (

const githubHeader = "X-Github-Event"
const gitlabHeader = "X-Gitlab-Event"
const azuredevopsHeader = "Request-Id"

var secret = []byte("secret")

Expand Down Expand Up @@ -454,6 +455,83 @@ func TestPost_GitlabMergeRequestUnsupportedAction(t *testing.T) {
responseContains(t, w, http.StatusOK, "Ignoring non-actionable pull request event")
}

func TestPost_AzureDevopsPullRequestIgnoreEvent(t *testing.T) {
u := "user"
user := []byte(u)

t.Log("when the event is an azure devops pull request update that should not trigger workflow we ignore it")
RegisterMockTestingT(t)
v := mocks.NewMockAzureDevopsRequestValidator()
p := emocks.NewMockEventParsing()
cp := emocks.NewMockCommentParsing()
cr := emocks.NewMockCommandRunner()
c := emocks.NewMockPullCleaner()
vcsmock := vcsmocks.NewMockClient()
repoWhitelistChecker, err := events.NewRepoWhitelistChecker("*")
Ok(t, err)
e := server.EventsController{
TestingMode: true,
Logger: logging.NewNoopLogger(),
AzureDevopsWebhookBasicUser: user,
AzureDevopsWebhookBasicPassword: secret,
AzureDevopsRequestValidator: v,
Parser: p,
CommentParser: cp,
CommandRunner: cr,
PullCleaner: c,
SupportedVCSHosts: []models.VCSHostType{models.AzureDevops},
RepoWhitelistChecker: repoWhitelistChecker,
VCSClient: vcsmock,
}

event := `{
"subscriptionId": "11111111-1111-1111-1111-111111111111",
"notificationId": 1,
"id": "22222222-2222-2222-2222-222222222222",
"eventType": "git.pullrequest.updated",
"publisherId": "tfs",
"message": {
"text": "Dev %s pull request 1 (Name in repo)"
},
"resource": {}}`

cases := []struct {
message string
}{
{
"has changed the reviewer list on",
},
{
"has approved",
},
{
"has approved and left suggestions on",
},
{
"is waiting for the author on",
},
{
"rejected",
},
{
"voted on",
},
}

for _, c := range cases {
t.Run(c.message, func(t *testing.T) {
payload := fmt.Sprintf(event, c.message)
req, _ := http.NewRequest("GET", "", strings.NewReader(payload))
req.Header.Set(azuredevopsHeader, "reqID")
When(v.Validate(req, user, secret)).ThenReturn([]byte(payload), nil)
w := httptest.NewRecorder()
e.Parser = &events.EventParser{}
e.Post(w, req)
responseContains(t, w, http.StatusOK, "pull request updated event is not a supported type")
})
}
}

func TestPost_GithubPullRequestClosedErrCleaningPull(t *testing.T) {
t.Skip("relies too much on mocks, should use real event parser")
t.Log("when the event is a closed pull request and we have an error calling CleanUpPull we return a 503")
Expand Down

0 comments on commit 5335785

Please sign in to comment.