@@ -2299,6 +2299,183 @@ extension LivestreamChannelController_Tests {
2299
2299
XCTAssertEqual ( controller. skippedMessagesAmount, 1 )
2300
2300
XCTAssertTrue ( controller. messages. isEmpty) // Message not added when paused
2301
2301
}
2302
+
2303
+ func test_didReceiveEvent_userMessagesDeletedEvent_hardDeleteFalse_marksUserMessagesAsSoftDeleted( ) {
2304
+ // Given
2305
+ let bannedUserId = UserId . unique
2306
+ let otherUserId = UserId . unique
2307
+ let eventCreatedAt = Date ( )
2308
+
2309
+ // Add messages from both users
2310
+ let bannedUserMessage1 = ChatMessage . mock (
2311
+ id: " banned1 " ,
2312
+ cid: controller. cid!,
2313
+ text: " Message from banned user 1 " ,
2314
+ author: . mock( id: bannedUserId)
2315
+ )
2316
+ let bannedUserMessage2 = ChatMessage . mock (
2317
+ id: " banned2 " ,
2318
+ cid: controller. cid!,
2319
+ text: " Message from banned user 2 " ,
2320
+ author: . mock( id: bannedUserId)
2321
+ )
2322
+ let otherUserMessage = ChatMessage . mock (
2323
+ id: " other " ,
2324
+ cid: controller. cid!,
2325
+ text: " Message from other user " ,
2326
+ author: . mock( id: otherUserId)
2327
+ )
2328
+
2329
+ // Add messages to controller
2330
+ controller. eventsController (
2331
+ EventsController ( notificationCenter: client. eventNotificationCenter) ,
2332
+ didReceiveEvent: MessageNewEvent (
2333
+ user: . mock( id: bannedUserId) ,
2334
+ message: bannedUserMessage1,
2335
+ channel: . mock( cid: controller. cid!) ,
2336
+ createdAt: . unique,
2337
+ watcherCount: nil ,
2338
+ unreadCount: nil
2339
+ )
2340
+ )
2341
+ controller. eventsController (
2342
+ EventsController ( notificationCenter: client. eventNotificationCenter) ,
2343
+ didReceiveEvent: MessageNewEvent (
2344
+ user: . mock( id: bannedUserId) ,
2345
+ message: bannedUserMessage2,
2346
+ channel: . mock( cid: controller. cid!) ,
2347
+ createdAt: . unique,
2348
+ watcherCount: nil ,
2349
+ unreadCount: nil
2350
+ )
2351
+ )
2352
+ controller. eventsController (
2353
+ EventsController ( notificationCenter: client. eventNotificationCenter) ,
2354
+ didReceiveEvent: MessageNewEvent (
2355
+ user: . mock( id: otherUserId) ,
2356
+ message: otherUserMessage,
2357
+ channel: . mock( cid: controller. cid!) ,
2358
+ createdAt: . unique,
2359
+ watcherCount: nil ,
2360
+ unreadCount: nil
2361
+ )
2362
+ )
2363
+
2364
+ XCTAssertEqual ( controller. messages. count, 3 )
2365
+ XCTAssertNil ( controller. messages. first { $0. id == " banned1 " } ? . deletedAt)
2366
+ XCTAssertNil ( controller. messages. first { $0. id == " banned2 " } ? . deletedAt)
2367
+ XCTAssertNil ( controller. messages. first { $0. id == " other " } ? . deletedAt)
2368
+
2369
+ // When
2370
+ let userMessagesDeletedEvent = UserMessagesDeletedEvent (
2371
+ user: . mock( id: bannedUserId) ,
2372
+ hardDelete: false ,
2373
+ createdAt: eventCreatedAt
2374
+ )
2375
+ controller. eventsController (
2376
+ EventsController ( notificationCenter: client. eventNotificationCenter) ,
2377
+ didReceiveEvent: userMessagesDeletedEvent
2378
+ )
2379
+
2380
+ // Then
2381
+ XCTAssertEqual ( controller. messages. count, 3 ) // Messages still present
2382
+
2383
+ // Banned user messages should be marked as deleted
2384
+ XCTAssertEqual ( controller. messages. first { $0. id == " banned1 " } ? . deletedAt, eventCreatedAt)
2385
+ XCTAssertEqual ( controller. messages. first { $0. id == " banned2 " } ? . deletedAt, eventCreatedAt)
2386
+
2387
+ // Other user message should not be affected
2388
+ XCTAssertNil ( controller. messages. first { $0. id == " other " } ? . deletedAt)
2389
+ }
2390
+
2391
+ func test_didReceiveEvent_userMessagesDeletedEvent_hardDeleteTrue_removesUserMessages( ) {
2392
+ // Given
2393
+ let bannedUserId = UserId . unique
2394
+ let otherUserId = UserId . unique
2395
+ let eventCreatedAt = Date ( )
2396
+
2397
+ // Add messages from both users
2398
+ let bannedUserMessage1 = ChatMessage . mock (
2399
+ id: " banned1 " ,
2400
+ cid: controller. cid!,
2401
+ text: " Message from banned user 1 " ,
2402
+ author: . mock( id: bannedUserId)
2403
+ )
2404
+ let bannedUserMessage2 = ChatMessage . mock (
2405
+ id: " banned2 " ,
2406
+ cid: controller. cid!,
2407
+ text: " Message from banned user 2 " ,
2408
+ author: . mock( id: bannedUserId)
2409
+ )
2410
+ let otherUserMessage = ChatMessage . mock (
2411
+ id: " other " ,
2412
+ cid: controller. cid!,
2413
+ text: " Message from other user " ,
2414
+ author: . mock( id: otherUserId)
2415
+ )
2416
+
2417
+ // Add messages to controller
2418
+ controller. eventsController (
2419
+ EventsController ( notificationCenter: client. eventNotificationCenter) ,
2420
+ didReceiveEvent: MessageNewEvent (
2421
+ user: . mock( id: bannedUserId) ,
2422
+ message: bannedUserMessage1,
2423
+ channel: . mock( cid: controller. cid!) ,
2424
+ createdAt: . unique,
2425
+ watcherCount: nil ,
2426
+ unreadCount: nil
2427
+ )
2428
+ )
2429
+ controller. eventsController (
2430
+ EventsController ( notificationCenter: client. eventNotificationCenter) ,
2431
+ didReceiveEvent: MessageNewEvent (
2432
+ user: . mock( id: bannedUserId) ,
2433
+ message: bannedUserMessage2,
2434
+ channel: . mock( cid: controller. cid!) ,
2435
+ createdAt: . unique,
2436
+ watcherCount: nil ,
2437
+ unreadCount: nil
2438
+ )
2439
+ )
2440
+ controller. eventsController (
2441
+ EventsController ( notificationCenter: client. eventNotificationCenter) ,
2442
+ didReceiveEvent: MessageNewEvent (
2443
+ user: . mock( id: otherUserId) ,
2444
+ message: otherUserMessage,
2445
+ channel: . mock( cid: controller. cid!) ,
2446
+ createdAt: . unique,
2447
+ watcherCount: nil ,
2448
+ unreadCount: nil
2449
+ )
2450
+ )
2451
+
2452
+ XCTAssertEqual ( controller. messages. count, 3 )
2453
+ XCTAssertNotNil ( controller. messages. first { $0. id == " banned1 " } )
2454
+ XCTAssertNotNil ( controller. messages. first { $0. id == " banned2 " } )
2455
+ XCTAssertNotNil ( controller. messages. first { $0. id == " other " } )
2456
+
2457
+ // When
2458
+ let userMessagesDeletedEvent = UserMessagesDeletedEvent (
2459
+ user: . mock( id: bannedUserId) ,
2460
+ hardDelete: true ,
2461
+ createdAt: eventCreatedAt
2462
+ )
2463
+ controller. eventsController (
2464
+ EventsController ( notificationCenter: client. eventNotificationCenter) ,
2465
+ didReceiveEvent: userMessagesDeletedEvent
2466
+ )
2467
+
2468
+ // Then
2469
+ XCTAssertEqual ( controller. messages. count, 1 ) // Only other user's message remains
2470
+
2471
+ // Banned user messages should be completely removed
2472
+ XCTAssertNil ( controller. messages. first { $0. id == " banned1 " } )
2473
+ XCTAssertNil ( controller. messages. first { $0. id == " banned2 " } )
2474
+
2475
+ // Other user message should remain unaffected
2476
+ XCTAssertNotNil ( controller. messages. first { $0. id == " other " } )
2477
+ XCTAssertNil ( controller. messages. first { $0. id == " other " } ? . deletedAt)
2478
+ }
2302
2479
}
2303
2480
2304
2481
// MARK: - Message CRUD Tests
0 commit comments