From e8186a700580a423a067615edf97a51b251b257d Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Wed, 19 Sep 2018 16:30:03 -0400 Subject: [PATCH] Fix rebase breakage. Make environment properties mutable in tests. --- Signal/test/util/SearcherTest.swift | 50 ++----------------- SignalServiceKit/src/SSKEnvironment.m | 13 +++++ .../src/Tests/MockSSKEnvironment.h | 19 +++++++ .../src/Tests/OWSFakeContactsManager.m | 35 +++++++++++-- 4 files changed, 68 insertions(+), 49 deletions(-) diff --git a/Signal/test/util/SearcherTest.swift b/Signal/test/util/SearcherTest.swift index c0b34c4f2..50ec0dc73 100644 --- a/Signal/test/util/SearcherTest.swift +++ b/Signal/test/util/SearcherTest.swift @@ -6,43 +6,9 @@ import XCTest @testable import Signal @testable import SignalMessaging +// TODO: We might be able to merge this with OWSFakeContactsManager. @objc -class StubbableEnvironment: SSKEnvironment { - 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 { +class ConversationSearcherContactsManager: NSObject, ContactsManagerProtocol { func displayName(forPhoneIdentifier phoneNumber: String?) -> String { if phoneNumber == aliceRecipientId { @@ -101,12 +67,8 @@ class ConversationSearcherTest: SignalBaseTest { // MARK: - Test Life Cycle - var originalEnvironment: SSKEnvironment? - override func tearDown() { super.tearDown() - - SSKEnvironment.shared = originalEnvironment! } override func setUp() { @@ -118,12 +80,8 @@ class ConversationSearcherTest: SignalBaseTest { TSGroupThread.removeAllObjectsInCollection() TSMessage.removeAllObjectsInCollection() - originalEnvironment = SSKEnvironment.shared - assert(originalEnvironment != nil) - - let testEnvironment: StubbableEnvironment = StubbableEnvironment(proxy: originalEnvironment!) - testEnvironment.stubbedContactsManager = FakeContactsManager() - SSKEnvironment.shared = testEnvironment + // Replace this singleton. + SSKEnvironment.shared.contactsManager = ConversationSearcherContactsManager() self.dbConnection.readWrite { transaction in let bookModel = TSGroupModel(title: "Book Club", memberIds: [aliceRecipientId, bobRecipientId], image: nil, groupId: Randomness.generateRandomBytes(16)) diff --git a/SignalServiceKit/src/SSKEnvironment.m b/SignalServiceKit/src/SSKEnvironment.m index b65595213..61ba00cb0 100644 --- a/SignalServiceKit/src/SSKEnvironment.m +++ b/SignalServiceKit/src/SSKEnvironment.m @@ -10,6 +10,19 @@ NS_ASSUME_NONNULL_BEGIN static SSKEnvironment *sharedSSKEnvironment; +@interface SSKEnvironment () + +@property (nonatomic) id contactsManager; +@property (nonatomic) OWSMessageSender *messageSender; +@property (nonatomic) id profileManager; +@property (nonatomic) OWSPrimaryStorage *primaryStorage; +@property (nonatomic) ContactsUpdater *contactsUpdater; +@property (nonatomic) TSNetworkManager *networkManager; + +@end + +#pragma mark - + @implementation SSKEnvironment @synthesize callMessageHandler = _callMessageHandler; diff --git a/SignalServiceKit/src/Tests/MockSSKEnvironment.h b/SignalServiceKit/src/Tests/MockSSKEnvironment.h index 07707ab5a..0d56d0a32 100644 --- a/SignalServiceKit/src/Tests/MockSSKEnvironment.h +++ b/SignalServiceKit/src/Tests/MockSSKEnvironment.h @@ -6,6 +6,23 @@ 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 contactsManager; +@property (nonatomic) OWSMessageSender *messageSender; +@property (nonatomic) id profileManager; +@property (nonatomic) OWSPrimaryStorage *primaryStorage; +@property (nonatomic) ContactsUpdater *contactsUpdater; +@property (nonatomic) TSNetworkManager *networkManager; + +@end + +#pragma mark - + @interface MockSSKEnvironment : SSKEnvironment + (void)activate; @@ -14,4 +31,6 @@ NS_ASSUME_NONNULL_BEGIN @end +#endif + NS_ASSUME_NONNULL_END diff --git a/SignalServiceKit/src/Tests/OWSFakeContactsManager.m b/SignalServiceKit/src/Tests/OWSFakeContactsManager.m index cf2a747dd..55dbf5fe9 100644 --- a/SignalServiceKit/src/Tests/OWSFakeContactsManager.m +++ b/SignalServiceKit/src/Tests/OWSFakeContactsManager.m @@ -15,14 +15,28 @@ NS_ASSUME_NONNULL_BEGIN return @"Fake name"; } -- (NSArray *)signalContacts +- (NSArray *)signalAccounts { return @[]; } -- (NSArray *)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 @@ -35,6 +49,21 @@ NS_ASSUME_NONNULL_BEGIN 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 #endif