@@ -984,6 +984,101 @@ class MessageComposerViewModel_Tests: StreamChatTestCase {
984984 XCTAssertEqual ( viewModel. text, " Draft " )
985985 }
986986
987+ func test_messageComposerVM_whenLastAssetRemoved_shouldDeleteDraft( ) {
988+ // Given
989+ let channelController = makeChannelController ( )
990+ let draftMessage = DraftMessage . mock ( text: " " )
991+ channelController. channel_mock = . mock( cid: . unique, draftMessage: draftMessage)
992+ let viewModel = makeComposerDraftsViewModel (
993+ channelController: channelController,
994+ messageController: nil
995+ )
996+ let asset = defaultAsset
997+ viewModel. imageTapped ( asset)
998+
999+ // When
1000+ viewModel. imageTapped ( asset) // Remove the asset by tapping again
1001+
1002+ // Then
1003+ XCTAssertEqual ( channelController. deleteDraftMessage_callCount, 1 )
1004+ }
1005+
1006+ func test_messageComposerVM_whenLastFileRemoved_shouldDeleteDraft( ) {
1007+ // Given
1008+ let channelController = makeChannelController ( )
1009+ let draftMessage = DraftMessage . mock ( text: " " )
1010+ channelController. channel_mock = . mock( cid: . unique, draftMessage: draftMessage)
1011+ let viewModel = makeComposerDraftsViewModel (
1012+ channelController: channelController,
1013+ messageController: nil
1014+ )
1015+ viewModel. addedFileURLs = [ mockURL]
1016+
1017+ // When
1018+ viewModel. removeAttachment ( with: mockURL. absoluteString)
1019+
1020+ // Then
1021+ XCTAssertEqual ( channelController. deleteDraftMessage_callCount, 1 )
1022+ }
1023+
1024+ func test_messageComposerVM_whenLastVoiceRecordingRemoved_shouldDeleteDraft( ) {
1025+ // Given
1026+ let channelController = makeChannelController ( )
1027+ let draftMessage = DraftMessage . mock ( text: " " )
1028+ channelController. channel_mock = . mock( cid: . unique, draftMessage: draftMessage)
1029+ let viewModel = makeComposerDraftsViewModel (
1030+ channelController: channelController,
1031+ messageController: nil
1032+ )
1033+ let recording = AddedVoiceRecording ( url: mockURL, duration: 1.0 , waveform: [ 0.5 ] )
1034+ viewModel. addedVoiceRecordings = [ recording]
1035+
1036+ // When
1037+ viewModel. removeAttachment ( with: mockURL. absoluteString)
1038+
1039+ // Then
1040+ XCTAssertEqual ( channelController. deleteDraftMessage_callCount, 1 )
1041+ }
1042+
1043+ func test_messageComposerVM_whenLastCustomAttachmentRemoved_shouldDeleteDraft( ) {
1044+ // Given
1045+ let channelController = makeChannelController ( )
1046+ let draftMessage = DraftMessage . mock ( text: " " )
1047+ channelController. channel_mock = . mock( cid: . unique, draftMessage: draftMessage)
1048+ let viewModel = makeComposerDraftsViewModel (
1049+ channelController: channelController,
1050+ messageController: nil
1051+ )
1052+ let attachment = CustomAttachment ( id: . unique, content: . mockFile)
1053+ viewModel. customAttachmentTapped ( attachment)
1054+
1055+ // When
1056+ viewModel. customAttachmentTapped ( attachment) // Remove by tapping again
1057+
1058+ // Then
1059+ XCTAssertEqual ( channelController. deleteDraftMessage_callCount, 1 )
1060+ }
1061+
1062+ func test_messageComposerVM_whenRemovingAttachment_withTextPresent_shouldNotDeleteDraft( ) {
1063+ // Given
1064+ let channelController = makeChannelController ( )
1065+ let draftMessage = DraftMessage . mock ( text: " Hello " )
1066+ channelController. channel_mock = . mock( cid: . unique, draftMessage: draftMessage)
1067+ let viewModel = makeComposerDraftsViewModel (
1068+ channelController: channelController,
1069+ messageController: nil
1070+ )
1071+ viewModel. text = " Hello "
1072+ let asset = defaultAsset
1073+ viewModel. imageTapped ( asset)
1074+
1075+ // When
1076+ viewModel. imageTapped ( asset) // Remove the asset by tapping again
1077+
1078+ // Then
1079+ XCTAssertEqual ( channelController. deleteDraftMessage_callCount, 0 )
1080+ }
1081+
9871082 // MARK: - private
9881083
9891084 private func makeComposerDraftsViewModel(
0 commit comments