session-ios/Signal/test/ViewControllers/ConversationViewItemTest.m

276 lines
12 KiB
Mathematica
Raw Normal View History

//
2018-01-19 16:42:55 +01:00
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
#import "ConversationViewItem.h"
2018-09-07 23:19:24 +02:00
#import "SignalBaseTest.h"
#import <MobileCoreServices/MobileCoreServices.h>
2018-07-18 00:42:09 +02:00
#import <SignalMessaging/SignalMessaging-Swift.h>
#import <SignalServiceKit/MIMETypeUtil.h>
#import <SignalServiceKit/TSAttachmentStream.h>
2018-07-18 00:42:09 +02:00
#import <SignalServiceKit/TSContactThread.h>
#import <SignalServiceKit/TSOutgoingMessage.h>
#import <YapDatabase/YapDatabaseConnection.h>
2018-09-07 23:19:24 +02:00
@interface ConversationViewItemTest : SignalBaseTest
2018-07-18 00:42:09 +02:00
@property TSThread *thread;
@property ConversationStyle *conversationStyle;
@end
@implementation ConversationViewItemTest
- (void)setUp
{
[super setUp];
2018-07-18 00:42:09 +02:00
self.thread = [TSContactThread getOrCreateThreadWithContactId:@"+15555555"];
self.conversationStyle = [[ConversationStyle alloc] initWithThread:self.thread];
}
- (void)tearDown
{
// Put teardown code here. This method is called after the invocation of each test method in the class.
[super tearDown];
}
- (NSString *)fakeTextMessageText
{
return @"abc";
}
2018-09-28 00:49:01 +02:00
- (ConversationInteractionViewItem *)textViewItem
{
TSOutgoingMessage *message =
2018-07-18 00:42:09 +02:00
[TSOutgoingMessage outgoingMessageInThread:self.thread messageBody:self.fakeTextMessageText attachmentId:nil];
[message save];
2018-09-28 00:49:01 +02:00
__block ConversationInteractionViewItem *viewItem = nil;
[self readWithBlock:^(YapDatabaseReadTransaction *transaction) {
2018-09-28 00:49:01 +02:00
viewItem = [[ConversationInteractionViewItem alloc] initWithInteraction:message
isGroupThread:NO
transaction:transaction
conversationStyle:self.conversationStyle];
}];
return viewItem;
}
2018-09-28 00:49:01 +02:00
- (ConversationInteractionViewItem *)viewItemWithAttachmentMimetype:(NSString *)mimeType filename:(NSString *)filename
{
OWSAssertDebug(filename.length > 0);
NSString *resourcePath = [[NSBundle bundleForClass:[self class]] resourcePath];
NSString *filePath = [resourcePath stringByAppendingPathComponent:filename];
OWSAssertDebug([[NSFileManager defaultManager] fileExistsAtPath:filePath]);
2018-08-03 20:35:22 +02:00
DataSource *dataSource = [DataSourcePath dataSourceWithFilePath:filePath shouldDeleteOnDeallocation:NO];
TSAttachmentStream *attachment = [[TSAttachmentStream alloc] initWithContentType:mimeType
byteCount:(UInt32)dataSource.dataLength
sourceFilename:nil];
BOOL success = [attachment writeDataSource:dataSource];
OWSAssertDebug(success);
[attachment save];
TSOutgoingMessage *message =
2018-07-18 00:42:09 +02:00
[TSOutgoingMessage outgoingMessageInThread:self.thread messageBody:nil attachmentId:attachment.uniqueId];
[message save];
2018-09-28 00:49:01 +02:00
__block ConversationInteractionViewItem *viewItem = nil;
[self readWithBlock:^(YapDatabaseReadTransaction *transaction) {
2018-09-28 00:49:01 +02:00
viewItem = [[ConversationInteractionViewItem alloc] initWithInteraction:message
isGroupThread:NO
transaction:transaction
conversationStyle:self.conversationStyle];
}];
return viewItem;
}
2018-09-28 00:49:01 +02:00
- (ConversationInteractionViewItem *)stillImageViewItem
{
2018-06-19 20:34:44 +02:00
return [self viewItemWithAttachmentMimetype:OWSMimeTypeImageJpeg filename:@"test-jpg.jpg"];
}
2018-09-28 00:49:01 +02:00
- (ConversationInteractionViewItem *)animatedImageViewItem
{
2018-06-19 20:34:44 +02:00
return [self viewItemWithAttachmentMimetype:OWSMimeTypeImageGif filename:@"test-gif.gif"];
}
2018-09-28 00:49:01 +02:00
- (ConversationInteractionViewItem *)videoViewItem
{
return [self viewItemWithAttachmentMimetype:@"video/mp4" filename:@"test-mp4.mp4"];
}
2018-09-28 00:49:01 +02:00
- (ConversationInteractionViewItem *)audioViewItem
{
return [self viewItemWithAttachmentMimetype:@"audio/mp3" filename:@"test-mp3.mp3"];
}
// Test Delete
- (void)testPerformDeleteEditingActionWithNonMediaMessage
{
2018-09-28 00:49:01 +02:00
ConversationInteractionViewItem *viewItem = self.textViewItem;
XCTAssertNotNil([TSMessage fetchObjectWithUniqueID:viewItem.interaction.uniqueId]);
[viewItem deleteAction];
XCTAssertNil([TSMessage fetchObjectWithUniqueID:viewItem.interaction.uniqueId]);
}
- (void)testPerformDeleteActionWithPhotoMessage
{
2018-09-28 00:49:01 +02:00
ConversationInteractionViewItem *viewItem = self.stillImageViewItem;
XCTAssertEqual((NSUInteger)1, ((TSMessage *)viewItem.interaction).attachmentIds.count);
NSString *_Nullable attachmentId = ((TSMessage *)viewItem.interaction).attachmentIds.firstObject;
XCTAssertNotNil(attachmentId);
TSAttachment *_Nullable attachment = [TSAttachment fetchObjectWithUniqueID:attachmentId];
XCTAssertTrue([attachment isKindOfClass:[TSAttachmentStream class]]);
TSAttachmentStream *_Nullable attachmentStream = (TSAttachmentStream *)attachment;
2018-09-04 16:25:42 +02:00
NSString *_Nullable filePath = attachmentStream.originalFilePath;
XCTAssertNotNil(filePath);
XCTAssertNotNil([TSMessage fetchObjectWithUniqueID:viewItem.interaction.uniqueId]);
XCTAssertNotNil([TSAttachment fetchObjectWithUniqueID:attachmentId]);
XCTAssertTrue([[NSFileManager defaultManager] fileExistsAtPath:filePath]);
[viewItem deleteAction];
XCTAssertNil([TSMessage fetchObjectWithUniqueID:viewItem.interaction.uniqueId]);
XCTAssertNil([TSAttachment fetchObjectWithUniqueID:attachmentId]);
XCTAssertFalse([[NSFileManager defaultManager] fileExistsAtPath:filePath]);
}
- (void)testPerformDeleteEditingActionWithAnimatedMessage
{
2018-09-28 00:49:01 +02:00
ConversationInteractionViewItem *viewItem = self.animatedImageViewItem;
XCTAssertEqual((NSUInteger)1, ((TSMessage *)viewItem.interaction).attachmentIds.count);
NSString *_Nullable attachmentId = ((TSMessage *)viewItem.interaction).attachmentIds.firstObject;
XCTAssertNotNil(attachmentId);
TSAttachment *_Nullable attachment = [TSAttachment fetchObjectWithUniqueID:attachmentId];
XCTAssertTrue([attachment isKindOfClass:[TSAttachmentStream class]]);
TSAttachmentStream *_Nullable attachmentStream = (TSAttachmentStream *)attachment;
2018-09-04 16:25:42 +02:00
NSString *_Nullable filePath = attachmentStream.originalFilePath;
XCTAssertNotNil(filePath);
XCTAssertNotNil([TSMessage fetchObjectWithUniqueID:viewItem.interaction.uniqueId]);
XCTAssertNotNil([TSAttachment fetchObjectWithUniqueID:attachmentId]);
XCTAssertTrue([[NSFileManager defaultManager] fileExistsAtPath:filePath]);
[viewItem deleteAction];
XCTAssertNil([TSMessage fetchObjectWithUniqueID:viewItem.interaction.uniqueId]);
XCTAssertNil([TSAttachment fetchObjectWithUniqueID:attachmentId]);
XCTAssertFalse([[NSFileManager defaultManager] fileExistsAtPath:filePath]);
}
- (void)testPerformDeleteEditingActionWithVideoMessage
{
2018-09-28 00:49:01 +02:00
ConversationInteractionViewItem *viewItem = self.videoViewItem;
XCTAssertEqual((NSUInteger)1, ((TSMessage *)viewItem.interaction).attachmentIds.count);
NSString *_Nullable attachmentId = ((TSMessage *)viewItem.interaction).attachmentIds.firstObject;
XCTAssertNotNil(attachmentId);
TSAttachment *_Nullable attachment = [TSAttachment fetchObjectWithUniqueID:attachmentId];
XCTAssertTrue([attachment isKindOfClass:[TSAttachmentStream class]]);
TSAttachmentStream *_Nullable attachmentStream = (TSAttachmentStream *)attachment;
2018-09-04 16:25:42 +02:00
NSString *_Nullable filePath = attachmentStream.originalFilePath;
XCTAssertNotNil(filePath);
XCTAssertNotNil([TSMessage fetchObjectWithUniqueID:viewItem.interaction.uniqueId]);
XCTAssertNotNil([TSAttachment fetchObjectWithUniqueID:attachmentId]);
XCTAssertTrue([[NSFileManager defaultManager] fileExistsAtPath:filePath]);
[viewItem deleteAction];
XCTAssertNil([TSMessage fetchObjectWithUniqueID:viewItem.interaction.uniqueId]);
XCTAssertNil([TSAttachment fetchObjectWithUniqueID:attachmentId]);
XCTAssertFalse([[NSFileManager defaultManager] fileExistsAtPath:filePath]);
}
- (void)testPerformDeleteEditingActionWithAudioMessage
{
2018-09-28 00:49:01 +02:00
ConversationInteractionViewItem *viewItem = self.audioViewItem;
XCTAssertEqual((NSUInteger)1, ((TSMessage *)viewItem.interaction).attachmentIds.count);
NSString *_Nullable attachmentId = ((TSMessage *)viewItem.interaction).attachmentIds.firstObject;
XCTAssertNotNil(attachmentId);
TSAttachment *_Nullable attachment = [TSAttachment fetchObjectWithUniqueID:attachmentId];
XCTAssertTrue([attachment isKindOfClass:[TSAttachmentStream class]]);
TSAttachmentStream *_Nullable attachmentStream = (TSAttachmentStream *)attachment;
2018-09-04 16:25:42 +02:00
NSString *_Nullable filePath = attachmentStream.originalFilePath;
XCTAssertNotNil(filePath);
XCTAssertNotNil([TSMessage fetchObjectWithUniqueID:viewItem.interaction.uniqueId]);
XCTAssertNotNil([TSAttachment fetchObjectWithUniqueID:attachmentId]);
XCTAssertTrue([[NSFileManager defaultManager] fileExistsAtPath:filePath]);
[viewItem deleteAction];
XCTAssertNil([TSMessage fetchObjectWithUniqueID:viewItem.interaction.uniqueId]);
XCTAssertNil([TSAttachment fetchObjectWithUniqueID:attachmentId]);
XCTAssertFalse([[NSFileManager defaultManager] fileExistsAtPath:filePath]);
}
// Test Copy
- (void)testPerformCopyEditingActionWithNonMediaMessage
{
// Reset the pasteboard.
UIPasteboard.generalPasteboard.items = @[];
XCTAssertNil(UIPasteboard.generalPasteboard.string);
2018-09-28 00:49:01 +02:00
ConversationInteractionViewItem *viewItem = self.textViewItem;
2018-01-19 16:42:55 +01:00
[viewItem copyTextAction];
XCTAssertEqualObjects(self.fakeTextMessageText, UIPasteboard.generalPasteboard.string);
}
- (void)testPerformCopyEditingActionWithStillImageMessage
{
// Reset the pasteboard.
UIPasteboard.generalPasteboard.items = @[];
XCTAssertNil(UIPasteboard.generalPasteboard.image);
XCTAssertNil([UIPasteboard.generalPasteboard dataForPasteboardType:(NSString *)kUTTypeJPEG]);
2018-09-28 00:49:01 +02:00
ConversationInteractionViewItem *viewItem = self.stillImageViewItem;
2018-01-19 16:42:55 +01:00
[viewItem copyMediaAction];
NSData *_Nullable copiedData = [UIPasteboard.generalPasteboard dataForPasteboardType:(NSString *)kUTTypeJPEG];
XCTAssertTrue(copiedData.length > 0);
}
- (void)testPerformCopyEditingActionWithAnimatedImageMessage
{
// Reset the pasteboard.
UIPasteboard.generalPasteboard.items = @[];
XCTAssertNil(UIPasteboard.generalPasteboard.image);
XCTAssertNil([UIPasteboard.generalPasteboard dataForPasteboardType:(NSString *)kUTTypeGIF]);
2018-09-28 00:49:01 +02:00
ConversationInteractionViewItem *viewItem = self.animatedImageViewItem;
2018-01-19 16:42:55 +01:00
[viewItem copyMediaAction];
NSData *_Nullable copiedData = [UIPasteboard.generalPasteboard dataForPasteboardType:(NSString *)kUTTypeGIF];
XCTAssertTrue(copiedData.length > 0);
}
- (void)testPerformCopyEditingActionWithVideoMessage
{
// Reset the pasteboard.
UIPasteboard.generalPasteboard.items = @[];
XCTAssertNil([UIPasteboard.generalPasteboard dataForPasteboardType:(NSString *)kUTTypeMPEG4]);
2018-09-28 00:49:01 +02:00
ConversationInteractionViewItem *viewItem = self.videoViewItem;
2018-01-19 16:42:55 +01:00
[viewItem copyMediaAction];
NSData *_Nullable copiedData = [UIPasteboard.generalPasteboard dataForPasteboardType:(NSString *)kUTTypeMPEG4];
XCTAssertTrue(copiedData.length > 0);
}
- (void)testPerformCopyEditingActionWithMp3AudioMessage
{
// Reset the pasteboard.
UIPasteboard.generalPasteboard.items = @[];
XCTAssertNil([UIPasteboard.generalPasteboard dataForPasteboardType:(NSString *)kUTTypeMP3]);
2018-09-28 00:49:01 +02:00
ConversationInteractionViewItem *viewItem = self.audioViewItem;
2018-01-19 16:42:55 +01:00
[viewItem copyMediaAction];
NSData *_Nullable copiedData = [UIPasteboard.generalPasteboard dataForPasteboardType:(NSString *)kUTTypeMP3];
XCTAssertTrue(copiedData.length > 0);
}
- (void)unknownAction:(id)sender
{
// It's easier to create this stub method than to suppress the "unknown selector" build warnings.
}
@end