Skip to content

Commit 9093134

Browse files
committed
test: fix TestCurrentMembership to work with new owner validation
- Update role expectation from RoleViewer to RoleOwner in test assertion - Fix 'no memberships' test case to work with sole owner validation - Create proper test scenario where user can leave without being sole owner - Use organization deletion for cleanup when user is sole owner Signed-off-by: Miguel Martinez <miguel@chainloop.dev>
1 parent 9d76a35 commit 9093134

1 file changed

Lines changed: 40 additions & 6 deletions

File tree

app/controlplane/pkg/biz/user_integration_test.go

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,8 @@ func (s *userIntegrationTestSuite) TestCurrentMembership() {
142142
s.NoError(err)
143143
s.Equal(s.sharedOrg, got.Org)
144144

145-
// and it contains the default role
146-
s.Equal(authz.RoleViewer, got.Role)
145+
// and it contains the owner role (set in test setup)
146+
s.Equal(authz.RoleOwner, got.Role)
147147
})
148148

149149
s.Run("they have more orgs but none of them is the default, it will return the first one as default", func() {
@@ -171,12 +171,46 @@ func (s *userIntegrationTestSuite) TestCurrentMembership() {
171171
})
172172

173173
s.Run("it will fail if there are no memberships", func() {
174-
// none of the orgs is marked as current
174+
// Create a test user who is not an owner so they can leave
175+
testUser, err := s.User.UpsertByEmail(ctx, "test-no-membership@test.com", nil)
176+
s.NoError(err)
177+
178+
// Create a new org and make both testUser and userOne owners
179+
testOrg, err := s.Organization.CreateWithRandomName(ctx)
180+
s.NoError(err)
181+
182+
// Add testUser as owner
183+
_, err = s.Membership.Create(ctx, testOrg.ID, testUser.ID, biz.WithMembershipRole(authz.RoleOwner))
184+
s.NoError(err)
185+
186+
// Add userOne as viewer (so they can leave)
187+
_, err = s.Membership.Create(ctx, testOrg.ID, s.userOne.ID, biz.WithMembershipRole(authz.RoleViewer))
188+
s.NoError(err)
189+
190+
// Now userOne can leave because testUser is also an owner
175191
mems, _ := s.Membership.ByUser(ctx, s.userOne.ID)
176-
s.Len(mems, 1)
177-
// leave the current org
178-
err := s.Membership.Leave(ctx, s.userOne.ID, mems[0].ID.String())
192+
// Find the membership for testOrg
193+
var testOrgMembership *biz.Membership
194+
for _, m := range mems {
195+
if m.OrganizationID.String() == testOrg.ID {
196+
testOrgMembership = m
197+
break
198+
}
199+
}
200+
s.NotNil(testOrgMembership)
201+
202+
// userOne leaves testOrg (allowed because testUser is still owner)
203+
err = s.Membership.Leave(ctx, s.userOne.ID, testOrgMembership.ID.String())
204+
s.NoError(err)
205+
206+
// Now userOne leaves their original organizations by deleting them directly
207+
// since they are sole owners, they can delete the orgs instead of leaving
208+
err = s.Organization.Delete(ctx, s.userOneOrg.ID)
209+
s.NoError(err)
210+
err = s.Organization.Delete(ctx, s.sharedOrg.ID)
179211
s.NoError(err)
212+
213+
// Verify userOne has no memberships left
180214
mems, _ = s.Membership.ByUser(ctx, s.userOne.ID)
181215
s.Len(mems, 0)
182216

0 commit comments

Comments
 (0)