Skip to content

Commit ee8e4a1

Browse files
committed
add test to go to zero orgs
1 parent f1f6e6e commit ee8e4a1

File tree

2 files changed

+46
-3
lines changed

2 files changed

+46
-3
lines changed

coderd/database/dbmem/dbmem.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2357,10 +2357,13 @@ func (q *FakeQuerier) DeleteOrganizationMember(ctx context.Context, arg database
23572357
q.mutex.Lock()
23582358
defer q.mutex.Unlock()
23592359

2360-
deleted := slices.DeleteFunc(q.data.organizationMembers, func(member database.OrganizationMember) bool {
2361-
return member.OrganizationID == arg.OrganizationID && member.UserID == arg.UserID
2360+
deleted := false
2361+
q.data.organizationMembers = slices.DeleteFunc(q.data.organizationMembers, func(member database.OrganizationMember) bool {
2362+
match := member.OrganizationID == arg.OrganizationID && member.UserID == arg.UserID
2363+
deleted = deleted || match
2364+
return match
23622365
})
2363-
if len(deleted) == 0 {
2366+
if !deleted {
23642367
return sql.ErrNoRows
23652368
}
23662369

coderd/idpsync/organizations_test.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ func TestSyncOrganizations(t *testing.T) {
5151
// This test creates some deleted organizations and checks the behavior is
5252
// correct.
5353
t.Run("SyncUserToDeletedOrg", func(t *testing.T) {
54+
t.Parallel()
55+
5456
ctx := testutil.Context(t, testutil.WaitMedium)
5557
db, _ := dbtestutil.NewDB(t)
5658
user := dbgen.User(t, db, database.User{})
@@ -108,4 +110,42 @@ func TestSyncOrganizations(t *testing.T) {
108110
})
109111
require.ElementsMatch(t, []uuid.UUID{stays.Org.ID, joins.Org.ID}, inIDs)
110112
})
113+
114+
t.Run("UserToZeroOrgs", func(t *testing.T) {
115+
t.Parallel()
116+
117+
ctx := testutil.Context(t, testutil.WaitMedium)
118+
db, _ := dbtestutil.NewDB(t)
119+
user := dbgen.User(t, db, database.User{})
120+
121+
deletedLeaves := dbfake.Organization(t, db).Members(user).Deleted(true).Do()
122+
123+
// Now sync the user to the deleted organization
124+
s := idpsync.NewAGPLSync(
125+
slogtest.Make(t, &slogtest.Options{}),
126+
runtimeconfig.NewManager(),
127+
idpsync.DeploymentSyncSettings{
128+
OrganizationField: "orgs",
129+
OrganizationMapping: map[string][]uuid.UUID{
130+
"leave": {deletedLeaves.Org.ID},
131+
},
132+
OrganizationAssignDefault: false,
133+
},
134+
)
135+
136+
err := s.SyncOrganizations(ctx, db, user, idpsync.OrganizationParams{
137+
SyncEntitled: true,
138+
MergedClaims: map[string]interface{}{
139+
"orgs": []string{},
140+
},
141+
})
142+
require.NoError(t, err)
143+
144+
orgs, err := db.GetOrganizationsByUserID(ctx, database.GetOrganizationsByUserIDParams{
145+
UserID: user.ID,
146+
Deleted: sql.NullBool{},
147+
})
148+
require.NoError(t, err)
149+
require.Len(t, orgs, 0)
150+
})
111151
}

0 commit comments

Comments
 (0)