@@ -10,12 +10,17 @@ import (
1010 "testing"
1111
1212 auth_model "code.gitea.io/gitea/models/auth"
13+ "code.gitea.io/gitea/models/db"
14+ "code.gitea.io/gitea/models/organization"
15+ "code.gitea.io/gitea/models/perm"
16+ "code.gitea.io/gitea/models/unit"
1317 "code.gitea.io/gitea/models/unittest"
1418 user_model "code.gitea.io/gitea/models/user"
1519 api "code.gitea.io/gitea/modules/structs"
1620 "code.gitea.io/gitea/tests"
1721
1822 "github.com/stretchr/testify/assert"
23+ "github.com/stretchr/testify/require"
1924)
2025
2126func TestOrgRepos (t * testing.T ) {
@@ -217,4 +222,32 @@ func TestTeamSearch(t *testing.T) {
217222 session = loginUser (t , user5 .Name )
218223 req = NewRequestf (t , "GET" , "/org/%s/teams/-/search?q=%s" , org .Name , "team" )
219224 session .MakeRequest (t , req , http .StatusNotFound )
225+
226+ t .Run ("SearchWithPermission" , func (t * testing.T ) {
227+ ctx := t .Context ()
228+ var testOrgID int64 = 500
229+ var testTeamID int64 = 1000
230+ var testRepoID int64 = 2000
231+ require .NoError (t , db .Insert (ctx , & organization.Team {ID : testTeamID , OrgID : testOrgID , LowerName : "test_team" , AccessMode : perm .AccessModeNone }))
232+ require .NoError (t , db .Insert (ctx , & organization.TeamRepo {OrgID : testOrgID , TeamID : testTeamID , RepoID : testRepoID }))
233+ require .NoError (t , db .Insert (ctx , & organization.TeamUnit {OrgID : testOrgID , TeamID : testTeamID , Type : unit .TypeCode , AccessMode : perm .AccessModeRead }))
234+ require .NoError (t , db .Insert (ctx , & organization.TeamUnit {OrgID : testOrgID , TeamID : testTeamID , Type : unit .TypeIssues , AccessMode : perm .AccessModeWrite }))
235+
236+ teams , err := organization .GetTeamsWithAccessToAnyRepoUnit (ctx , testOrgID , testRepoID , perm .AccessModeRead , unit .TypeCode , unit .TypeIssues )
237+ require .NoError (t , err )
238+ assert .Len (t , teams , 1 ) // can read "code" or "issues"
239+
240+ teams , err = organization .GetTeamsWithAccessToAnyRepoUnit (ctx , testOrgID , testRepoID , perm .AccessModeWrite , unit .TypeCode )
241+ require .NoError (t , err )
242+ assert .Empty (t , teams ) // cannot write "code"
243+
244+ teams , err = organization .GetTeamsWithAccessToAnyRepoUnit (ctx , testOrgID , testRepoID , perm .AccessModeWrite , unit .TypeIssues )
245+ require .NoError (t , err )
246+ assert .Len (t , teams , 1 ) // can write "issues"
247+
248+ _ , _ = db .GetEngine (ctx ).ID (testTeamID ).Update (& organization.Team {AccessMode : perm .AccessModeWrite })
249+ teams , err = organization .GetTeamsWithAccessToAnyRepoUnit (ctx , testOrgID , testRepoID , perm .AccessModeWrite , unit .TypeCode )
250+ require .NoError (t , err )
251+ assert .Len (t , teams , 1 ) // team permission is "write", so can write "code"
252+ })
220253}
0 commit comments