@@ -10,9 +10,14 @@ import (
1010 "code.gitea.io/gitea/models/db"
1111 repo_model "code.gitea.io/gitea/models/repo"
1212 "code.gitea.io/gitea/models/unittest"
13+ user_model "code.gitea.io/gitea/models/user"
1314 "code.gitea.io/gitea/modules/optional"
15+ "code.gitea.io/gitea/modules/setting"
16+ "code.gitea.io/gitea/modules/structs"
17+ "code.gitea.io/gitea/modules/test"
1418
1519 "github.com/stretchr/testify/assert"
20+ "github.com/stretchr/testify/require"
1621)
1722
1823func getTestCases () []struct {
@@ -182,7 +187,16 @@ func getTestCases() []struct {
182187
183188func TestSearchRepository (t * testing.T ) {
184189 assert .NoError (t , unittest .PrepareTestDatabase ())
190+ t .Run ("SearchRepositoryPublic" , testSearchRepositoryPublic )
191+ t .Run ("SearchRepositoryPublicRestricted" , testSearchRepositoryRestricted )
192+ t .Run ("SearchRepositoryPrivate" , testSearchRepositoryPrivate )
193+ t .Run ("SearchRepositoryNonExistingOwner" , testSearchRepositoryNonExistingOwner )
194+ t .Run ("SearchRepositoryWithInDescription" , testSearchRepositoryWithInDescription )
195+ t .Run ("SearchRepositoryNotInDescription" , testSearchRepositoryNotInDescription )
196+ t .Run ("SearchRepositoryCases" , testSearchRepositoryCases )
197+ }
185198
199+ func testSearchRepositoryPublic (t * testing.T ) {
186200 // test search public repository on explore page
187201 repos , count , err := repo_model .SearchRepositoryByName (t .Context (), repo_model.SearchRepoOptions {
188202 ListOptions : db.ListOptions {
@@ -211,9 +225,42 @@ func TestSearchRepository(t *testing.T) {
211225 assert .NoError (t , err )
212226 assert .Equal (t , int64 (2 ), count )
213227 assert .Len (t , repos , 2 )
228+ }
229+
230+ func testSearchRepositoryRestricted (t * testing.T ) {
231+ defer test .MockVariableValue (& setting .Service .RequireSignInViewStrict , true )()
232+ user2 := unittest .AssertExistsAndLoadBean (t , & user_model.User {ID : 2 })
233+ restrictedUser := unittest .AssertExistsAndLoadBean (t , & user_model.User {ID : 29 , IsRestricted : true })
234+
235+ performSearch := func (t * testing.T , user * user_model.User ) (publicRepoIDs []int64 , totalCount int ) {
236+ repos , count , err := repo_model .SearchRepositoryByName (t .Context (), repo_model.SearchRepoOptions {
237+ ListOptions : db.ListOptions {Page : 1 , PageSize : 10000 },
238+ Actor : user ,
239+ })
240+ require .Nil (t , err )
241+ totalCount = int (count )
242+ assert .Len (t , repos , totalCount )
243+ for _ , repo := range repos {
244+ require .NoError (t , repo .LoadOwner (t .Context ()))
245+ if repo .Owner .Visibility == structs .VisibleTypePublic && ! repo .IsPrivate {
246+ publicRepoIDs = append (publicRepoIDs , repo .ID )
247+ }
248+ }
249+ return publicRepoIDs , totalCount
250+ }
251+
252+ normalUserPublicRepoIDs , totalCount := performSearch (t , user2 )
253+ assert .Positive (t , totalCount )
254+ assert .Greater (t , len (normalUserPublicRepoIDs ), 1 ) // quite a lot
214255
256+ restrictedUserPublicRepoIDs , totalCount := performSearch (t , restrictedUser )
257+ assert .Equal (t , 1 , totalCount ) // restricted user can see only their own repo
258+ assert .Equal (t , []int64 {4 }, restrictedUserPublicRepoIDs )
259+ }
260+
261+ func testSearchRepositoryPrivate (t * testing.T ) {
215262 // test search private repository on explore page
216- repos , count , err = repo_model .SearchRepositoryByName (t .Context (), repo_model.SearchRepoOptions {
263+ repos , count , err : = repo_model .SearchRepositoryByName (t .Context (), repo_model.SearchRepoOptions {
217264 ListOptions : db.ListOptions {
218265 Page : 1 ,
219266 PageSize : 10 ,
@@ -242,16 +289,18 @@ func TestSearchRepository(t *testing.T) {
242289 assert .NoError (t , err )
243290 assert .Equal (t , int64 (3 ), count )
244291 assert .Len (t , repos , 3 )
292+ }
245293
246- // Test non existing owner
247- repos , count , err = repo_model .SearchRepositoryByName (t .Context (), repo_model.SearchRepoOptions {OwnerID : unittest .NonexistentID })
294+ func testSearchRepositoryNonExistingOwner ( t * testing. T ) {
295+ repos , count , err : = repo_model .SearchRepositoryByName (t .Context (), repo_model.SearchRepoOptions {OwnerID : unittest .NonexistentID })
248296
249297 assert .NoError (t , err )
250298 assert .Empty (t , repos )
251299 assert .Equal (t , int64 (0 ), count )
300+ }
252301
253- // Test search within description
254- repos , count , err = repo_model .SearchRepository (t .Context (), repo_model.SearchRepoOptions {
302+ func testSearchRepositoryWithInDescription ( t * testing. T ) {
303+ repos , count , err : = repo_model .SearchRepository (t .Context (), repo_model.SearchRepoOptions {
255304 ListOptions : db.ListOptions {
256305 Page : 1 ,
257306 PageSize : 10 ,
@@ -266,9 +315,10 @@ func TestSearchRepository(t *testing.T) {
266315 assert .Equal (t , "test_repo_14" , repos [0 ].Name )
267316 }
268317 assert .Equal (t , int64 (1 ), count )
318+ }
269319
270- // Test NOT search within description
271- repos , count , err = repo_model .SearchRepository (t .Context (), repo_model.SearchRepoOptions {
320+ func testSearchRepositoryNotInDescription ( t * testing. T ) {
321+ repos , count , err : = repo_model .SearchRepository (t .Context (), repo_model.SearchRepoOptions {
272322 ListOptions : db.ListOptions {
273323 Page : 1 ,
274324 PageSize : 10 ,
@@ -281,7 +331,9 @@ func TestSearchRepository(t *testing.T) {
281331 assert .NoError (t , err )
282332 assert .Empty (t , repos )
283333 assert .Equal (t , int64 (0 ), count )
334+ }
284335
336+ func testSearchRepositoryCases (t * testing.T ) {
285337 testCases := getTestCases ()
286338
287339 for _ , testCase := range testCases {
0 commit comments