44package integration
55
66import (
7+ "bytes"
8+ "context"
79 "fmt"
810 "io"
911 "net/http"
@@ -19,6 +21,7 @@ import (
1921 "code.gitea.io/gitea/modules/setting"
2022 api "code.gitea.io/gitea/modules/structs"
2123 "code.gitea.io/gitea/services/forms"
24+ "code.gitea.io/gitea/services/gitdiff"
2225 issue_service "code.gitea.io/gitea/services/issue"
2326 "code.gitea.io/gitea/tests"
2427
@@ -41,25 +44,97 @@ func TestAPIViewPulls(t *testing.T) {
4144 expectedLen := unittest .GetCount (t , & issues_model.Issue {RepoID : repo .ID }, unittest .Cond ("is_pull = ?" , true ))
4245 assert .Len (t , pulls , expectedLen )
4346
47+ assert .Len (t , pulls , 3 )
4448 pull := pulls [0 ]
49+ assert .EqualValues (t , 1 , pull .Poster .ID )
50+ assert .Len (t , pull .RequestedReviewers , 2 )
51+ assert .Len (t , pull .RequestedReviewersTeams , 0 )
52+ assert .EqualValues (t , 5 , pull .RequestedReviewers [0 ].ID )
53+ assert .EqualValues (t , 6 , pull .RequestedReviewers [1 ].ID )
54+ assert .EqualValues (t , 2 , pull .ChangedFiles )
55+
4556 if assert .EqualValues (t , 5 , pull .ID ) {
4657 resp = ctx .Session .MakeRequest (t , NewRequest (t , "GET" , pull .DiffURL ), http .StatusOK )
47- _ , err := io .ReadAll (resp .Body )
58+ bs , err := io .ReadAll (resp .Body )
59+ assert .NoError (t , err )
60+ patch , err := gitdiff .ParsePatch (context .Background (), 1000 , 5000 , 10 , bytes .NewReader (bs ), "" )
4861 assert .NoError (t , err )
49- // TODO: use diff to generate stats to test against
62+ if assert .Len (t , patch .Files , pull .ChangedFiles ) {
63+ assert .Equal (t , "File-WoW" , patch .Files [0 ].Name )
64+ assert .Empty (t , patch .Files [0 ].OldName )
65+ assert .EqualValues (t , pull .Additions , patch .Files [0 ].Addition )
66+ assert .EqualValues (t , pull .Deletions , patch .Files [0 ].Deletion )
67+ assert .Equal (t , gitdiff .DiffFileAdd , patch .Files [0 ].Type )
68+ }
5069
5170 t .Run (fmt .Sprintf ("APIGetPullFiles_%d" , pull .ID ),
5271 doAPIGetPullFiles (ctx , pull , func (t * testing.T , files []* api.ChangedFile ) {
53- if assert .Len (t , files , 1 ) {
72+ if assert .Len (t , files , pull . ChangedFiles ) {
5473 assert .Equal (t , "File-WoW" , files [0 ].Filename )
5574 assert .Empty (t , files [0 ].PreviousFilename )
56- assert .EqualValues (t , 1 , files [0 ].Additions )
57- assert .EqualValues (t , 1 , files [0 ].Changes )
58- assert .EqualValues (t , 0 , files [0 ].Deletions )
75+ assert .EqualValues (t , pull .Additions , files [0 ].Additions )
76+ assert .EqualValues (t , pull .Deletions , files [0 ].Deletions )
5977 assert .Equal (t , "added" , files [0 ].Status )
6078 }
6179 }))
6280 }
81+
82+ pull = pulls [1 ]
83+ assert .EqualValues (t , 1 , pull .Poster .ID )
84+ assert .Len (t , pull .RequestedReviewers , 4 )
85+ assert .Len (t , pull .RequestedReviewersTeams , 0 )
86+ assert .EqualValues (t , 3 , pull .RequestedReviewers [0 ].ID )
87+ assert .EqualValues (t , 4 , pull .RequestedReviewers [1 ].ID )
88+ assert .EqualValues (t , 2 , pull .RequestedReviewers [2 ].ID )
89+ assert .EqualValues (t , 5 , pull .RequestedReviewers [3 ].ID )
90+ assert .EqualValues (t , 1 , pull .ChangedFiles )
91+
92+ if assert .EqualValues (t , 2 , pull .ID ) {
93+ resp = ctx .Session .MakeRequest (t , NewRequest (t , "GET" , pull .DiffURL ), http .StatusOK )
94+ bs , err := io .ReadAll (resp .Body )
95+ assert .NoError (t , err )
96+ patch , err := gitdiff .ParsePatch (context .Background (), 1000 , 5000 , 10 , bytes .NewReader (bs ), "" )
97+ assert .NoError (t , err )
98+ if assert .Len (t , patch .Files , pull .ChangedFiles ) {
99+ assert .Equal (t , "README.md" , patch .Files [0 ].Name )
100+ assert .Empty (t , patch .Files [0 ].OldName )
101+ assert .EqualValues (t , pull .Additions , patch .Files [0 ].Addition )
102+ assert .EqualValues (t , pull .Deletions , patch .Files [0 ].Deletion )
103+ assert .Equal (t , gitdiff .DiffFileChange , patch .Files [0 ].Type )
104+ }
105+
106+ t .Run (fmt .Sprintf ("APIGetPullFiles_%d" , pull .ID ),
107+ doAPIGetPullFiles (ctx , pull , func (t * testing.T , files []* api.ChangedFile ) {
108+ if assert .Len (t , files , pull .ChangedFiles ) {
109+ assert .Equal (t , "README.md" , files [0 ].Filename )
110+ assert .Empty (t , files [0 ].PreviousFilename )
111+ assert .EqualValues (t , pull .Additions , files [0 ].Additions )
112+ assert .EqualValues (t , pull .Deletions , files [0 ].Deletions )
113+ assert .Equal (t , "changed" , files [0 ].Status )
114+ }
115+ }))
116+ }
117+
118+ pull = pulls [2 ]
119+ assert .EqualValues (t , 1 , pull .Poster .ID )
120+ assert .Len (t , pull .RequestedReviewers , 1 )
121+ assert .Len (t , pull .RequestedReviewersTeams , 0 )
122+ assert .EqualValues (t , 1 , pull .RequestedReviewers [0 ].ID )
123+ assert .EqualValues (t , 0 , pull .ChangedFiles )
124+
125+ if assert .EqualValues (t , 1 , pull .ID ) {
126+ resp = ctx .Session .MakeRequest (t , NewRequest (t , "GET" , pull .DiffURL ), http .StatusOK )
127+ bs , err := io .ReadAll (resp .Body )
128+ assert .NoError (t , err )
129+ patch , err := gitdiff .ParsePatch (context .Background (), 1000 , 5000 , 10 , bytes .NewReader (bs ), "" )
130+ assert .NoError (t , err )
131+ assert .EqualValues (t , pull .ChangedFiles , patch .NumFiles )
132+
133+ t .Run (fmt .Sprintf ("APIGetPullFiles_%d" , pull .ID ),
134+ doAPIGetPullFiles (ctx , pull , func (t * testing.T , files []* api.ChangedFile ) {
135+ assert .Len (t , files , pull .ChangedFiles )
136+ }))
137+ }
63138}
64139
65140func TestAPIViewPullsByBaseHead (t * testing.T ) {
0 commit comments