|
4 | 4 | package organization_test |
5 | 5 |
|
6 | 6 | import ( |
| 7 | + "slices" |
| 8 | + "sort" |
7 | 9 | "testing" |
8 | 10 |
|
9 | 11 | "code.gitea.io/gitea/models/db" |
@@ -103,7 +105,7 @@ func TestUser_GetTeams(t *testing.T) { |
103 | 105 | func TestUser_GetMembers(t *testing.T) { |
104 | 106 | assert.NoError(t, unittest.PrepareTestDatabase()) |
105 | 107 | org := unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 3}) |
106 | | - members, _, err := org.GetMembers(db.DefaultContext) |
| 108 | + members, _, err := org.GetMembers(db.DefaultContext, &user_model.User{IsAdmin: true}) |
107 | 109 | assert.NoError(t, err) |
108 | 110 | if assert.Len(t, members, 3) { |
109 | 111 | assert.Equal(t, int64(2), members[0].ID) |
@@ -180,6 +182,75 @@ func TestIsPublicMembership(t *testing.T) { |
180 | 182 | test(unittest.NonexistentID, unittest.NonexistentID, false) |
181 | 183 | } |
182 | 184 |
|
| 185 | +func TestRestrictedUserOrgMembers(t *testing.T) { |
| 186 | + assert.NoError(t, unittest.PrepareTestDatabase()) |
| 187 | + |
| 188 | + restrictedUser := unittest.AssertExistsAndLoadBean(t, &user_model.User{ |
| 189 | + ID: 29, |
| 190 | + IsRestricted: true, |
| 191 | + }) |
| 192 | + if !assert.True(t, restrictedUser.IsRestricted) { |
| 193 | + return // ensure fixtures return restricted user |
| 194 | + } |
| 195 | + |
| 196 | + testCases := []struct { |
| 197 | + name string |
| 198 | + opts *organization.FindOrgMembersOpts |
| 199 | + expectedUIDs []int64 |
| 200 | + }{ |
| 201 | + { |
| 202 | + name: "restricted user sees public members and teammates", |
| 203 | + opts: &organization.FindOrgMembersOpts{ |
| 204 | + OrgID: 17, // org17 where user29 is in team9 |
| 205 | + Doer: restrictedUser, |
| 206 | + IsDoerMember: true, |
| 207 | + }, |
| 208 | + expectedUIDs: []int64{2, 15, 20, 29}, // Public members (2) + teammates in team9 (15, 20, 29) |
| 209 | + }, |
| 210 | + { |
| 211 | + name: "restricted user sees only public members when not member", |
| 212 | + opts: &organization.FindOrgMembersOpts{ |
| 213 | + OrgID: 3, // org3 where user29 is not a member |
| 214 | + Doer: restrictedUser, |
| 215 | + }, |
| 216 | + expectedUIDs: []int64{2, 28}, // Only public members |
| 217 | + }, |
| 218 | + { |
| 219 | + name: "non logged in only shows public members", |
| 220 | + opts: &organization.FindOrgMembersOpts{ |
| 221 | + OrgID: 3, |
| 222 | + }, |
| 223 | + expectedUIDs: []int64{2, 28}, // Only public members |
| 224 | + }, |
| 225 | + { |
| 226 | + name: "non restricted user sees all members", |
| 227 | + opts: &organization.FindOrgMembersOpts{ |
| 228 | + OrgID: 17, |
| 229 | + Doer: unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 15}), |
| 230 | + IsDoerMember: true, |
| 231 | + }, |
| 232 | + expectedUIDs: []int64{2, 15, 18, 20, 29}, // All members |
| 233 | + }, |
| 234 | + } |
| 235 | + |
| 236 | + for _, tc := range testCases { |
| 237 | + t.Run(tc.name, func(t *testing.T) { |
| 238 | + count, err := organization.CountOrgMembers(db.DefaultContext, tc.opts) |
| 239 | + assert.NoError(t, err) |
| 240 | + assert.EqualValues(t, len(tc.expectedUIDs), count) |
| 241 | + |
| 242 | + members, err := organization.GetOrgUsersByOrgID(db.DefaultContext, tc.opts) |
| 243 | + assert.NoError(t, err) |
| 244 | + memberUIDs := make([]int64, 0, len(members)) |
| 245 | + for _, member := range members { |
| 246 | + memberUIDs = append(memberUIDs, member.UID) |
| 247 | + } |
| 248 | + slices.Sort(memberUIDs) |
| 249 | + assert.EqualValues(t, tc.expectedUIDs, memberUIDs) |
| 250 | + }) |
| 251 | + } |
| 252 | +} |
| 253 | + |
183 | 254 | func TestFindOrgs(t *testing.T) { |
184 | 255 | assert.NoError(t, unittest.PrepareTestDatabase()) |
185 | 256 |
|
@@ -210,37 +281,42 @@ func TestFindOrgs(t *testing.T) { |
210 | 281 | func TestGetOrgUsersByOrgID(t *testing.T) { |
211 | 282 | assert.NoError(t, unittest.PrepareTestDatabase()) |
212 | 283 |
|
213 | | - orgUsers, err := organization.GetOrgUsersByOrgID(db.DefaultContext, &organization.FindOrgMembersOpts{ |
214 | | - ListOptions: db.ListOptions{}, |
215 | | - OrgID: 3, |
216 | | - PublicOnly: false, |
| 284 | + opts := &organization.FindOrgMembersOpts{ |
| 285 | + Doer: &user_model.User{IsAdmin: true}, |
| 286 | + OrgID: 3, |
| 287 | + } |
| 288 | + assert.False(t, opts.PublicOnly()) |
| 289 | + orgUsers, err := organization.GetOrgUsersByOrgID(db.DefaultContext, opts) |
| 290 | + assert.NoError(t, err) |
| 291 | + sort.Slice(orgUsers, func(i, j int) bool { |
| 292 | + return orgUsers[i].ID < orgUsers[j].ID |
217 | 293 | }) |
| 294 | + assert.EqualValues(t, []*organization.OrgUser{{ |
| 295 | + ID: 1, |
| 296 | + OrgID: 3, |
| 297 | + UID: 2, |
| 298 | + IsPublic: true, |
| 299 | + }, { |
| 300 | + ID: 2, |
| 301 | + OrgID: 3, |
| 302 | + UID: 4, |
| 303 | + IsPublic: false, |
| 304 | + }, { |
| 305 | + ID: 9, |
| 306 | + OrgID: 3, |
| 307 | + UID: 28, |
| 308 | + IsPublic: true, |
| 309 | + }}, orgUsers) |
| 310 | + |
| 311 | + opts = &organization.FindOrgMembersOpts{OrgID: 3} |
| 312 | + assert.True(t, opts.PublicOnly()) |
| 313 | + orgUsers, err = organization.GetOrgUsersByOrgID(db.DefaultContext, opts) |
218 | 314 | assert.NoError(t, err) |
219 | | - if assert.Len(t, orgUsers, 3) { |
220 | | - assert.Equal(t, organization.OrgUser{ |
221 | | - ID: orgUsers[0].ID, |
222 | | - OrgID: 3, |
223 | | - UID: 2, |
224 | | - IsPublic: true, |
225 | | - }, *orgUsers[0]) |
226 | | - assert.Equal(t, organization.OrgUser{ |
227 | | - ID: orgUsers[1].ID, |
228 | | - OrgID: 3, |
229 | | - UID: 4, |
230 | | - IsPublic: false, |
231 | | - }, *orgUsers[1]) |
232 | | - assert.Equal(t, organization.OrgUser{ |
233 | | - ID: orgUsers[2].ID, |
234 | | - OrgID: 3, |
235 | | - UID: 28, |
236 | | - IsPublic: true, |
237 | | - }, *orgUsers[2]) |
238 | | - } |
| 315 | + assert.Len(t, orgUsers, 2) |
239 | 316 |
|
240 | 317 | orgUsers, err = organization.GetOrgUsersByOrgID(db.DefaultContext, &organization.FindOrgMembersOpts{ |
241 | 318 | ListOptions: db.ListOptions{}, |
242 | 319 | OrgID: unittest.NonexistentID, |
243 | | - PublicOnly: false, |
244 | 320 | }) |
245 | 321 | assert.NoError(t, err) |
246 | 322 | assert.Len(t, orgUsers, 0) |
|
0 commit comments