2020-04-05 09:20:50 +03:00
// Copyright 2020 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2020-04-05 09:20:50 +03:00
2022-06-13 12:37:59 +03:00
package issues_test
2018-08-06 07:43:22 +03:00
import (
"testing"
2022-01-20 02:26:57 +03:00
"code.gitea.io/gitea/models/db"
2022-06-13 12:37:59 +03:00
issues_model "code.gitea.io/gitea/models/issues"
2023-11-05 16:25:40 +03:00
repo_model "code.gitea.io/gitea/models/repo"
2021-11-12 17:36:47 +03:00
"code.gitea.io/gitea/models/unittest"
2021-11-24 12:49:20 +03:00
user_model "code.gitea.io/gitea/models/user"
2021-11-17 15:34:35 +03:00
2018-08-06 07:43:22 +03:00
"github.com/stretchr/testify/assert"
)
func TestGetReviewByID ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2022-06-13 12:37:59 +03:00
review , err := issues_model . GetReviewByID ( db . DefaultContext , 1 )
2018-08-06 07:43:22 +03:00
assert . NoError ( t , err )
assert . Equal ( t , "Demo Review" , review . Content )
2022-06-13 12:37:59 +03:00
assert . Equal ( t , issues_model . ReviewTypeApprove , review . Type )
2018-08-06 07:43:22 +03:00
2022-06-13 12:37:59 +03:00
_ , err = issues_model . GetReviewByID ( db . DefaultContext , 23892 )
2018-08-06 07:43:22 +03:00
assert . Error ( t , err )
2022-06-13 12:37:59 +03:00
assert . True ( t , issues_model . IsErrReviewNotExist ( err ) , "IsErrReviewNotExist" )
2018-08-06 07:43:22 +03:00
}
func TestReview_LoadAttributes ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2022-08-16 05:22:25 +03:00
review := unittest . AssertExistsAndLoadBean ( t , & issues_model . Review { ID : 1 } )
2022-01-20 02:26:57 +03:00
assert . NoError ( t , review . LoadAttributes ( db . DefaultContext ) )
2018-08-06 07:43:22 +03:00
assert . NotNil ( t , review . Issue )
assert . NotNil ( t , review . Reviewer )
2022-08-16 05:22:25 +03:00
invalidReview1 := unittest . AssertExistsAndLoadBean ( t , & issues_model . Review { ID : 2 } )
2022-01-20 02:26:57 +03:00
assert . Error ( t , invalidReview1 . LoadAttributes ( db . DefaultContext ) )
2018-08-06 07:43:22 +03:00
2022-08-16 05:22:25 +03:00
invalidReview2 := unittest . AssertExistsAndLoadBean ( t , & issues_model . Review { ID : 3 } )
2022-01-20 02:26:57 +03:00
assert . Error ( t , invalidReview2 . LoadAttributes ( db . DefaultContext ) )
2018-08-06 07:43:22 +03:00
}
func TestReview_LoadCodeComments ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2018-08-06 07:43:22 +03:00
2022-08-16 05:22:25 +03:00
review := unittest . AssertExistsAndLoadBean ( t , & issues_model . Review { ID : 4 } )
2022-01-20 02:26:57 +03:00
assert . NoError ( t , review . LoadAttributes ( db . DefaultContext ) )
assert . NoError ( t , review . LoadCodeComments ( db . DefaultContext ) )
2018-08-06 07:43:22 +03:00
assert . Len ( t , review . CodeComments , 1 )
assert . Equal ( t , int64 ( 4 ) , review . CodeComments [ "README.md" ] [ int64 ( 4 ) ] [ 0 ] . Line )
}
func TestReviewType_Icon ( t * testing . T ) {
2022-06-13 12:37:59 +03:00
assert . Equal ( t , "check" , issues_model . ReviewTypeApprove . Icon ( ) )
assert . Equal ( t , "diff" , issues_model . ReviewTypeReject . Icon ( ) )
assert . Equal ( t , "comment" , issues_model . ReviewTypeComment . Icon ( ) )
assert . Equal ( t , "comment" , issues_model . ReviewTypeUnknown . Icon ( ) )
assert . Equal ( t , "dot-fill" , issues_model . ReviewTypeRequest . Icon ( ) )
assert . Equal ( t , "comment" , issues_model . ReviewType ( 6 ) . Icon ( ) )
2018-08-06 07:43:22 +03:00
}
func TestFindReviews ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2022-06-13 12:37:59 +03:00
reviews , err := issues_model . FindReviews ( db . DefaultContext , issues_model . FindReviewOptions {
2024-10-01 04:58:55 +03:00
Types : [ ] issues_model . ReviewType { issues_model . ReviewTypeApprove } ,
2018-08-06 07:43:22 +03:00
IssueID : 2 ,
ReviewerID : 1 ,
} )
assert . NoError ( t , err )
assert . Len ( t , reviews , 1 )
assert . Equal ( t , "Demo Review" , reviews [ 0 ] . Content )
}
2023-06-09 17:34:49 +03:00
func TestFindLatestReviews ( t * testing . T ) {
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
reviews , err := issues_model . FindLatestReviews ( db . DefaultContext , issues_model . FindReviewOptions {
2024-10-01 04:58:55 +03:00
Types : [ ] issues_model . ReviewType { issues_model . ReviewTypeApprove } ,
2023-06-09 17:34:49 +03:00
IssueID : 11 ,
} )
assert . NoError ( t , err )
assert . Len ( t , reviews , 2 )
assert . Equal ( t , "duplicate review from user5 (latest)" , reviews [ 0 ] . Content )
2023-09-14 05:59:53 +03:00
assert . Equal ( t , "singular review from org6 and final review for this pr" , reviews [ 1 ] . Content )
2023-06-09 17:34:49 +03:00
}
2018-08-06 07:43:22 +03:00
func TestGetCurrentReview ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2022-08-16 05:22:25 +03:00
issue := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : 2 } )
user := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 1 } )
2018-08-06 07:43:22 +03:00
2022-06-13 12:37:59 +03:00
review , err := issues_model . GetCurrentReview ( db . DefaultContext , user , issue )
2018-08-06 07:43:22 +03:00
assert . NoError ( t , err )
assert . NotNil ( t , review )
2022-06-13 12:37:59 +03:00
assert . Equal ( t , issues_model . ReviewTypePending , review . Type )
2018-08-06 07:43:22 +03:00
assert . Equal ( t , "Pending Review" , review . Content )
2022-08-16 05:22:25 +03:00
user2 := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 7 } )
2022-06-13 12:37:59 +03:00
review2 , err := issues_model . GetCurrentReview ( db . DefaultContext , user2 , issue )
2018-08-06 07:43:22 +03:00
assert . Error ( t , err )
2022-06-13 12:37:59 +03:00
assert . True ( t , issues_model . IsErrReviewNotExist ( err ) )
2018-08-06 07:43:22 +03:00
assert . Nil ( t , review2 )
}
func TestCreateReview ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2018-08-06 07:43:22 +03:00
2022-08-16 05:22:25 +03:00
issue := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : 2 } )
user := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 1 } )
2018-08-06 07:43:22 +03:00
2022-06-13 12:37:59 +03:00
review , err := issues_model . CreateReview ( db . DefaultContext , issues_model . CreateReviewOptions {
2018-08-06 07:43:22 +03:00
Content : "New Review" ,
2022-06-13 12:37:59 +03:00
Type : issues_model . ReviewTypePending ,
2018-08-06 07:43:22 +03:00
Issue : issue ,
Reviewer : user ,
} )
assert . NoError ( t , err )
assert . Equal ( t , "New Review" , review . Content )
2022-06-13 12:37:59 +03:00
unittest . AssertExistsAndLoadBean ( t , & issues_model . Review { Content : "New Review" } )
2018-08-06 07:43:22 +03:00
}
2019-12-04 04:08:56 +03:00
func TestGetReviewersByIssueID ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2018-11-22 16:17:36 +03:00
2022-08-16 05:22:25 +03:00
issue := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : 3 } )
user2 := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 2 } )
2023-09-14 05:59:53 +03:00
org3 := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 3 } )
2022-08-16 05:22:25 +03:00
user4 := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 4 } )
2018-11-22 16:17:36 +03:00
2022-06-13 12:37:59 +03:00
expectedReviews := [ ] * issues_model . Review { }
2019-12-04 04:08:56 +03:00
expectedReviews = append ( expectedReviews ,
2022-06-13 12:37:59 +03:00
& issues_model . Review {
2023-09-14 05:59:53 +03:00
Reviewer : org3 ,
2022-06-13 12:37:59 +03:00
Type : issues_model . ReviewTypeReject ,
2019-12-04 04:08:56 +03:00
UpdatedUnix : 946684812 ,
2018-11-22 16:17:36 +03:00
} ,
2022-06-13 12:37:59 +03:00
& issues_model . Review {
2019-12-04 04:08:56 +03:00
Reviewer : user4 ,
2022-06-13 12:37:59 +03:00
Type : issues_model . ReviewTypeApprove ,
2019-12-04 04:08:56 +03:00
UpdatedUnix : 946684813 ,
} ,
2022-06-13 12:37:59 +03:00
& issues_model . Review {
2019-12-04 04:08:56 +03:00
Reviewer : user2 ,
2022-06-13 12:37:59 +03:00
Type : issues_model . ReviewTypeReject ,
2019-12-04 04:08:56 +03:00
UpdatedUnix : 946684814 ,
2018-11-22 16:17:36 +03:00
} )
2023-09-25 16:17:37 +03:00
allReviews , err := issues_model . GetReviewsByIssueID ( db . DefaultContext , issue . ID )
2023-05-25 05:06:27 +03:00
assert . NoError ( t , err )
for _ , review := range allReviews {
assert . NoError ( t , review . LoadReviewer ( db . DefaultContext ) )
2020-10-12 22:55:13 +03:00
}
2023-05-25 05:06:27 +03:00
if assert . Len ( t , allReviews , 3 ) {
for i , review := range allReviews {
assert . Equal ( t , expectedReviews [ i ] . Reviewer , review . Reviewer )
assert . Equal ( t , expectedReviews [ i ] . Type , review . Type )
assert . Equal ( t , expectedReviews [ i ] . UpdatedUnix , review . UpdatedUnix )
}
}
2023-09-25 16:17:37 +03:00
allReviews , err = issues_model . GetReviewsByIssueID ( db . DefaultContext , issue . ID )
2018-11-22 16:17:36 +03:00
assert . NoError ( t , err )
2023-07-20 10:18:52 +03:00
assert . NoError ( t , allReviews . LoadReviewers ( db . DefaultContext ) )
2020-05-02 03:20:51 +03:00
if assert . Len ( t , allReviews , 3 ) {
for i , review := range allReviews {
assert . Equal ( t , expectedReviews [ i ] . Reviewer , review . Reviewer )
assert . Equal ( t , expectedReviews [ i ] . Type , review . Type )
assert . Equal ( t , expectedReviews [ i ] . UpdatedUnix , review . UpdatedUnix )
}
2019-12-04 04:08:56 +03:00
}
2018-11-22 16:17:36 +03:00
}
2021-02-11 20:32:25 +03:00
func TestDismissReview ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2021-04-15 13:03:11 +03:00
2022-08-16 05:22:25 +03:00
rejectReviewExample := unittest . AssertExistsAndLoadBean ( t , & issues_model . Review { ID : 9 } )
requestReviewExample := unittest . AssertExistsAndLoadBean ( t , & issues_model . Review { ID : 11 } )
approveReviewExample := unittest . AssertExistsAndLoadBean ( t , & issues_model . Review { ID : 8 } )
2021-04-15 13:03:11 +03:00
assert . False ( t , rejectReviewExample . Dismissed )
assert . False ( t , requestReviewExample . Dismissed )
assert . False ( t , approveReviewExample . Dismissed )
2023-07-20 10:18:52 +03:00
assert . NoError ( t , issues_model . DismissReview ( db . DefaultContext , rejectReviewExample , true ) )
2022-08-16 05:22:25 +03:00
rejectReviewExample = unittest . AssertExistsAndLoadBean ( t , & issues_model . Review { ID : 9 } )
requestReviewExample = unittest . AssertExistsAndLoadBean ( t , & issues_model . Review { ID : 11 } )
2021-04-15 13:03:11 +03:00
assert . True ( t , rejectReviewExample . Dismissed )
assert . False ( t , requestReviewExample . Dismissed )
2023-07-20 10:18:52 +03:00
assert . NoError ( t , issues_model . DismissReview ( db . DefaultContext , requestReviewExample , true ) )
2022-08-16 05:22:25 +03:00
rejectReviewExample = unittest . AssertExistsAndLoadBean ( t , & issues_model . Review { ID : 9 } )
requestReviewExample = unittest . AssertExistsAndLoadBean ( t , & issues_model . Review { ID : 11 } )
2021-04-15 13:03:11 +03:00
assert . True ( t , rejectReviewExample . Dismissed )
assert . False ( t , requestReviewExample . Dismissed )
assert . False ( t , approveReviewExample . Dismissed )
2023-07-20 10:18:52 +03:00
assert . NoError ( t , issues_model . DismissReview ( db . DefaultContext , requestReviewExample , true ) )
2022-08-16 05:22:25 +03:00
rejectReviewExample = unittest . AssertExistsAndLoadBean ( t , & issues_model . Review { ID : 9 } )
requestReviewExample = unittest . AssertExistsAndLoadBean ( t , & issues_model . Review { ID : 11 } )
2021-04-15 13:03:11 +03:00
assert . True ( t , rejectReviewExample . Dismissed )
assert . False ( t , requestReviewExample . Dismissed )
assert . False ( t , approveReviewExample . Dismissed )
2023-07-20 10:18:52 +03:00
assert . NoError ( t , issues_model . DismissReview ( db . DefaultContext , requestReviewExample , false ) )
2022-08-16 05:22:25 +03:00
rejectReviewExample = unittest . AssertExistsAndLoadBean ( t , & issues_model . Review { ID : 9 } )
requestReviewExample = unittest . AssertExistsAndLoadBean ( t , & issues_model . Review { ID : 11 } )
2021-04-15 13:03:11 +03:00
assert . True ( t , rejectReviewExample . Dismissed )
assert . False ( t , requestReviewExample . Dismissed )
assert . False ( t , approveReviewExample . Dismissed )
2023-07-20 10:18:52 +03:00
assert . NoError ( t , issues_model . DismissReview ( db . DefaultContext , requestReviewExample , false ) )
2022-08-16 05:22:25 +03:00
rejectReviewExample = unittest . AssertExistsAndLoadBean ( t , & issues_model . Review { ID : 9 } )
requestReviewExample = unittest . AssertExistsAndLoadBean ( t , & issues_model . Review { ID : 11 } )
2021-04-15 13:03:11 +03:00
assert . True ( t , rejectReviewExample . Dismissed )
assert . False ( t , requestReviewExample . Dismissed )
assert . False ( t , approveReviewExample . Dismissed )
2023-07-20 10:18:52 +03:00
assert . NoError ( t , issues_model . DismissReview ( db . DefaultContext , rejectReviewExample , false ) )
2021-04-15 13:03:11 +03:00
assert . False ( t , rejectReviewExample . Dismissed )
assert . False ( t , requestReviewExample . Dismissed )
assert . False ( t , approveReviewExample . Dismissed )
2023-07-20 10:18:52 +03:00
assert . NoError ( t , issues_model . DismissReview ( db . DefaultContext , approveReviewExample , true ) )
2021-04-15 13:03:11 +03:00
assert . False ( t , rejectReviewExample . Dismissed )
assert . False ( t , requestReviewExample . Dismissed )
assert . True ( t , approveReviewExample . Dismissed )
2021-02-11 20:32:25 +03:00
}
2023-01-15 08:00:09 +03:00
func TestDeleteReview ( t * testing . T ) {
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
issue := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : 2 } )
user := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 1 } )
review1 , err := issues_model . CreateReview ( db . DefaultContext , issues_model . CreateReviewOptions {
Content : "Official rejection" ,
Type : issues_model . ReviewTypeReject ,
Official : false ,
Issue : issue ,
Reviewer : user ,
} )
assert . NoError ( t , err )
review2 , err := issues_model . CreateReview ( db . DefaultContext , issues_model . CreateReviewOptions {
Content : "Official approval" ,
Type : issues_model . ReviewTypeApprove ,
Official : true ,
Issue : issue ,
Reviewer : user ,
} )
assert . NoError ( t , err )
2023-09-29 15:12:54 +03:00
assert . NoError ( t , issues_model . DeleteReview ( db . DefaultContext , review2 ) )
2023-01-15 08:00:09 +03:00
_ , err = issues_model . GetReviewByID ( db . DefaultContext , review2 . ID )
assert . Error ( t , err )
assert . True ( t , issues_model . IsErrReviewNotExist ( err ) , "IsErrReviewNotExist" )
review1 , err = issues_model . GetReviewByID ( db . DefaultContext , review1 . ID )
assert . NoError ( t , err )
assert . True ( t , review1 . Official )
}
2023-11-05 16:25:40 +03:00
func TestDeleteDismissedReview ( t * testing . T ) {
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
issue := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : 2 } )
user := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 1 } )
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : issue . RepoID } )
review , err := issues_model . CreateReview ( db . DefaultContext , issues_model . CreateReviewOptions {
Content : "reject" ,
Type : issues_model . ReviewTypeReject ,
Official : false ,
Issue : issue ,
Reviewer : user ,
} )
assert . NoError ( t , err )
assert . NoError ( t , issues_model . DismissReview ( db . DefaultContext , review , true ) )
comment , err := issues_model . CreateComment ( db . DefaultContext , & issues_model . CreateCommentOptions {
Type : issues_model . CommentTypeDismissReview ,
Doer : user ,
Repo : repo ,
Issue : issue ,
ReviewID : review . ID ,
Content : "dismiss" ,
} )
assert . NoError ( t , err )
unittest . AssertExistsAndLoadBean ( t , & issues_model . Comment { ID : comment . ID } )
assert . NoError ( t , issues_model . DeleteReview ( db . DefaultContext , review ) )
unittest . AssertNotExistsBean ( t , & issues_model . Comment { ID : comment . ID } )
}
2024-03-28 18:19:24 +03:00
func TestAddReviewRequest ( t * testing . T ) {
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
pull := unittest . AssertExistsAndLoadBean ( t , & issues_model . PullRequest { ID : 1 } )
assert . NoError ( t , pull . LoadIssue ( db . DefaultContext ) )
issue := pull . Issue
assert . NoError ( t , issue . LoadRepo ( db . DefaultContext ) )
reviewer := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 1 } )
_ , err := issues_model . CreateReview ( db . DefaultContext , issues_model . CreateReviewOptions {
Issue : issue ,
Reviewer : reviewer ,
Type : issues_model . ReviewTypeReject ,
} )
assert . NoError ( t , err )
pull . HasMerged = false
assert . NoError ( t , pull . UpdateCols ( db . DefaultContext , "has_merged" ) )
issue . IsClosed = true
_ , err = issues_model . AddReviewRequest ( db . DefaultContext , issue , reviewer , & user_model . User { } )
assert . Error ( t , err )
assert . True ( t , issues_model . IsErrReviewRequestOnClosedPR ( err ) )
pull . HasMerged = true
assert . NoError ( t , pull . UpdateCols ( db . DefaultContext , "has_merged" ) )
issue . IsClosed = false
_ , err = issues_model . AddReviewRequest ( db . DefaultContext , issue , reviewer , & user_model . User { } )
assert . Error ( t , err )
assert . True ( t , issues_model . IsErrReviewRequestOnClosedPR ( err ) )
}