@@ -6,12 +6,16 @@ package access
6
6
import (
7
7
"testing"
8
8
9
+ "code.gitea.io/gitea/models/db"
10
+ "code.gitea.io/gitea/models/organization"
9
11
perm_model "code.gitea.io/gitea/models/perm"
10
12
repo_model "code.gitea.io/gitea/models/repo"
11
13
"code.gitea.io/gitea/models/unit"
14
+ "code.gitea.io/gitea/models/unittest"
12
15
user_model "code.gitea.io/gitea/models/user"
13
16
14
17
"github.com/stretchr/testify/assert"
18
+ "github.com/stretchr/testify/require"
15
19
)
16
20
17
21
func TestHasAnyUnitAccess (t * testing.T ) {
@@ -152,3 +156,45 @@ func TestUnitAccessMode(t *testing.T) {
152
156
}
153
157
assert .Equal (t , perm_model .AccessModeRead , perm .UnitAccessMode (unit .TypeWiki ), "has unit, and map, use map" )
154
158
}
159
+
160
+ func TestGetUserRepoPermission (t * testing.T ) {
161
+ assert .NoError (t , unittest .PrepareTestDatabase ())
162
+ ctx := t .Context ()
163
+ repo32 := unittest .AssertExistsAndLoadBean (t , & repo_model.Repository {ID : 32 }) // org public repo
164
+ require .NoError (t , repo32 .LoadOwner (ctx ))
165
+ require .True (t , repo32 .Owner .IsOrganization ())
166
+
167
+ require .NoError (t , db .TruncateBeans (ctx , & organization.Team {}, & organization.TeamUser {}, & organization.TeamRepo {}, & organization.TeamUnit {}))
168
+ org := repo32 .Owner
169
+ user := unittest .AssertExistsAndLoadBean (t , & user_model.User {ID : 4 })
170
+ team := & organization.Team {OrgID : org .ID , LowerName : "test_team" }
171
+ require .NoError (t , db .Insert (ctx , team ))
172
+
173
+ t .Run ("DoerInTeamWithNoRepo" , func (t * testing.T ) {
174
+ require .NoError (t , db .Insert (ctx , & organization.TeamUser {OrgID : org .ID , TeamID : team .ID , UID : user .ID }))
175
+ perm , err := GetUserRepoPermission (ctx , repo32 , user )
176
+ require .NoError (t , err )
177
+ assert .Equal (t , perm_model .AccessModeRead , perm .AccessMode )
178
+ assert .Nil (t , perm .unitsMode ) // doer in the team, but has no access to the repo
179
+ })
180
+
181
+ require .NoError (t , db .Insert (ctx , & organization.TeamRepo {OrgID : org .ID , TeamID : team .ID , RepoID : repo32 .ID }))
182
+ require .NoError (t , db .Insert (ctx , & organization.TeamUnit {OrgID : org .ID , TeamID : team .ID , Type : unit .TypeCode , AccessMode : perm_model .AccessModeNone }))
183
+ t .Run ("DoerWithTeamUnitAccessNone" , func (t * testing.T ) {
184
+ perm , err := GetUserRepoPermission (ctx , repo32 , user )
185
+ require .NoError (t , err )
186
+ assert .Equal (t , perm_model .AccessModeRead , perm .AccessMode )
187
+ assert .Equal (t , perm_model .AccessModeRead , perm .unitsMode [unit .TypeCode ])
188
+ assert .Equal (t , perm_model .AccessModeRead , perm .unitsMode [unit .TypeIssues ])
189
+ })
190
+
191
+ require .NoError (t , db .TruncateBeans (ctx , & organization.TeamUnit {}))
192
+ require .NoError (t , db .Insert (ctx , & organization.TeamUnit {OrgID : org .ID , TeamID : team .ID , Type : unit .TypeCode , AccessMode : perm_model .AccessModeWrite }))
193
+ t .Run ("DoerWithTeamUnitAccessWrite" , func (t * testing.T ) {
194
+ perm , err := GetUserRepoPermission (ctx , repo32 , user )
195
+ require .NoError (t , err )
196
+ assert .Equal (t , perm_model .AccessModeRead , perm .AccessMode )
197
+ assert .Equal (t , perm_model .AccessModeWrite , perm .unitsMode [unit .TypeCode ])
198
+ assert .Equal (t , perm_model .AccessModeRead , perm .unitsMode [unit .TypeIssues ])
199
+ })
200
+ }
0 commit comments