Skip to content

Commit 1ce2980

Browse files
committed
cover by tests
1 parent 80ee5a2 commit 1ce2980

File tree

2 files changed

+81
-1
lines changed

2 files changed

+81
-1
lines changed

models/organization/org.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,10 @@ func (opts FindOrgMembersOpts) applyTeamMatesOnlyFilter(sess *xorm.Session) {
214214
Where(builder.In("team_user.team_id", getUserTeamIDsQueryBuilder(opts.OrgID, opts.Doer.ID))).
215215
And(builder.Eq{"team_user.org_id": opts.OrgID})
216216

217-
sess.And("is_public = ?", true).Or(sess.In("org_user.uid", teamMates))
217+
sess.And(
218+
builder.In("org_user.uid", teamMates).
219+
Or(builder.Eq{"org_user.is_public": true}),
220+
)
218221
}
219222
}
220223

models/organization/org_test.go

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package organization_test
55

66
import (
7+
"slices"
78
"sort"
89
"testing"
910

@@ -181,6 +182,82 @@ func TestIsPublicMembership(t *testing.T) {
181182
test(unittest.NonexistentID, unittest.NonexistentID, false)
182183
}
183184

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+
expectedLen int
201+
}{
202+
{
203+
name: "restricted user sees public members and teammates",
204+
opts: &organization.FindOrgMembersOpts{
205+
OrgID: 17, // org17 where user29 is in team9
206+
Doer: restrictedUser,
207+
IsDoerMember: true,
208+
},
209+
expectedUIDs: []int64{2, 15, 29}, // Public members (2) + teammates in team9 (15, 20, 29)
210+
expectedLen: 3,
211+
},
212+
{
213+
name: "restricted user sees only public members when not member",
214+
opts: &organization.FindOrgMembersOpts{
215+
OrgID: 3, // org3 where user29 is not a member
216+
Doer: restrictedUser,
217+
},
218+
expectedUIDs: []int64{2, 28}, // Only public members
219+
expectedLen: 2,
220+
},
221+
{
222+
name: "non logged in only shows public members",
223+
opts: &organization.FindOrgMembersOpts{
224+
OrgID: 3,
225+
},
226+
expectedUIDs: []int64{2, 28}, // Only public members
227+
expectedLen: 2,
228+
},
229+
{
230+
name: "non restricted user sees all members",
231+
opts: &organization.FindOrgMembersOpts{
232+
OrgID: 17,
233+
Doer: unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 15}),
234+
IsDoerMember: true,
235+
},
236+
expectedUIDs: []int64{2, 15, 18, 29}, // All members
237+
expectedLen: 3,
238+
},
239+
}
240+
241+
for _, tc := range testCases {
242+
t.Run(tc.name, func(t *testing.T) {
243+
count, err := organization.CountOrgMembers(db.DefaultContext, tc.opts)
244+
assert.NoError(t, err)
245+
assert.Equal(t, int64(tc.expectedLen), count)
246+
247+
members, err := organization.GetOrgUsersByOrgID(db.DefaultContext, tc.opts)
248+
assert.NoError(t, err)
249+
assert.Len(t, members, tc.expectedLen)
250+
251+
memberUIDs := make([]int64, 0, len(members))
252+
for _, member := range members {
253+
memberUIDs = append(memberUIDs, member.UID)
254+
}
255+
slices.Sort(memberUIDs)
256+
assert.EqualValues(t, tc.expectedUIDs, memberUIDs)
257+
})
258+
}
259+
}
260+
184261
func TestFindOrgs(t *testing.T) {
185262
assert.NoError(t, unittest.PrepareTestDatabase())
186263

0 commit comments

Comments
 (0)