mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			183 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Objective-C
		
	
			
		
		
	
	
			183 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Objective-C
		
	
//
 | 
						|
//  Copyright (c) 2017 Open Whisper Systems. All rights reserved.
 | 
						|
//
 | 
						|
 | 
						|
#import <XCTest/XCTest.h>
 | 
						|
 | 
						|
#import "ContactsManagerProtocol.h"
 | 
						|
#import "ContactsUpdater.h"
 | 
						|
#import "Cryptography.h"
 | 
						|
#import "OWSFakeCallMessageHandler.h"
 | 
						|
#import "OWSFakeContactsManager.h"
 | 
						|
#import "OWSFakeContactsUpdater.h"
 | 
						|
#import "OWSFakeMessageSender.h"
 | 
						|
#import "OWSFakeNetworkManager.h"
 | 
						|
#import "OWSMessageSender.h"
 | 
						|
#import "OWSSignalServiceProtos.pb.h"
 | 
						|
#import "TSGroupThread.h"
 | 
						|
#import "TSMessagesManager.h"
 | 
						|
#import "TSNetworkManager.h"
 | 
						|
#import "OWSIdentityManager.h"
 | 
						|
#import "TSStorageManager.h"
 | 
						|
#import "OWSUnitTestEnvironment.h"
 | 
						|
 | 
						|
NS_ASSUME_NONNULL_BEGIN
 | 
						|
 | 
						|
@interface TSMessagesManager (Testing)
 | 
						|
 | 
						|
// Private init for stubbing dependencies
 | 
						|
 | 
						|
- (instancetype)initWithNetworkManager:(TSNetworkManager *)networkManager
 | 
						|
                        storageManager:(TSStorageManager *)storageManager
 | 
						|
                    callMessageHandler:(id<OWSCallMessageHandler>)callMessageHandler
 | 
						|
                       contactsManager:(id<ContactsManagerProtocol>)contactsManager
 | 
						|
                       contactsUpdater:(ContactsUpdater *)contactsUpdater
 | 
						|
                       identityManager:(OWSIdentityManager *)identityManager
 | 
						|
                         messageSender:(OWSMessageSender *)messageSender;
 | 
						|
 | 
						|
// private method we are testing
 | 
						|
- (void)handleIncomingEnvelope:(OWSSignalServiceProtosEnvelope *)messageEnvelope
 | 
						|
               withSyncMessage:(OWSSignalServiceProtosSyncMessage *)syncMessage;
 | 
						|
 | 
						|
- (void)handleIncomingEnvelope:(OWSSignalServiceProtosEnvelope *)messageEnvelope
 | 
						|
               withDataMessage:(OWSSignalServiceProtosDataMessage *)dataMessage;
 | 
						|
 | 
						|
@end
 | 
						|
 | 
						|
@interface TSMessagesManagerTest : XCTestCase
 | 
						|
 | 
						|
@end
 | 
						|
 | 
						|
@implementation TSMessagesManagerTest
 | 
						|
 | 
						|
- (TSMessagesManager *)messagesManagerWithSender:(OWSMessageSender *)messageSender
 | 
						|
{
 | 
						|
    return [[TSMessagesManager alloc] initWithNetworkManager:[OWSFakeNetworkManager new]
 | 
						|
                                              storageManager:[TSStorageManager sharedManager]
 | 
						|
                                          callMessageHandler:[OWSFakeCallMessageHandler new]
 | 
						|
                                             contactsManager:[OWSFakeContactsManager new]
 | 
						|
                                             contactsUpdater:[OWSFakeContactsUpdater new]
 | 
						|
                                             identityManager:[OWSIdentityManager sharedManager]
 | 
						|
                                               messageSender:messageSender];
 | 
						|
}
 | 
						|
 | 
						|
- (void)setUp
 | 
						|
{
 | 
						|
    [super setUp];
 | 
						|
    
 | 
						|
    [OWSUnitTestEnvironment ensureSetup];
 | 
						|
}
 | 
						|
 | 
						|
- (void)testIncomingSyncContactMessage
 | 
						|
{
 | 
						|
    XCTestExpectation *messageWasSent = [self expectationWithDescription:@"message was sent"];
 | 
						|
    TSMessagesManager *messagesManager =
 | 
						|
        [self messagesManagerWithSender:[[OWSFakeMessageSender alloc] initWithExpectation:messageWasSent]];
 | 
						|
 | 
						|
    OWSSignalServiceProtosEnvelopeBuilder *envelopeBuilder = [OWSSignalServiceProtosEnvelopeBuilder new];
 | 
						|
    OWSSignalServiceProtosSyncMessageBuilder *messageBuilder = [OWSSignalServiceProtosSyncMessageBuilder new];
 | 
						|
    OWSSignalServiceProtosSyncMessageRequestBuilder *requestBuilder =
 | 
						|
        [OWSSignalServiceProtosSyncMessageRequestBuilder new];
 | 
						|
    [requestBuilder setType:OWSSignalServiceProtosSyncMessageRequestTypeGroups];
 | 
						|
    [messageBuilder setRequest:[requestBuilder build]];
 | 
						|
 | 
						|
    [messagesManager handleIncomingEnvelope:[envelopeBuilder build] withSyncMessage:[messageBuilder build]];
 | 
						|
 | 
						|
    [self waitForExpectationsWithTimeout:5
 | 
						|
                                 handler:^(NSError *error) {
 | 
						|
                                     NSLog(@"No message submitted.");
 | 
						|
                                 }];
 | 
						|
}
 | 
						|
 | 
						|
- (void)testGroupUpdate
 | 
						|
{
 | 
						|
    NSData *groupIdData = [Cryptography generateRandomBytes:32];
 | 
						|
    NSString *groupThreadId = [TSGroupThread threadIdFromGroupId:groupIdData];
 | 
						|
    TSGroupThread *groupThread = [TSGroupThread fetchObjectWithUniqueID:groupThreadId];
 | 
						|
    XCTAssertNil(groupThread);
 | 
						|
 | 
						|
    TSMessagesManager *messagesManager = [self messagesManagerWithSender:[OWSFakeMessageSender new]];
 | 
						|
 | 
						|
    OWSSignalServiceProtosEnvelopeBuilder *envelopeBuilder = [OWSSignalServiceProtosEnvelopeBuilder new];
 | 
						|
 | 
						|
    OWSSignalServiceProtosGroupContextBuilder *groupContextBuilder = [OWSSignalServiceProtosGroupContextBuilder new];
 | 
						|
    groupContextBuilder.name = @"Newly created Group Name";
 | 
						|
    groupContextBuilder.id = groupIdData;
 | 
						|
    groupContextBuilder.type = OWSSignalServiceProtosGroupContextTypeUpdate;
 | 
						|
 | 
						|
    OWSSignalServiceProtosDataMessageBuilder *messageBuilder = [OWSSignalServiceProtosDataMessageBuilder new];
 | 
						|
    messageBuilder.group = [groupContextBuilder build];
 | 
						|
 | 
						|
    [messagesManager handleIncomingEnvelope:[envelopeBuilder build] withDataMessage:[messageBuilder build]];
 | 
						|
 | 
						|
    groupThread = [TSGroupThread fetchObjectWithUniqueID:groupThreadId];
 | 
						|
    XCTAssertNotNil(groupThread);
 | 
						|
    XCTAssertEqualObjects(@"Newly created Group Name", groupThread.name);
 | 
						|
}
 | 
						|
 | 
						|
- (void)testGroupUpdateWithAvatar
 | 
						|
{
 | 
						|
    NSData *groupIdData = [Cryptography generateRandomBytes:32];
 | 
						|
    NSString *groupThreadId = [TSGroupThread threadIdFromGroupId:groupIdData];
 | 
						|
    TSGroupThread *groupThread = [TSGroupThread fetchObjectWithUniqueID:groupThreadId];
 | 
						|
    XCTAssertNil(groupThread);
 | 
						|
 | 
						|
    TSMessagesManager *messagesManager = [self messagesManagerWithSender:[OWSFakeMessageSender new]];
 | 
						|
 | 
						|
 | 
						|
    OWSSignalServiceProtosEnvelopeBuilder *envelopeBuilder = [OWSSignalServiceProtosEnvelopeBuilder new];
 | 
						|
 | 
						|
    OWSSignalServiceProtosGroupContextBuilder *groupContextBuilder = [OWSSignalServiceProtosGroupContextBuilder new];
 | 
						|
    groupContextBuilder.name = @"Newly created Group with Avatar Name";
 | 
						|
    groupContextBuilder.id = groupIdData;
 | 
						|
    groupContextBuilder.type = OWSSignalServiceProtosGroupContextTypeUpdate;
 | 
						|
 | 
						|
    OWSSignalServiceProtosAttachmentPointerBuilder *attachmentBuilder =
 | 
						|
        [OWSSignalServiceProtosAttachmentPointerBuilder new];
 | 
						|
    attachmentBuilder.id = 1234;
 | 
						|
    attachmentBuilder.contentType = @"image/png";
 | 
						|
    attachmentBuilder.key = [NSData new];
 | 
						|
    attachmentBuilder.size = 123;
 | 
						|
    groupContextBuilder.avatar = [attachmentBuilder build];
 | 
						|
 | 
						|
    OWSSignalServiceProtosDataMessageBuilder *messageBuilder = [OWSSignalServiceProtosDataMessageBuilder new];
 | 
						|
    messageBuilder.group = [groupContextBuilder build];
 | 
						|
 | 
						|
    [messagesManager handleIncomingEnvelope:[envelopeBuilder build] withDataMessage:[messageBuilder build]];
 | 
						|
 | 
						|
    groupThread = [TSGroupThread fetchObjectWithUniqueID:groupThreadId];
 | 
						|
    XCTAssertNotNil(groupThread);
 | 
						|
    XCTAssertEqualObjects(@"Newly created Group with Avatar Name", groupThread.name);
 | 
						|
}
 | 
						|
 | 
						|
- (void)testUnknownGroupMessageIsIgnored
 | 
						|
{
 | 
						|
    NSData *groupIdData = [Cryptography generateRandomBytes:32];
 | 
						|
    TSGroupThread *groupThread = [TSGroupThread getOrCreateThreadWithGroupIdData:groupIdData];
 | 
						|
 | 
						|
    // Sanity check
 | 
						|
    XCTAssertEqual(0, groupThread.numberOfInteractions);
 | 
						|
 | 
						|
    TSMessagesManager *messagesManager = [self messagesManagerWithSender:[OWSFakeMessageSender new]];
 | 
						|
 | 
						|
    OWSSignalServiceProtosEnvelopeBuilder *envelopeBuilder = [OWSSignalServiceProtosEnvelopeBuilder new];
 | 
						|
 | 
						|
    OWSSignalServiceProtosGroupContextBuilder *groupContextBuilder = [OWSSignalServiceProtosGroupContextBuilder new];
 | 
						|
    groupContextBuilder.name = @"Newly created Group with Avatar Name";
 | 
						|
    groupContextBuilder.id = groupIdData;
 | 
						|
 | 
						|
    // e.g. some future feature sent from another device that we don't yet support.
 | 
						|
    groupContextBuilder.type = 666;
 | 
						|
 | 
						|
    OWSSignalServiceProtosDataMessageBuilder *messageBuilder = [OWSSignalServiceProtosDataMessageBuilder new];
 | 
						|
    messageBuilder.group = [groupContextBuilder build];
 | 
						|
 | 
						|
    [messagesManager handleIncomingEnvelope:[envelopeBuilder build] withDataMessage:[messageBuilder build]];
 | 
						|
 | 
						|
    XCTAssertEqual(0, groupThread.numberOfInteractions);
 | 
						|
}
 | 
						|
 | 
						|
@end
 | 
						|
 | 
						|
NS_ASSUME_NONNULL_END
 |