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.
		
		
		
		
		
			
		
			
				
	
	
		
			176 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Objective-C
		
	
			
		
		
	
	
			176 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Objective-C
		
	
| //
 | |
| //  Copyright (c) 2018 Open Whisper Systems. All rights reserved.
 | |
| //
 | |
| 
 | |
| #import "SignalBaseTest.h"
 | |
| #import <SignalCoreKit/NSData+OWS.h>
 | |
| #import <SignalCoreKit/Randomness.h>
 | |
| #import <SignalServiceKit/ContactsManagerProtocol.h>
 | |
| #import <SignalServiceKit/OWSContactsOutputStream.h>
 | |
| #import <SignalServiceKit/OWSGroupsOutputStream.h>
 | |
| #import <SignalServiceKit/SignalAccount.h>
 | |
| #import <SignalServiceKit/SignalServiceKit-Swift.h>
 | |
| 
 | |
| NS_ASSUME_NONNULL_BEGIN
 | |
| 
 | |
| @class CNContact;
 | |
| 
 | |
| @interface TestContactsManager : NSObject <ContactsManagerProtocol>
 | |
| 
 | |
| @end
 | |
| 
 | |
| #pragma mark -
 | |
| 
 | |
| @implementation TestContactsManager
 | |
| 
 | |
| - (NSString *)displayNameForPhoneIdentifier:(NSString *_Nullable)phoneNumber
 | |
| {
 | |
|     return phoneNumber;
 | |
| }
 | |
| 
 | |
| - (NSArray<SignalAccount *> *)signalAccounts
 | |
| {
 | |
|     return @[];
 | |
| }
 | |
| 
 | |
| - (BOOL)isSystemContact:(NSString *)recipientId
 | |
| {
 | |
|     return YES;
 | |
| }
 | |
| 
 | |
| - (BOOL)isSystemContactWithSignalAccount:(NSString *)recipientId
 | |
| {
 | |
|     return YES;
 | |
| }
 | |
| 
 | |
| - (NSComparisonResult)compareSignalAccount:(SignalAccount *)left withSignalAccount:(SignalAccount *)right
 | |
| {
 | |
|     return NSOrderedSame;
 | |
| }
 | |
| 
 | |
| - (nullable CNContact *)cnContactWithId:(nullable NSString *)contactId
 | |
| {
 | |
|     return nil;
 | |
| }
 | |
| 
 | |
| - (nullable NSData *)avatarDataForCNContactId:(nullable NSString *)contactId
 | |
| {
 | |
|     return nil;
 | |
| }
 | |
| 
 | |
| - (nullable UIImage *)avatarImageForCNContactId:(nullable NSString *)contactId
 | |
| {
 | |
|     return nil;
 | |
| }
 | |
| 
 | |
| @end
 | |
| 
 | |
| #pragma mark -
 | |
| 
 | |
| @interface FakeContact : NSObject
 | |
| 
 | |
| @property (nullable, nonatomic) NSString *firstName;
 | |
| @property (nullable, nonatomic) NSString *lastName;
 | |
| @property (nonatomic) NSString *fullName;
 | |
| @property (nonatomic) NSString *comparableNameFirstLast;
 | |
| @property (nonatomic) NSString *comparableNameLastFirst;
 | |
| @property (nonatomic) NSArray<PhoneNumber *> *parsedPhoneNumbers;
 | |
| @property (nonatomic) NSArray<NSString *> *userTextPhoneNumbers;
 | |
| @property (nonatomic) NSArray<NSString *> *emails;
 | |
| @property (nonatomic) NSString *uniqueId;
 | |
| @property (nonatomic) BOOL isSignalContact;
 | |
| @property (nonatomic) NSString *cnContactId;
 | |
| 
 | |
| @end
 | |
| 
 | |
| #pragma mark -
 | |
| 
 | |
| @implementation FakeContact
 | |
| 
 | |
| @end
 | |
| 
 | |
| #pragma mark -
 | |
| 
 | |
| @interface ProtoParsingTest : SignalBaseTest
 | |
| 
 | |
| @end
 | |
| 
 | |
| #pragma mark -
 | |
| 
 | |
| @implementation ProtoParsingTest
 | |
| 
 | |
| - (void)testProtoParsing_empty
 | |
| {
 | |
|     NSData *data = [NSData new];
 | |
|     NSError *error;
 | |
|     SSKProtoEnvelope *_Nullable envelope = [SSKProtoEnvelope parseData:data error:&error];
 | |
|     XCTAssertNil(envelope);
 | |
|     XCTAssertNotNil(error);
 | |
| }
 | |
| 
 | |
| - (void)testProtoParsing_wrong1
 | |
| {
 | |
|     NSData *data = [@"test" dataUsingEncoding:NSUTF8StringEncoding];
 | |
|     NSError *error;
 | |
|     SSKProtoEnvelope *_Nullable envelope = [SSKProtoEnvelope parseData:data error:&error];
 | |
|     XCTAssertNil(envelope);
 | |
|     XCTAssertNotNil(error);
 | |
| }
 | |
| 
 | |
| - (void)testProtoStreams
 | |
| {
 | |
|     NSArray<SignalAccount *> *signalAccounts = @[
 | |
|         [[SignalAccount alloc] initWithRecipientId:@"+13213214321"],
 | |
|         [[SignalAccount alloc] initWithRecipientId:@"+13213214322"],
 | |
|         [[SignalAccount alloc] initWithRecipientId:@"+13213214323"],
 | |
|     ];
 | |
|     NSData *_Nullable streamData = [self dataForSyncingContacts:signalAccounts];
 | |
|     XCTAssertNotNil(streamData);
 | |
| 
 | |
|     XCTAssertEqualObjects(streamData.hexadecimalString,
 | |
|         @"2c0a0c2b31333231333231343332311209416c69636520426f62220f66616b6520636f6c6f72206e616d6540002c0a0c2b31333231333"
 | |
|         @"231343332321209416c69636520426f62220f66616b6520636f6c6f72206e616d6540002c0a0c2b31333231333231343332331209416c"
 | |
|         @"69636520426f62220f66616b6520636f6c6f72206e616d654000");
 | |
| }
 | |
| 
 | |
| - (nullable NSData *)dataForSyncingContacts:(NSArray<SignalAccount *> *)signalAccounts
 | |
| {
 | |
|     TestContactsManager *contactsManager = [TestContactsManager new];
 | |
|     NSOutputStream *dataOutputStream = [NSOutputStream outputStreamToMemory];
 | |
|     [dataOutputStream open];
 | |
|     OWSContactsOutputStream *contactsOutputStream =
 | |
|         [[OWSContactsOutputStream alloc] initWithOutputStream:dataOutputStream];
 | |
| 
 | |
|     for (SignalAccount *signalAccount in signalAccounts) {
 | |
|         OWSRecipientIdentity *_Nullable recipientIdentity = nil;
 | |
|         //        NSData *_Nullable profileKeyData = [Randomness generateRandomBytes:32];
 | |
|         NSData *_Nullable profileKeyData = nil;
 | |
|         OWSDisappearingMessagesConfiguration *_Nullable disappearingMessagesConfiguration = nil;
 | |
|         NSString *_Nullable conversationColorName = @"fake color name";
 | |
| 
 | |
|         FakeContact *fakeContact = [FakeContact new];
 | |
|         fakeContact.cnContactId = @"123";
 | |
|         fakeContact.fullName = @"Alice Bob";
 | |
|         signalAccount.contact = (Contact *)fakeContact;
 | |
| 
 | |
|         [contactsOutputStream writeSignalAccount:signalAccount
 | |
|                                recipientIdentity:recipientIdentity
 | |
|                                   profileKeyData:profileKeyData
 | |
|                                  contactsManager:contactsManager
 | |
|                            conversationColorName:conversationColorName
 | |
|                disappearingMessagesConfiguration:disappearingMessagesConfiguration];
 | |
|     }
 | |
| 
 | |
|     [dataOutputStream close];
 | |
| 
 | |
|     if (contactsOutputStream.hasError) {
 | |
|         return nil;
 | |
|     }
 | |
| 
 | |
|     return [dataOutputStream propertyForKey:NSStreamDataWrittenToMemoryStreamKey];
 | |
| }
 | |
| 
 | |
| @end
 | |
| 
 | |
| NS_ASSUME_NONNULL_END
 |