Skip to content

Commit 6ec6b53

Browse files
committed
Add test coverage to replacing() and changing() functions
1 parent 54c5460 commit 6ec6b53

File tree

2 files changed

+151
-1
lines changed

2 files changed

+151
-1
lines changed

Sources/StreamChat/Models/ChatMessage.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ public struct ChatMessage {
303303
threadParticipants: threadParticipants,
304304
attachments: attachments ?? allAttachments,
305305
latestReplies: latestReplies,
306-
localState: localState,
306+
localState: state ?? localState,
307307
isFlaggedByCurrentUser: isFlaggedByCurrentUser,
308308
latestReactions: latestReactions,
309309
currentUserReactions: currentUserReactions,

Tests/StreamChatTests/Models/ChatMessage_Tests.swift

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,4 +436,154 @@ final class ChatMessage_Tests: XCTestCase {
436436
XCTAssertEqual(partialReplacement.extraData, [:])
437437
XCTAssertEqual(partialReplacement.allAttachments, [])
438438
}
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+
}
439589
}

0 commit comments

Comments
 (0)