@@ -984,6 +984,101 @@ class MessageComposerViewModel_Tests: StreamChatTestCase {
984
984
XCTAssertEqual ( viewModel. text, " Draft " )
985
985
}
986
986
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
+
987
1082
// MARK: - private
988
1083
989
1084
private func makeComposerDraftsViewModel(
0 commit comments