@@ -436,4 +436,154 @@ final class ChatMessage_Tests: XCTestCase {
436
436
XCTAssertEqual ( partialReplacement. extraData, [ : ] )
437
437
XCTAssertEqual ( partialReplacement. allAttachments, [ ] )
438
438
}
439
+
440
+ func test_replacing_allParameters( ) {
441
+ // Create a mock message with initial values
442
+ let originalMessage = ChatMessage . mock (
443
+ id: . unique,
444
+ cid: . unique,
445
+ text: " Original text " ,
446
+ type: . regular,
447
+ command: " original-command " ,
448
+ arguments: " original-arguments " ,
449
+ extraData: [ " original " : . string( " data " ) ] ,
450
+ translations: [ . english: " Original text " ] ,
451
+ originalLanguage: . french,
452
+ moderationsDetails: nil ,
453
+ attachments: [
454
+ . dummy( id: . init( cid: . unique, messageId: . unique, index: 0 ) )
455
+ ] ,
456
+ localState: . pendingSend
457
+ )
458
+
459
+ // Test replacing all available fields
460
+ let allFieldsReplaced = originalMessage. replacing (
461
+ text: " New text " ,
462
+ type: . reply,
463
+ state: . sending,
464
+ command: " new-command " ,
465
+ arguments: " new-arguments " ,
466
+ attachments: [
467
+ . dummy( id: . init( cid: . unique, messageId: . unique, index: 99 ) )
468
+ ] ,
469
+ translations: [ . spanish: " Texto nuevo " ] ,
470
+ originalLanguage: . german,
471
+ moderationDetails: nil ,
472
+ extraData: [ " new " : . string( " data " ) ]
473
+ )
474
+
475
+ // Verify all replaced fields
476
+ XCTAssertEqual ( allFieldsReplaced. text, " New text " )
477
+ XCTAssertEqual ( allFieldsReplaced. type, . reply)
478
+ XCTAssertEqual ( allFieldsReplaced. localState, . sending)
479
+ XCTAssertEqual ( allFieldsReplaced. command, " new-command " )
480
+ XCTAssertEqual ( allFieldsReplaced. arguments, " new-arguments " )
481
+ XCTAssertEqual ( allFieldsReplaced. extraData [ " new " ] ? . stringValue, " data " )
482
+ XCTAssertEqual ( allFieldsReplaced. allAttachments. first? . id. index, 99 )
483
+ XCTAssertEqual ( allFieldsReplaced. translations ? [ . spanish] , " Texto nuevo " )
484
+ XCTAssertEqual ( allFieldsReplaced. originalLanguage, . german)
485
+ XCTAssertNil ( allFieldsReplaced. moderationDetails)
486
+
487
+ // Verify fields that should remain unchanged
488
+ XCTAssertEqual ( allFieldsReplaced. id, originalMessage. id)
489
+ XCTAssertEqual ( allFieldsReplaced. cid, originalMessage. cid)
490
+ XCTAssertEqual ( allFieldsReplaced. author, originalMessage. author)
491
+ XCTAssertEqual ( allFieldsReplaced. createdAt, originalMessage. createdAt)
492
+
493
+ // Test replacing with nil values (should clear the fields)
494
+ let nilValuesReplacement = originalMessage. replacing (
495
+ text: nil ,
496
+ type: . regular,
497
+ state: nil ,
498
+ command: nil ,
499
+ arguments: nil ,
500
+ attachments: nil ,
501
+ translations: nil ,
502
+ originalLanguage: nil ,
503
+ moderationDetails: nil ,
504
+ extraData: nil
505
+ )
506
+
507
+ // Verify fields are cleared
508
+ XCTAssertEqual ( nilValuesReplacement. text, " " )
509
+ XCTAssertEqual ( nilValuesReplacement. command, nil )
510
+ XCTAssertEqual ( nilValuesReplacement. arguments, nil )
511
+ XCTAssertEqual ( nilValuesReplacement. extraData, [ : ] )
512
+ XCTAssertEqual ( nilValuesReplacement. allAttachments, [ ] )
513
+ XCTAssertEqual ( nilValuesReplacement. translations, nil )
514
+ XCTAssertEqual ( nilValuesReplacement. originalLanguage, nil )
515
+ XCTAssertNil ( nilValuesReplacement. moderationDetails)
516
+ }
517
+
518
+ func test_changing( ) {
519
+ // Create a mock message with initial values
520
+ let originalMessage = ChatMessage . mock (
521
+ id: . unique,
522
+ cid: . unique,
523
+ text: " Original text " ,
524
+ type: . regular,
525
+ command: " original-command " ,
526
+ arguments: " original-arguments " ,
527
+ extraData: [ " original " : . string( " data " ) ] ,
528
+ translations: [ . english: " Original text " ] ,
529
+ originalLanguage: . french,
530
+ moderationsDetails: nil ,
531
+ attachments: [
532
+ . dummy( id: . init( cid: . unique, messageId: . unique, index: 0 ) )
533
+ ]
534
+ )
535
+
536
+ // Test changing only some fields
537
+ let partiallyChangedMessage = originalMessage. changing (
538
+ text: " New text " ,
539
+ type: . reply,
540
+ command: " new-command "
541
+ )
542
+
543
+ // Verify changed fields
544
+ XCTAssertEqual ( partiallyChangedMessage. text, " New text " )
545
+ XCTAssertEqual ( partiallyChangedMessage. type, . reply)
546
+ XCTAssertEqual ( partiallyChangedMessage. command, " new-command " )
547
+
548
+ // Verify unchanged fields
549
+ XCTAssertEqual ( partiallyChangedMessage. arguments, originalMessage. arguments)
550
+ XCTAssertEqual ( partiallyChangedMessage. extraData, originalMessage. extraData)
551
+ XCTAssertEqual ( partiallyChangedMessage. allAttachments, originalMessage. allAttachments)
552
+ XCTAssertEqual ( partiallyChangedMessage. translations, originalMessage. translations)
553
+ XCTAssertEqual ( partiallyChangedMessage. originalLanguage, originalMessage. originalLanguage)
554
+ XCTAssertNil ( partiallyChangedMessage. moderationDetails)
555
+
556
+ // Test changing all available fields
557
+ let translations : [ TranslationLanguage : String ] = [ . spanish: " Texto nuevo " ]
558
+ let fullyChangedMessage = originalMessage. changing (
559
+ text: " New text " ,
560
+ type: . reply,
561
+ state: . sending,
562
+ command: " new-command " ,
563
+ arguments: " new-arguments " ,
564
+ attachments: [
565
+ . dummy( id: . init( cid: . unique, messageId: . unique, index: 99 ) )
566
+ ] ,
567
+ translations: translations,
568
+ originalLanguage: . german,
569
+ moderationDetails: nil ,
570
+ extraData: [ " new " : . string( " data " ) ]
571
+ )
572
+
573
+ // Verify all changed fields
574
+ XCTAssertEqual ( fullyChangedMessage. text, " New text " )
575
+ XCTAssertEqual ( fullyChangedMessage. type, . reply)
576
+ XCTAssertEqual ( fullyChangedMessage. localState, . sending)
577
+ XCTAssertEqual ( fullyChangedMessage. command, " new-command " )
578
+ XCTAssertEqual ( fullyChangedMessage. arguments, " new-arguments " )
579
+ XCTAssertEqual ( fullyChangedMessage. extraData [ " new " ] ? . stringValue, " data " )
580
+ XCTAssertEqual ( fullyChangedMessage. allAttachments. first? . id. index, 99 )
581
+ XCTAssertEqual ( fullyChangedMessage. translations ? [ . spanish] , " Texto nuevo " )
582
+ XCTAssertEqual ( fullyChangedMessage. originalLanguage, . german)
583
+
584
+ // Verify key identifiers remain unchanged
585
+ XCTAssertEqual ( fullyChangedMessage. id, originalMessage. id)
586
+ XCTAssertEqual ( fullyChangedMessage. cid, originalMessage. cid)
587
+ XCTAssertEqual ( fullyChangedMessage. author, originalMessage. author)
588
+ }
439
589
}
0 commit comments