Skip to content

Commit e9aa863

Browse files
committed
feat: Add test to cover when both invalid and ignored comments exists
1 parent d9ec01c commit e9aa863

File tree

4 files changed

+92
-22
lines changed

4 files changed

+92
-22
lines changed

internal/api/api_test.go

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ func TestWhenPRReviewedByNonTeamMemberAndAuthorsArePartOfTeam(t *testing.T) {
328328
then.
329329
ExpectPendingAnswerReturned().
330330
ExpectStatusPendingReported().
331-
ExpectCommentCharlieIgnoredAsReviewer().
331+
ExpectInvalidCommentCharlieIgnoredAsReviewer().
332332
ExpectLabelsUpdated().
333333
ExpectedReviewRequestsMadeForFoo()
334334
}
@@ -378,7 +378,32 @@ func TestGitHubTeamApproverCleansUpOldInvalidReviewsComments(t *testing.T) {
378378
ExpectPendingAnswerReturned().
379379
ExpectStatusPendingReported().
380380
ExpectPreviousIgnoredReviewCommentsDeleted().
381-
ExpectCommentCharlieIgnoredAsReviewer().
381+
ExpectInvalidCommentCharlieIgnoredAsReviewer().
382+
ExpectLabelsUpdated().
383+
ExpectedReviewRequestsMadeForFoo()
384+
}
385+
386+
func TestGitHubTeamApproverCleansUpOldInvalidAndRetainsIgnoredReviewsComments(t *testing.T) {
387+
given, when, then := stages.ApiTest(t)
388+
389+
given.
390+
EncryptionKeyExists().
391+
GitHubWebHookTokenExists().
392+
FakeGHRunning().
393+
OrganisationWithTeamFoo().
394+
RepoWithNoContributorReviewEnabledAndFooAsApprovingTeam().
395+
PullRequestExists().
396+
InvalidAndIgnoredReviewCommentsExist().
397+
CommitsWithAliceAsContributor().
398+
CharlieApprovesPullRequest().
399+
GitHubTeamApproverRunning()
400+
when.
401+
SendingApprovedPRReviewSubmittedEvent()
402+
then.
403+
ExpectPendingAnswerReturned().
404+
ExpectStatusPendingReported().
405+
ExpectPreviousAliceIgnoredReviewCommentsRetained().
406+
ExpectInvalidCommentCharlieIgnoredAsReviewer().
382407
ExpectLabelsUpdated().
383408
ExpectedReviewRequestsMadeForFoo()
384409
}

internal/api/stages/api_stage.go

Lines changed: 58 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"os"
77
"path/filepath"
88
"sort"
9+
"strings"
910
"testing"
1011

1112
approverCfg "github.com/form3tech-oss/github-team-approver-commons/v2/pkg/configuration"
@@ -525,6 +526,24 @@ func (s *ApiStage) InvalidReviewCommentsExist() *ApiStage {
525526
return s
526527
}
527528

529+
func (s *ApiStage) InvalidAndIgnoredReviewCommentsExist() *ApiStage {
530+
msgIgnored := fmt.Sprintf("%s\n- @%s\n", ignoredReviewerMsg, "alice")
531+
msgInvalid := fmt.Sprintf("%s\n- @%s\n", invalidReviewerMsg, "some other user")
532+
comments := []*github.IssueComment{
533+
{
534+
ID: github.Int64(1),
535+
Body: github.String(msgIgnored),
536+
},
537+
{
538+
ID: github.Int64(2),
539+
Body: github.String(msgInvalid),
540+
},
541+
}
542+
s.fakeGitHub.SetIssueComments(comments)
543+
544+
return s
545+
}
546+
528547
func (s *ApiStage) AliceApprovesPullRequest() *ApiStage {
529548
reviews := []*github.PullRequestReview{
530549
{
@@ -762,33 +781,49 @@ func (s *ApiStage) ExpectedReviewRequestsMadeForFoo() *ApiStage {
762781
}
763782

764783
func (s *ApiStage) ExpectCommentAliceIgnoredAsReviewer() *ApiStage {
765-
comment := s.fakeGitHub.ReportedComment()
766-
require.NotNil(s.t, comment)
767-
require.NotEmpty(s.t, comment.Body)
768-
require.Contains(s.t, *comment.Body, ignoredReviewerMsg)
769-
require.Contains(s.t, *comment.Body, "alice")
784+
785+
var comments []*github.IssueComment
786+
for _, c := range s.fakeGitHub.ReportedComments() {
787+
if strings.Contains(*c.Body, ignoredReviewerMsg) {
788+
comments = append(comments, c)
789+
}
790+
}
791+
792+
require.Len(s.t, comments, 1)
793+
require.NotNil(s.t, comments[0])
794+
require.NotEmpty(s.t, comments[0].Body)
795+
require.Contains(s.t, *comments[0].Body, ignoredReviewerMsg)
796+
require.Contains(s.t, *comments[0].Body, "alice")
770797

771798
return s
772799
}
773800

774-
func (s *ApiStage) ExpectCommentCharlieIgnoredAsReviewer() *ApiStage {
775-
comment := s.fakeGitHub.ReportedComment()
776-
require.NotNil(s.t, comment)
777-
require.NotEmpty(s.t, comment.Body)
778-
require.Contains(s.t, *comment.Body, invalidReviewerMsg)
779-
require.Contains(s.t, *comment.Body, "charlie")
801+
func (s *ApiStage) ExpectInvalidCommentCharlieIgnoredAsReviewer() *ApiStage {
802+
803+
var comments []*github.IssueComment
804+
for _, c := range s.fakeGitHub.ReportedComments() {
805+
if strings.Contains(*c.Body, invalidReviewerMsg) {
806+
comments = append(comments, c)
807+
}
808+
}
809+
810+
require.Len(s.t, comments, 1)
811+
require.NotNil(s.t, comments[0])
812+
require.NotEmpty(s.t, comments[0].Body)
813+
require.Contains(s.t, *comments[0].Body, invalidReviewerMsg)
814+
require.Contains(s.t, *comments[0].Body, "charlie")
780815

781816
return s
782817
}
783818

784819
func (s *ApiStage) ExpectNoCommentsMade() *ApiStage {
785-
require.Nil(s.t, s.fakeGitHub.ReportedComment())
820+
require.Empty(s.t, s.fakeGitHub.ReportedComments())
786821

787822
return s
788823
}
789824

790825
func (s *ApiStage) ExpectNoReviewRequestsMade() *ApiStage {
791-
require.Nil(s.t, s.fakeGitHub.ReportedComment())
826+
require.Empty(s.t, s.fakeGitHub.ReportedComments())
792827

793828
return s
794829
}
@@ -799,6 +834,16 @@ func (s *ApiStage) ExpectPreviousIgnoredReviewCommentsDeleted() *ApiStage {
799834
return s
800835
}
801836

837+
func (s *ApiStage) ExpectPreviousAliceIgnoredReviewCommentsRetained() *ApiStage {
838+
require.Len(s.t, s.fakeGitHub.Comments(), 1)
839+
comment := s.fakeGitHub.Comments()[0]
840+
require.NotNil(s.t, comment)
841+
require.NotEmpty(s.t, comment.Body)
842+
require.Contains(s.t, *comment.Body, ignoredReviewerMsg)
843+
require.Contains(s.t, *comment.Body, "alice")
844+
return s
845+
}
846+
802847
func (s *ApiStage) IgnoreRepositoryExists() *ApiStage {
803848
ignoredRepo := fmt.Sprintf(
804849
"%s/%s",

internal/api/stages/fakegithub/comments.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func (f *FakeGitHub) postCommentHandler(w http.ResponseWriter, r *http.Request)
4444
err = json.Unmarshal(payload, &comment)
4545
require.NoError(f.t, err)
4646

47-
f.reportedComment = comment
47+
f.reportedComments = append(f.reportedComments, comment)
4848

4949
w.Header().Set("Content-Type", "application/json")
5050

internal/api/stages/fakegithub/github.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ type FakeGitHub struct {
5454
events []*github.IssueEvent
5555

5656
reportedStatus *github.RepoStatus
57-
reportedComment *github.IssueComment
57+
reportedComments []*github.IssueComment
5858
reportedLabels []string
5959
requestedTeamReviewers []string
6060
}
@@ -143,11 +143,11 @@ func (f *FakeGitHub) Org() *Org { return f.org }
143143
func (f *FakeGitHub) Repo() *Repo { return f.repo }
144144
func (f *FakeGitHub) PR() *PR { return f.pr }
145145

146-
func (f *FakeGitHub) ReportedLabels() []string { return f.reportedLabels }
147-
func (f *FakeGitHub) ReportedStatus() *github.RepoStatus { return f.reportedStatus }
148-
func (f *FakeGitHub) ReportedComment() *github.IssueComment { return f.reportedComment }
149-
func (f *FakeGitHub) RequestedTeamReviews() []string { return f.requestedTeamReviewers }
150-
func (f *FakeGitHub) Comments() []*github.IssueComment { return f.issueComments }
146+
func (f *FakeGitHub) ReportedLabels() []string { return f.reportedLabels }
147+
func (f *FakeGitHub) ReportedStatus() *github.RepoStatus { return f.reportedStatus }
148+
func (f *FakeGitHub) ReportedComments() []*github.IssueComment { return f.reportedComments }
149+
func (f *FakeGitHub) RequestedTeamReviews() []string { return f.requestedTeamReviewers }
150+
func (f *FakeGitHub) Comments() []*github.IssueComment { return f.issueComments }
151151

152152
func (f *FakeGitHub) URL() string {
153153
return fmt.Sprintf("%s", f.ts.URL)

0 commit comments

Comments
 (0)