Fix rebase breakage. Make environment properties mutable in tests.

pull/1/head
Matthew Chen 7 years ago
parent 3b2c5bfc7b
commit e8186a7005

@ -6,43 +6,9 @@ import XCTest
@testable import Signal @testable import Signal
@testable import SignalMessaging @testable import SignalMessaging
// TODO: We might be able to merge this with OWSFakeContactsManager.
@objc @objc
class StubbableEnvironment: SSKEnvironment { class ConversationSearcherContactsManager: NSObject, ContactsManagerProtocol {
let proxy: SSKEnvironment
init(proxy: SSKEnvironment) {
self.proxy = proxy
super.init(callMessageHandler: proxy.callMessageHandler, contactsManager: proxy.contactsManager, messageSender: proxy.messageSender, notificationsManager: proxy.notificationsManager, profileManager: proxy.profileManager)
}
var stubbedCallMessageHandler: OWSCallMessageHandler?
override var callMessageHandler: OWSCallMessageHandler {
return stubbedCallMessageHandler ?? proxy.callMessageHandler
}
var stubbedContactsManager: ContactsManagerProtocol?
override var contactsManager: ContactsManagerProtocol {
return stubbedContactsManager ?? proxy.contactsManager
}
var stubbedMessageSender: MessageSender?
override var messageSender: MessageSender {
return stubbedMessageSender ?? proxy.messageSender
}
var stubbedNotificationsManager: NotificationsProtocol?
override var notificationsManager: NotificationsProtocol {
return stubbedNotificationsManager ?? proxy.notificationsManager
}
var stubbedProfileManager: ProfileManagerProtocol?
override var profileManager: ProfileManagerProtocol {
return stubbedProfileManager ?? proxy.profileManager
}
}
@objc
class FakeContactsManager: NSObject, ContactsManagerProtocol {
func displayName(forPhoneIdentifier phoneNumber: String?) -> String { func displayName(forPhoneIdentifier phoneNumber: String?) -> String {
if phoneNumber == aliceRecipientId { if phoneNumber == aliceRecipientId {
@ -101,12 +67,8 @@ class ConversationSearcherTest: SignalBaseTest {
// MARK: - Test Life Cycle // MARK: - Test Life Cycle
var originalEnvironment: SSKEnvironment?
override func tearDown() { override func tearDown() {
super.tearDown() super.tearDown()
SSKEnvironment.shared = originalEnvironment!
} }
override func setUp() { override func setUp() {
@ -118,12 +80,8 @@ class ConversationSearcherTest: SignalBaseTest {
TSGroupThread.removeAllObjectsInCollection() TSGroupThread.removeAllObjectsInCollection()
TSMessage.removeAllObjectsInCollection() TSMessage.removeAllObjectsInCollection()
originalEnvironment = SSKEnvironment.shared // Replace this singleton.
assert(originalEnvironment != nil) SSKEnvironment.shared.contactsManager = ConversationSearcherContactsManager()
let testEnvironment: StubbableEnvironment = StubbableEnvironment(proxy: originalEnvironment!)
testEnvironment.stubbedContactsManager = FakeContactsManager()
SSKEnvironment.shared = testEnvironment
self.dbConnection.readWrite { transaction in self.dbConnection.readWrite { transaction in
let bookModel = TSGroupModel(title: "Book Club", memberIds: [aliceRecipientId, bobRecipientId], image: nil, groupId: Randomness.generateRandomBytes(16)) let bookModel = TSGroupModel(title: "Book Club", memberIds: [aliceRecipientId, bobRecipientId], image: nil, groupId: Randomness.generateRandomBytes(16))

@ -10,6 +10,19 @@ NS_ASSUME_NONNULL_BEGIN
static SSKEnvironment *sharedSSKEnvironment; static SSKEnvironment *sharedSSKEnvironment;
@interface SSKEnvironment ()
@property (nonatomic) id<ContactsManagerProtocol> contactsManager;
@property (nonatomic) OWSMessageSender *messageSender;
@property (nonatomic) id<ProfileManagerProtocol> profileManager;
@property (nonatomic) OWSPrimaryStorage *primaryStorage;
@property (nonatomic) ContactsUpdater *contactsUpdater;
@property (nonatomic) TSNetworkManager *networkManager;
@end
#pragma mark -
@implementation SSKEnvironment @implementation SSKEnvironment
@synthesize callMessageHandler = _callMessageHandler; @synthesize callMessageHandler = _callMessageHandler;

@ -6,6 +6,23 @@
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
// This should only be used in the tests.
#ifdef DEBUG
@interface SSKEnvironment (MockSSKEnvironment)
// Redeclare these properties as mutable so that tests can replace singletons.
@property (nonatomic) id<ContactsManagerProtocol> contactsManager;
@property (nonatomic) OWSMessageSender *messageSender;
@property (nonatomic) id<ProfileManagerProtocol> profileManager;
@property (nonatomic) OWSPrimaryStorage *primaryStorage;
@property (nonatomic) ContactsUpdater *contactsUpdater;
@property (nonatomic) TSNetworkManager *networkManager;
@end
#pragma mark -
@interface MockSSKEnvironment : SSKEnvironment @interface MockSSKEnvironment : SSKEnvironment
+ (void)activate; + (void)activate;
@ -14,4 +31,6 @@ NS_ASSUME_NONNULL_BEGIN
@end @end
#endif
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END

@ -15,14 +15,28 @@ NS_ASSUME_NONNULL_BEGIN
return @"Fake name"; return @"Fake name";
} }
- (NSArray<Contact *> *)signalContacts - (NSArray<SignalAccount *> *)signalAccounts
{ {
return @[]; return @[];
} }
- (NSArray<SignalAccount *> *)signalAccounts - (BOOL)isSystemContact:(NSString *)recipientId
{ {
return @[]; return YES;
}
- (BOOL)isSystemContactWithSignalAccount:(NSString *)recipientId
{
return YES;
}
- (NSComparisonResult)compareSignalAccount:(SignalAccount *)left
withSignalAccount:(SignalAccount *)right NS_SWIFT_NAME(compare(signalAccount:with:))
{
// If this method ends up being used by the tests, we should provide a better implementation.
OWSAbstractMethod();
return NSOrderedAscending;
} }
+ (BOOL)name:(NSString *_Nonnull)nameString matchesQuery:(NSString *_Nonnull)queryString + (BOOL)name:(NSString *_Nonnull)nameString matchesQuery:(NSString *_Nonnull)queryString
@ -35,6 +49,21 @@ NS_ASSUME_NONNULL_BEGIN
return nil; return nil;
} }
- (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 @end
#endif #endif

Loading…
Cancel
Save