review stuff
This commit is contained in:
parent
69776dc5dc
commit
8ab35475fc
@ -12,10 +12,9 @@ import (
|
|||||||
|
|
||||||
type PRInfo struct {
|
type PRInfo struct {
|
||||||
pr *models.PullRequest
|
pr *models.PullRequest
|
||||||
reviews []*models.PullReview
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type ReviewSet struct {
|
type PRSet struct {
|
||||||
prs []PRInfo
|
prs []PRInfo
|
||||||
config *common.AutogitConfig
|
config *common.AutogitConfig
|
||||||
}
|
}
|
||||||
@ -46,16 +45,16 @@ func readPRData(gitea common.GiteaPRFetcher, org, repo string, num int64, curren
|
|||||||
return retSet, nil
|
return retSet, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func FetchReviewSet(gitea common.GiteaPRFetcher, org, repo string, num int64, config *common.AutogitConfig) (*ReviewSet, error) {
|
func FetchPRSet(gitea common.GiteaPRFetcher, org, repo string, num int64, config *common.AutogitConfig) (*PRSet, error) {
|
||||||
prs, err := readPRData(gitea, org, repo, num, nil)
|
prs, err := readPRData(gitea, org, repo, num, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return &ReviewSet{prs: prs, config: config}, nil
|
return &PRSet{prs: prs, config: config}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rs *ReviewSet) GetPrjGitPR() (*models.PullRequest, error) {
|
func (rs *PRSet) GetPrjGitPR() (*models.PullRequest, error) {
|
||||||
var ret *models.PullRequest
|
var ret *models.PullRequest
|
||||||
|
|
||||||
for _, prinfo := range rs.prs {
|
for _, prinfo := range rs.prs {
|
||||||
@ -75,7 +74,7 @@ func (rs *ReviewSet) GetPrjGitPR() (*models.PullRequest, error) {
|
|||||||
return nil, errors.New("No PrjGit PR found")
|
return nil, errors.New("No PrjGit PR found")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rs *ReviewSet) IsConsistent() bool {
|
func (rs *PRSet) IsConsistent() bool {
|
||||||
prjpr, err := rs.GetPrjGitPR()
|
prjpr, err := rs.GetPrjGitPR()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false
|
return false
|
||||||
@ -97,7 +96,7 @@ func (rs *ReviewSet) IsConsistent() bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rs *ReviewSet) IsReviewed() bool {
|
func (rs *PRSet) IsReviewed() bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ func TestPR(t *testing.T) {
|
|||||||
prjGitPRIndex int
|
prjGitPRIndex int
|
||||||
|
|
||||||
customMockSetup func(*mock_common.MockGiteaPRFetcher) error
|
customMockSetup func(*mock_common.MockGiteaPRFetcher) error
|
||||||
reviewSetFetcher func(*mock_common.MockGiteaPRFetcher) (*ReviewSet, error)
|
reviewSetFetcher func(*mock_common.MockGiteaPRFetcher) (*PRSet, error)
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "Error fetching PullRequest",
|
name: "Error fetching PullRequest",
|
||||||
@ -109,8 +109,8 @@ func TestPR(t *testing.T) {
|
|||||||
resLen: 1,
|
resLen: 1,
|
||||||
prjGitPRIndex: 0,
|
prjGitPRIndex: 0,
|
||||||
consistentSet: true,
|
consistentSet: true,
|
||||||
reviewSetFetcher: func(mock *mock_common.MockGiteaPRFetcher) (*ReviewSet, error) {
|
reviewSetFetcher: func(mock *mock_common.MockGiteaPRFetcher) (*PRSet, error) {
|
||||||
return FetchReviewSet(mock, "foo", "barPrj", 42, &baseConfig)
|
return FetchPRSet(mock, "foo", "barPrj", 42, &baseConfig)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -155,12 +155,12 @@ func TestPR(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var res *ReviewSet
|
var res *PRSet
|
||||||
var err error
|
var err error
|
||||||
if test.reviewSetFetcher != nil {
|
if test.reviewSetFetcher != nil {
|
||||||
res, err = test.reviewSetFetcher(mock)
|
res, err = test.reviewSetFetcher(mock)
|
||||||
} else {
|
} else {
|
||||||
res, err = FetchReviewSet(mock, "test", "repo", 42, &baseConfig)
|
res, err = FetchPRSet(mock, "test", "repo", 42, &baseConfig)
|
||||||
}
|
}
|
||||||
if err == nil {
|
if err == nil {
|
||||||
if test_err != nil {
|
if test_err != nil {
|
||||||
|
43
workflow-pr/reviews.go
Normal file
43
workflow-pr/reviews.go
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"src.opensuse.org/autogits/common"
|
||||||
|
"src.opensuse.org/autogits/common/gitea-generated/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
type PRReviews struct {
|
||||||
|
reviews []*models.PullReview
|
||||||
|
reviewers []string
|
||||||
|
}
|
||||||
|
|
||||||
|
func FetchReviews(rf common.GiteaReviewFetcher, reviewers []string, org, repo string, no int64) (*PRReviews, error) {
|
||||||
|
reviews, err := rf.GetPullRequestReviews(org, repo, no)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &PRReviews{
|
||||||
|
reviews: reviews,
|
||||||
|
reviewers: reviewers,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *PRReviews) IsReviewed() bool {
|
||||||
|
goodReview := false
|
||||||
|
|
||||||
|
for _, reviewer := range r.reviewers {
|
||||||
|
goodReview = false
|
||||||
|
for _, review := range r.reviews {
|
||||||
|
if review.User.UserName == reviewer && review.State == common.ReviewStateApproved && !review.Stale {
|
||||||
|
goodReview = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !goodReview {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return goodReview
|
||||||
|
}
|
74
workflow-pr/reviews_test.go
Normal file
74
workflow-pr/reviews_test.go
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"go.uber.org/mock/gomock"
|
||||||
|
"src.opensuse.org/autogits/common"
|
||||||
|
"src.opensuse.org/autogits/common/gitea-generated/models"
|
||||||
|
mock_common "src.opensuse.org/autogits/common/mock"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestReviews(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
reviews []*models.PullReview
|
||||||
|
reviewers []string
|
||||||
|
fetchErr error
|
||||||
|
isReviewed bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "Reviews of unreviews PR",
|
||||||
|
isReviewed: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Single reviewer done",
|
||||||
|
reviews: []*models.PullReview{&models.PullReview{State: common.ReviewStateApproved, User: &models.User{UserName: "user1"}}},
|
||||||
|
reviewers: []string{"user1"},
|
||||||
|
isReviewed: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Two reviewer, one not approved",
|
||||||
|
reviews: []*models.PullReview{&models.PullReview{State: common.ReviewStateApproved, User: &models.User{UserName: "user1"}}},
|
||||||
|
reviewers: []string{"user1", "user2"},
|
||||||
|
isReviewed: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Two reviewer, one stale approved",
|
||||||
|
reviews: []*models.PullReview{
|
||||||
|
&models.PullReview{State: common.ReviewStateApproved, User: &models.User{UserName: "user1"}},
|
||||||
|
&models.PullReview{State: common.ReviewStateApproved, User: &models.User{UserName: "user2"}, Stale: true},
|
||||||
|
},
|
||||||
|
reviewers: []string{"user1", "user2"},
|
||||||
|
isReviewed: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Two reviewer approved",
|
||||||
|
reviews: []*models.PullReview{
|
||||||
|
&models.PullReview{State: common.ReviewStateApproved, User: &models.User{UserName: "user1"}},
|
||||||
|
&models.PullReview{State: common.ReviewStateApproved, User: &models.User{UserName: "user2"}},
|
||||||
|
},
|
||||||
|
reviewers: []string{"user1", "user2"},
|
||||||
|
isReviewed: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
ctl := gomock.NewController(t)
|
||||||
|
rf := mock_common.NewMockGiteaReviewFetcher(ctl)
|
||||||
|
|
||||||
|
rf.EXPECT().GetPullRequestReviews("test", "pr", int64(1)).Return(test.reviews, test.fetchErr)
|
||||||
|
|
||||||
|
reviews, err := FetchReviews(rf, test.reviewers, "test", "pr", 1)
|
||||||
|
|
||||||
|
if err != test.fetchErr {
|
||||||
|
t.Fatal("FetchReviews() failed with unexpected error:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if r := reviews.IsReviewed(); r != test.isReviewed {
|
||||||
|
t.Fatal("Unexpected IsReviewed():", r, "vs. expected", test.isReviewed)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user