Skip to content

Commit 8dbf7da

Browse files
committed
test: fix integration tests for new organization leave/delete behavior
- Update user integration test to expect account deletion to be blocked when user is sole owner - Update membership integration test to expect no cleanup when sole owner cannot leave - Update copyright headers to 2024-2025 for modified test files - Set proper owner roles in test setup to trigger validation logic Signed-off-by: Miguel Martinez <miguel@chainloop.dev>
1 parent 705fb19 commit 8dbf7da

2 files changed

Lines changed: 28 additions & 26 deletions

File tree

app/controlplane/pkg/biz/membership_integration_test.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//
2-
// Copyright 2024 The Chainloop Authors.
2+
// Copyright 2024-2025 The Chainloop Authors.
33
//
44
// Licensed under the Apache License, Version 2.0 (the "License");
55
// you may not use this file except in compliance with the License.
@@ -419,7 +419,7 @@ func (s *membershipIntegrationTestSuite) TestDeleteWithGroups() {
419419
orgUUID := uuid.MustParse(org.ID)
420420

421421
// Add user to organization
422-
membershipUser, err := s.Membership.Create(ctx, org.ID, user.ID, biz.WithMembershipRole(authz.RoleAdmin), biz.WithCurrentMembership())
422+
membershipUser, err := s.Membership.Create(ctx, org.ID, user.ID, biz.WithMembershipRole(authz.RoleOwner), biz.WithCurrentMembership())
423423
s.NoError(err)
424424

425425
// Create multiple groups with the user as maintainer
@@ -480,25 +480,25 @@ func (s *membershipIntegrationTestSuite) TestDeleteWithGroups() {
480480
_, err = s.Organization.FindByID(ctx, org.ID)
481481
s.NoError(err)
482482

483-
// Groups should still exist since user couldn't leave
483+
// Groups should still exist since user couldn't leave (no cleanup happened)
484484
_, err = s.Group.Get(ctx, orgUUID, &biz.IdentityReference{ID: &group1.ID})
485485
s.NoError(err, "Group 1 should still exist")
486486

487487
_, err = s.Group.Get(ctx, orgUUID, &biz.IdentityReference{ID: &group2.ID})
488-
s.True(biz.IsNotFound(err), "Group 2 should be deleted")
488+
s.NoError(err, "Group 2 should still exist since user couldn't leave")
489489

490-
// The project should be deleted
490+
// The project should still exist since no cleanup happened
491491
_, err = s.Project.FindProjectByReference(ctx, org.ID, &biz.IdentityReference{ID: projectRef.ID})
492-
s.True(biz.IsNotFound(err), "Project should be deleted")
492+
s.NoError(err, "Project should still exist since user couldn't leave")
493493

494-
// Verify group memberships are marked as deleted
494+
// Verify group memberships still exist since user couldn't leave
495495
group1Mem, group1Err := s.Repos.GroupRepo.FindGroupMembershipByGroupAndID(ctx, group1.ID, userUUID)
496-
s.True(biz.IsNotFound(group1Err))
497-
s.Nil(group1Mem)
496+
s.NoError(group1Err)
497+
s.NotNil(group1Mem)
498498

499499
group2Mem, group2Err := s.Repos.GroupRepo.FindGroupMembershipByGroupAndID(ctx, group2.ID, userUUID)
500-
s.True(biz.IsNotFound(group2Err))
501-
s.Nil(group2Mem)
500+
s.NoError(group2Err)
501+
s.NotNil(group2Mem)
502502
})
503503
}
504504

app/controlplane/pkg/biz/user_integration_test.go

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//
2-
// Copyright 2024 The Chainloop Authors.
2+
// Copyright 2024-2025 The Chainloop Authors.
33
//
44
// Licensed under the Apache License, Version 2.0 (the "License");
55
// you may not use this file except in compliance with the License.
@@ -80,28 +80,30 @@ User mapping:
8080
func (s *userIntegrationTestSuite) TestDeleteUser() {
8181
ctx := context.Background()
8282

83+
// User deletion should be blocked because userOne is sole owner of userOneOrg
8384
err := s.User.DeleteUser(ctx, s.userOne.ID)
84-
s.NoError(err)
85+
s.Error(err)
86+
s.True(biz.IsErrValidation(err))
87+
s.Contains(err.Error(), "sole owner")
8588

86-
// Organization where the user is the only member got deleted
89+
// Both organizations should still exist since deletion was blocked
8790
gotOrgOne, err := s.Organization.FindByID(ctx, s.userOneOrg.ID)
88-
s.Error(err)
89-
s.True(biz.IsNotFound(err))
90-
s.Nil(gotOrgOne)
91+
s.NoError(err)
92+
s.NotNil(gotOrgOne)
9193

92-
// Organization that it's shared with another user is still present
9394
gotSharedOrg, err := s.Organization.FindByID(ctx, s.sharedOrg.ID)
9495
s.NoError(err)
9596
s.NotNil(gotSharedOrg)
9697

97-
// user and associated memberships have been deleted
98+
// User should still exist since deletion was blocked
9899
gotUser, err := s.User.FindByID(ctx, s.userOne.ID)
99100
s.NoError(err)
100-
s.Nil(gotUser)
101+
s.NotNil(gotUser)
101102

103+
// Memberships should still exist since deletion was blocked
102104
gotMembership, err := s.Membership.ByUser(ctx, s.userOne.ID)
103105
s.NoError(err)
104-
s.Empty(gotMembership)
106+
s.NotEmpty(gotMembership)
105107
}
106108

107109
func (s *userIntegrationTestSuite) TestCurrentMembership() {
@@ -224,15 +226,15 @@ func (s *userIntegrationTestSuite) SetupTest() {
224226
// Create User 1
225227
s.userOne, err = s.User.UpsertByEmail(ctx, "user-1@test.com", nil)
226228
assert.NoError(err)
227-
// Attach both orgs
228-
_, err = s.Membership.Create(ctx, s.userOneOrg.ID, s.userOne.ID)
229+
// Attach both orgs - make user owner of userOneOrg and owner of sharedOrg
230+
_, err = s.Membership.Create(ctx, s.userOneOrg.ID, s.userOne.ID, biz.WithMembershipRole(authz.RoleOwner))
229231
assert.NoError(err)
230-
_, err = s.Membership.Create(ctx, s.sharedOrg.ID, s.userOne.ID, biz.WithCurrentMembership())
232+
_, err = s.Membership.Create(ctx, s.sharedOrg.ID, s.userOne.ID, biz.WithMembershipRole(authz.RoleOwner), biz.WithCurrentMembership())
231233
assert.NoError(err)
232234

233-
// Create User 2 and attach shared org
235+
// Create User 2 and attach shared org as owner too
234236
s.userTwo, err = s.User.UpsertByEmail(ctx, "user-2@test.com", nil)
235237
assert.NoError(err)
236-
_, err = s.Membership.Create(ctx, s.sharedOrg.ID, s.userTwo.ID, biz.WithCurrentMembership())
238+
_, err = s.Membership.Create(ctx, s.sharedOrg.ID, s.userTwo.ID, biz.WithMembershipRole(authz.RoleOwner), biz.WithCurrentMembership())
237239
assert.NoError(err)
238240
}

0 commit comments

Comments
 (0)