Skip to content

Commit 0cd03b2

Browse files
Merge branch 'main' into rmdep
2 parents 1bd8a08 + 2f3da6d commit 0cd03b2

File tree

2 files changed

+35
-4
lines changed

2 files changed

+35
-4
lines changed

models/perm/access/repo_permission.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -348,10 +348,8 @@ func GetUserRepoPermission(ctx context.Context, repo *repo_model.Repository, use
348348

349349
for _, u := range repo.Units {
350350
for _, team := range teams {
351-
unitAccessMode := minAccessMode
352-
if teamMode, exist := team.UnitAccessModeEx(ctx, u.Type); exist {
353-
unitAccessMode = max(perm.unitsMode[u.Type], unitAccessMode, teamMode)
354-
}
351+
teamMode, _ := team.UnitAccessModeEx(ctx, u.Type)
352+
unitAccessMode := max(perm.unitsMode[u.Type], minAccessMode, teamMode)
355353
perm.unitsMode[u.Type] = unitAccessMode
356354
}
357355
}

models/perm/access/repo_permission_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,4 +197,37 @@ func TestGetUserRepoPermission(t *testing.T) {
197197
assert.Equal(t, perm_model.AccessModeWrite, perm.unitsMode[unit.TypeCode])
198198
assert.Equal(t, perm_model.AccessModeRead, perm.unitsMode[unit.TypeIssues])
199199
})
200+
201+
repo3 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 3}) // org private repo, same org as repo 32
202+
require.NoError(t, repo3.LoadOwner(ctx))
203+
require.True(t, repo3.Owner.IsOrganization())
204+
require.NoError(t, db.TruncateBeans(ctx, &organization.TeamUnit{}, &Access{})) // The user has access set of that repo, remove it, it is useless for our test
205+
require.NoError(t, db.Insert(ctx, &organization.TeamRepo{OrgID: org.ID, TeamID: team.ID, RepoID: repo3.ID}))
206+
t.Run("DoerWithNoopTeamOnPrivateRepo", func(t *testing.T) {
207+
perm, err := GetUserRepoPermission(ctx, repo3, user)
208+
require.NoError(t, err)
209+
assert.Equal(t, perm_model.AccessModeNone, perm.AccessMode)
210+
assert.Equal(t, perm_model.AccessModeNone, perm.unitsMode[unit.TypeCode])
211+
assert.Equal(t, perm_model.AccessModeNone, perm.unitsMode[unit.TypeIssues])
212+
})
213+
214+
require.NoError(t, db.Insert(ctx, &organization.TeamUnit{OrgID: org.ID, TeamID: team.ID, Type: unit.TypeCode, AccessMode: perm_model.AccessModeNone}))
215+
require.NoError(t, db.Insert(ctx, &organization.TeamUnit{OrgID: org.ID, TeamID: team.ID, Type: unit.TypeIssues, AccessMode: perm_model.AccessModeRead}))
216+
t.Run("DoerWithReadIssueTeamOnPrivateRepo", func(t *testing.T) {
217+
perm, err := GetUserRepoPermission(ctx, repo3, user)
218+
require.NoError(t, err)
219+
assert.Equal(t, perm_model.AccessModeNone, perm.AccessMode)
220+
assert.Equal(t, perm_model.AccessModeNone, perm.unitsMode[unit.TypeCode])
221+
assert.Equal(t, perm_model.AccessModeRead, perm.unitsMode[unit.TypeIssues])
222+
})
223+
224+
require.NoError(t, db.Insert(ctx, repo_model.Collaboration{RepoID: repo3.ID, UserID: user.ID, Mode: perm_model.AccessModeWrite}))
225+
require.NoError(t, db.Insert(ctx, Access{RepoID: repo3.ID, UserID: user.ID, Mode: perm_model.AccessModeWrite}))
226+
t.Run("DoerWithReadIssueTeamAndWriteCollaboratorOnPrivateRepo", func(t *testing.T) {
227+
perm, err := GetUserRepoPermission(ctx, repo3, user)
228+
require.NoError(t, err)
229+
assert.Equal(t, perm_model.AccessModeWrite, perm.AccessMode)
230+
assert.Equal(t, perm_model.AccessModeWrite, perm.unitsMode[unit.TypeCode])
231+
assert.Equal(t, perm_model.AccessModeWrite, perm.unitsMode[unit.TypeIssues])
232+
})
200233
}

0 commit comments

Comments
 (0)