@@ -1216,6 +1216,103 @@ func TestExpectOne(t *testing.T) {
1216
1216
})
1217
1217
}
1218
1218
1219
+ func TestGroupRemovalTrigger (t * testing.T ) {
1220
+ t .Parallel ()
1221
+
1222
+ db , _ := dbtestutil .NewDB (t )
1223
+
1224
+ orgA := dbgen .Organization (t , db , database.Organization {})
1225
+ _ , err := db .InsertAllUsersGroup (context .Background (), orgA .ID )
1226
+ require .NoError (t , err )
1227
+
1228
+ orgB := dbgen .Organization (t , db , database.Organization {})
1229
+ _ , err = db .InsertAllUsersGroup (context .Background (), orgB .ID )
1230
+ require .NoError (t , err )
1231
+
1232
+ orgs := []database.Organization {orgA , orgB }
1233
+
1234
+ user := dbgen .User (t , db , database.User {})
1235
+ extra := dbgen .User (t , db , database.User {})
1236
+ users := []database.User {user , extra }
1237
+
1238
+ groupA1 := dbgen .Group (t , db , database.Group {
1239
+ OrganizationID : orgA .ID ,
1240
+ })
1241
+ groupA2 := dbgen .Group (t , db , database.Group {
1242
+ OrganizationID : orgA .ID ,
1243
+ })
1244
+
1245
+ groupB1 := dbgen .Group (t , db , database.Group {
1246
+ OrganizationID : orgB .ID ,
1247
+ })
1248
+ groupB2 := dbgen .Group (t , db , database.Group {
1249
+ OrganizationID : orgB .ID ,
1250
+ })
1251
+
1252
+ groups := []database.Group {groupA1 , groupA2 , groupB1 , groupB2 }
1253
+
1254
+ // Add users to all organizations
1255
+ for _ , u := range users {
1256
+ for _ , o := range orgs {
1257
+ dbgen .OrganizationMember (t , db , database.OrganizationMember {
1258
+ OrganizationID : o .ID ,
1259
+ UserID : u .ID ,
1260
+ })
1261
+ }
1262
+ }
1263
+
1264
+ // Add users to all groups
1265
+ for _ , u := range users {
1266
+ for _ , g := range groups {
1267
+ dbgen .GroupMember (t , db , database.GroupMemberTable {
1268
+ GroupID : g .ID ,
1269
+ UserID : u .ID ,
1270
+ })
1271
+ }
1272
+ }
1273
+
1274
+ // Verify user is in all groups
1275
+ ctx := testutil .Context (t , testutil .WaitLong )
1276
+ onlyGroupIDs := func (row database.GetGroupsRow ) uuid.UUID {
1277
+ return row .Group .ID
1278
+ }
1279
+ userGroups , err := db .GetGroups (ctx , database.GetGroupsParams {
1280
+ HasMemberID : user .ID ,
1281
+ })
1282
+ require .NoError (t , err )
1283
+ require .ElementsMatch (t , []uuid.UUID {
1284
+ orgA .ID , orgB .ID , // Everyone groups
1285
+ groupA1 .ID , groupA2 .ID , groupB1 .ID , groupB2 .ID , // Org groups
1286
+ }, db2sdk .List (userGroups , onlyGroupIDs ))
1287
+
1288
+ // Remove the user from org A
1289
+ err = db .DeleteOrganizationMember (ctx , database.DeleteOrganizationMemberParams {
1290
+ OrganizationID : orgA .ID ,
1291
+ UserID : user .ID ,
1292
+ })
1293
+ require .NoError (t , err )
1294
+
1295
+ // Verify user is no longer in org A groups
1296
+ userGroups , err = db .GetGroups (ctx , database.GetGroupsParams {
1297
+ HasMemberID : user .ID ,
1298
+ })
1299
+ require .NoError (t , err )
1300
+ require .ElementsMatch (t , []uuid.UUID {
1301
+ orgB .ID , // Everyone group
1302
+ groupB1 .ID , groupB2 .ID , // Org groups
1303
+ }, db2sdk .List (userGroups , onlyGroupIDs ))
1304
+
1305
+ // Verify extra user is unchanged
1306
+ extraUserGroups , err := db .GetGroups (ctx , database.GetGroupsParams {
1307
+ HasMemberID : extra .ID ,
1308
+ })
1309
+ require .NoError (t , err )
1310
+ require .ElementsMatch (t , []uuid.UUID {
1311
+ orgA .ID , orgB .ID , // Everyone groups
1312
+ groupA1 .ID , groupA2 .ID , groupB1 .ID , groupB2 .ID , // Org groups
1313
+ }, db2sdk .List (extraUserGroups , onlyGroupIDs ))
1314
+ }
1315
+
1219
1316
func requireUsersMatch (t testing.TB , expected []database.User , found []database.GetUsersRow , msg string ) {
1220
1317
t .Helper ()
1221
1318
require .ElementsMatch (t , expected , database .ConvertUserRows (found ), msg )
0 commit comments