| 
4 | 4 | package integration  | 
5 | 5 | 
 
  | 
6 | 6 | import (  | 
 | 7 | +	"code.gitea.io/gitea/models/db"  | 
 | 8 | +	"code.gitea.io/gitea/models/organization"  | 
 | 9 | +	"code.gitea.io/gitea/models/perm"  | 
 | 10 | +	"code.gitea.io/gitea/models/unit"  | 
7 | 11 | 	"fmt"  | 
 | 12 | +	"github.com/stretchr/testify/require"  | 
8 | 13 | 	"net/http"  | 
9 | 14 | 	"strings"  | 
10 | 15 | 	"testing"  | 
@@ -217,4 +222,32 @@ func TestTeamSearch(t *testing.T) {  | 
217 | 222 | 	session = loginUser(t, user5.Name)  | 
218 | 223 | 	req = NewRequestf(t, "GET", "/org/%s/teams/-/search?q=%s", org.Name, "team")  | 
219 | 224 | 	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"  | 
 | 239 | + | 
 | 240 | +		teams, err = organization.GetTeamsWithAccessToAnyRepoUnit(ctx, testOrgID, testRepoID, perm.AccessModeWrite, unit.TypeCode)  | 
 | 241 | +		require.NoError(t, err)  | 
 | 242 | +		assert.Len(t, teams, 0) // 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 | +	})  | 
220 | 253 | }  | 
0 commit comments