* prevent empty review comment This would only require a comment for rejection and comment * add tests * add commentmaster
@@ -402,6 +402,14 @@ func (f SubmitReviewForm) ReviewType() models.ReviewType { | |||||
} | } | ||||
} | } | ||||
// HasEmptyContent checks if the content of the review form is empty. | |||||
func (f SubmitReviewForm) HasEmptyContent() bool { | |||||
reviewType := f.ReviewType() | |||||
return (reviewType == models.ReviewTypeComment || reviewType == models.ReviewTypeReject) && | |||||
len(strings.TrimSpace(f.Content)) == 0 | |||||
} | |||||
// __________ .__ | // __________ .__ | ||||
// \______ \ ____ | | ____ _____ ______ ____ | // \______ \ ____ | | ____ _____ ______ ____ | ||||
// | _// __ \| | _/ __ \\__ \ / ___// __ \ | // | _// __ \| | _/ __ \\__ \ / ___// __ \ | ||||
@@ -0,0 +1,41 @@ | |||||
// Copyright 2018 The Gitea Authors. All rights reserved. | |||||
// Use of this source code is governed by a MIT-style | |||||
// license that can be found in the LICENSE file. | |||||
package auth | |||||
import ( | |||||
"testing" | |||||
"github.com/stretchr/testify/assert" | |||||
) | |||||
func TestSubmitReviewForm_IsEmpty(t *testing.T) { | |||||
cases := []struct { | |||||
form SubmitReviewForm | |||||
expected bool | |||||
}{ | |||||
// Approved PR with a comment shouldn't count as empty | |||||
{SubmitReviewForm{Type: "approve", Content: "Awesome"}, false}, | |||||
// Approved PR without a comment shouldn't count as empty | |||||
{SubmitReviewForm{Type: "approve", Content: ""}, false}, | |||||
// Rejected PR without a comment should count as empty | |||||
{SubmitReviewForm{Type: "reject", Content: ""}, true}, | |||||
// Rejected PR with a comment shouldn't count as empty | |||||
{SubmitReviewForm{Type: "reject", Content: "Awesome"}, false}, | |||||
// Comment review on a PR with a comment shouldn't count as empty | |||||
{SubmitReviewForm{Type: "comment", Content: "Awesome"}, false}, | |||||
// Comment review on a PR without a comment should count as empty | |||||
{SubmitReviewForm{Type: "comment", Content: ""}, true}, | |||||
} | |||||
for _, v := range cases { | |||||
assert.Equal(t, v.expected, v.form.HasEmptyContent()) | |||||
} | |||||
} |
@@ -815,6 +815,7 @@ issues.dependency.add_error_cannot_create_circular = You cannot create a depende | |||||
issues.dependency.add_error_dep_not_same_repo = Both issues must be in the same repository. | issues.dependency.add_error_dep_not_same_repo = Both issues must be in the same repository. | ||||
issues.review.approve = "approved these changes %s" | issues.review.approve = "approved these changes %s" | ||||
issues.review.comment = "reviewed %s" | issues.review.comment = "reviewed %s" | ||||
issues.review.content.empty = You need to leave a comment indicating the requested change(s). | |||||
issues.review.reject = "rejected these changes %s" | issues.review.reject = "rejected these changes %s" | ||||
issues.review.pending = Pending | issues.review.pending = Pending | ||||
issues.review.review = Review | issues.review.review = Review | ||||
@@ -107,6 +107,13 @@ func SubmitReview(ctx *context.Context, form auth.SubmitReviewForm) { | |||||
ctx.ServerError("GetCurrentReview", fmt.Errorf("unknown ReviewType: %s", form.Type)) | ctx.ServerError("GetCurrentReview", fmt.Errorf("unknown ReviewType: %s", form.Type)) | ||||
return | return | ||||
} | } | ||||
if form.HasEmptyContent() { | |||||
ctx.Flash.Error(ctx.Tr("repo.issues.review.content.empty")) | |||||
ctx.Redirect(fmt.Sprintf("%s/pulls/%d", ctx.Repo.RepoLink, issue.Index)) | |||||
return | |||||
} | |||||
review, err = models.GetCurrentReview(ctx.User, issue) | review, err = models.GetCurrentReview(ctx.User, issue) | ||||
if err != nil { | if err != nil { | ||||
if !models.IsErrReviewNotExist(err) { | if !models.IsErrReviewNotExist(err) { | ||||