Skip to content

Commit 6664f3c

Browse files
committed
more tests
1 parent 69396b5 commit 6664f3c

File tree

2 files changed

+38
-6
lines changed

2 files changed

+38
-6
lines changed

models/perm/access/repo_permission.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -142,11 +142,11 @@ func GetUserRepoPermission(ctx context.Context, repo *repo_model.Repository, use
142142
}
143143
}()
144144

145-
if err := repo.LoadUnits(ctx); err != nil {
145+
perm.UnitsMode = make(map[unit.Type]perm_model.AccessMode) // always initialize UnitsMode to avoid nil panic
146+
if err = repo.LoadUnits(ctx); err != nil {
146147
return perm, err
147148
}
148149
perm.Units = repo.Units
149-
perm.UnitsMode = make(map[unit.Type]perm_model.AccessMode)
150150

151151
// anonymous user visit private repo.
152152
// TODO: anonymous user visit public unit of private repo???
@@ -163,7 +163,7 @@ func GetUserRepoPermission(ctx context.Context, repo *repo_model.Repository, use
163163
}
164164
}
165165

166-
if err := repo.LoadOwner(ctx); err != nil {
166+
if err = repo.LoadOwner(ctx); err != nil {
167167
return perm, err
168168
}
169169

@@ -192,9 +192,6 @@ func GetUserRepoPermission(ctx context.Context, repo *repo_model.Repository, use
192192
return perm, err
193193
}
194194

195-
if err := repo.LoadOwner(ctx); err != nil {
196-
return perm, err
197-
}
198195
if !repo.Owner.IsOrganization() {
199196
return perm, nil
200197
}

models/perm/access/repo_permission_test.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,38 @@ func TestApplyDefaultUserRepoPermission(t *testing.T) {
3232
applyDefaultUserRepoPermission(&user_model.User{ID: 1}, &perm)
3333
assert.True(t, perm.CanRead(unit.TypeUncyclo))
3434
}
35+
36+
func TestUnitAccessMode(t *testing.T) {
37+
perm := Permission{
38+
AccessMode: perm_model.AccessModeNone,
39+
}
40+
assert.Equal(t, perm_model.AccessModeNone, perm.UnitAccessMode(unit.TypeUncyclo), "no unit or map, use AccessMode")
41+
42+
perm = Permission{
43+
AccessMode: perm_model.AccessModeOwner,
44+
Units: []*repo_model.RepoUnit{
45+
{Type: unit.TypeUncyclo, EveryoneAccessMode: perm_model.AccessModeRead},
46+
},
47+
UnitsMode: map[unit.Type]perm_model.AccessMode{},
48+
}
49+
assert.Equal(t, perm_model.AccessModeOwner, perm.UnitAccessMode(unit.TypeUncyclo), "only unit no map, use AccessMode")
50+
51+
perm = Permission{
52+
AccessMode: perm_model.AccessModeOwner,
53+
UnitsMode: map[unit.Type]perm_model.AccessMode{
54+
unit.TypeUncyclo: perm_model.AccessModeRead,
55+
},
56+
}
57+
assert.Equal(t, perm_model.AccessModeRead, perm.UnitAccessMode(unit.TypeUncyclo), "no unit only map, use map")
58+
59+
perm = Permission{
60+
AccessMode: perm_model.AccessModeOwner,
61+
Units: []*repo_model.RepoUnit{
62+
{Type: unit.TypeUncyclo, EveryoneAccessMode: perm_model.AccessModeWrite},
63+
},
64+
UnitsMode: map[unit.Type]perm_model.AccessMode{
65+
unit.TypeUncyclo: perm_model.AccessModeRead,
66+
},
67+
}
68+
assert.Equal(t, perm_model.AccessModeRead, perm.UnitAccessMode(unit.TypeUncyclo), "has unit and map, use map")
69+
}

0 commit comments

Comments
 (0)