Signal-iOS/SignalServiceKit/src/TestUtils/MockSSKEnvironment.m
Harry 5ad17c4f2d
Support change number in registration coordinator
* Factor out RegistrationCoordinatorLoader

* Add PNI change number state to regcoordinatorloader

* Don't exit change number flow once we start a pni operation

* Add ChangePhoneNumberPniManager to reg coordinator dependencies

* add params required for pni to change number registration mode

* change number from regcoordinator

* rename ChangePhoneNumber -> LegacyChangePhoneNumber

* remove pni change number support from LegacyChangePhoneNumber

* remove codable conformance from pni change number manager's pending state

* Update ts account manager state when finalizing change number

* Add message processor deps to reg coordinator

* addAsyncCompletion on dbv2 write transactions

* Suspend message processing while doing a reg coordinator change number

* hook up change number

* Add handler-free message processing suspension method

* odds and ends

* minor cleanup

* slight refactor to finalize change phone number in the export function

* Put wait for message processing + suspend onto messageProcessor

* kick of prekey refresh after pni change number finalize transaction ends

* nit
2023-03-17 17:55:06 -07:00

189 lines
9.8 KiB
Objective-C

//
// Copyright 2018 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
#import "MockSSKEnvironment.h"
#import "OWS2FAManager.h"
#import "OWSBackgroundTask.h"
#import "OWSDisappearingMessagesJob.h"
#import "OWSFakeProfileManager.h"
#import "OWSIdentityManager.h"
#import "OWSMessageManager.h"
#import "OWSOutgoingReceiptManager.h"
#import "OWSReceiptManager.h"
#import "ProfileManagerProtocol.h"
#import "SSKPreKeyStore.h"
#import "SSKSignedPreKeyStore.h"
#import "StorageCoordinator.h"
#import "TSAccountManager.h"
#import <SignalServiceKit/SignalServiceKit-Swift.h>
NS_ASSUME_NONNULL_BEGIN
#ifdef TESTABLE_BUILD
@implementation MockSSKEnvironment
- (instancetype)init
{
// Ensure that OWSBackgroundTaskManager is created now.
[OWSBackgroundTaskManager shared];
StorageCoordinator *storageCoordinator = [StorageCoordinator new];
SDSDatabaseStorage *databaseStorage = storageCoordinator.databaseStorage;
// Set up DependenciesBridge
AccountServiceClient *accountServiceClient = [FakeAccountServiceClient new];
OWSIdentityManager *identityManager = [[OWSIdentityManager alloc] initWithDatabaseStorage:databaseStorage];
MessageProcessor *messageProcessor = [MessageProcessor new];
MessageSender *messageSender = [FakeMessageSender new];
NetworkManager *networkManager = [OWSFakeNetworkManager new];
OWS2FAManager *ows2FAManager = [OWS2FAManager new];
SignalProtocolStore *pniSignalProtocolStore = [[SignalProtocolStore alloc] initForIdentity:OWSIdentityPNI];
id<OWSSignalServiceProtocol> signalService = [OWSSignalServiceMock new];
OWSFakeStorageServiceManager *storageServiceManager = [OWSFakeStorageServiceManager new];
id<SyncManagerProtocol> syncManager = [[OWSMockSyncManager alloc] init];
TSAccountManager *tsAccountManager = [TSAccountManager new];
[DependenciesBridgeSetup setupSingletonWithAccountServiceClient:accountServiceClient
databaseStorage:databaseStorage
identityManager:identityManager
messageProcessor:messageProcessor
messageSender:messageSender
networkManager:networkManager
ows2FAManager:ows2FAManager
pniProtocolStore:pniSignalProtocolStore
signalService:signalService
storageServiceManager:storageServiceManager
syncManager:syncManager
tsAccountManager:tsAccountManager];
// Set up ourselves
id<ContactsManagerProtocol> contactsManager = [OWSFakeContactsManager new];
OWSLinkPreviewManager *linkPreviewManager = [OWSLinkPreviewManager new];
id<PendingReceiptRecorder> pendingReceiptRecorder = [NoopPendingReceiptRecorder new];
id<ProfileManagerProtocol> profileManager = [OWSFakeProfileManager new];
OWSMessageManager *messageManager = [OWSMessageManager new];
BlockingManager *blockingManager = [BlockingManager new];
id<RemoteConfigManager> remoteConfigManager = [StubbableRemoteConfigManager new];
SignalProtocolStore *aciSignalProtocolStore = [[SignalProtocolStore alloc] initForIdentity:OWSIdentityACI];
id<OWSUDManager> udManager = [OWSUDManagerImpl new];
OWSMessageDecrypter *messageDecrypter = [OWSMessageDecrypter new];
GroupsV2MessageProcessor *groupsV2MessageProcessor = [GroupsV2MessageProcessor new];
SocketManager *socketManager = [[SocketManager alloc] init];
OWSDisappearingMessagesJob *disappearingMessagesJob = [OWSDisappearingMessagesJob new];
OWSReceiptManager *receiptManager = [OWSReceiptManager new];
OWSOutgoingReceiptManager *outgoingReceiptManager = [OWSOutgoingReceiptManager new];
id<SSKReachabilityManager> reachabilityManager = [MockSSKReachabilityManager new];
id<OWSTypingIndicators> typingIndicators = [[OWSTypingIndicatorsImpl alloc] init];
OWSAttachmentDownloads *attachmentDownloads = [[OWSAttachmentDownloads alloc] init];
StickerManager *stickerManager = [[StickerManager alloc] init];
SignalServiceAddressCache *signalServiceAddressCache = [SignalServiceAddressCache new];
SSKPreferences *sskPreferences = [SSKPreferences new];
id<GroupsV2> groupsV2 = [[MockGroupsV2 alloc] init];
id<GroupV2Updates> groupV2Updates = [[MockGroupV2Updates alloc] init];
MessageFetcherJob *messageFetcherJob = [MessageFetcherJob new];
BulkProfileFetch *bulkProfileFetch = [BulkProfileFetch new];
id<VersionedProfiles> versionedProfiles = [MockVersionedProfiles new];
ModelReadCaches *modelReadCaches =
[[ModelReadCaches alloc] initWithModelReadCacheFactory:[TestableModelReadCacheFactory new]];
EarlyMessageManager *earlyMessageManager = [EarlyMessageManager new];
OWSMessagePipelineSupervisor *messagePipelineSupervisor = [OWSMessagePipelineSupervisor createStandardSupervisor];
AppExpiry *appExpiry = [AppExpiry new];
id<PaymentsHelper> paymentsHelper = [MockPaymentsHelper new];
id<PaymentsCurrencies> paymentsCurrencies = [MockPaymentsCurrencies new];
id<PaymentsEvents> paymentsEvents = [PaymentsEventsNoop new];
id<MobileCoinHelper> mobileCoinHelper = [MobileCoinHelperMock new];
SpamChallengeResolver *spamChallengeResolver = [SpamChallengeResolver new];
SenderKeyStore *senderKeyStore = [SenderKeyStore new];
PhoneNumberUtil *phoneNumberUtil = [PhoneNumberUtil new];
id webSocketFactory = [WebSocketFactoryMock new];
LegacyChangePhoneNumber *legacyChangePhoneNumber = [LegacyChangePhoneNumber new];
id<SubscriptionManager> subscriptionManager = [MockSubscriptionManager new];
SystemStoryManagerMock *systemStoryManager = [SystemStoryManagerMock new];
RemoteMegaphoneFetcher *remoteMegaphoneFetcher = [RemoteMegaphoneFetcher new];
SSKJobQueues *sskJobQueues = [SSKJobQueues new];
id contactDiscoveryManager = [ContactDiscoveryManagerImpl new];
self = [super initWithContactsManager:contactsManager
linkPreviewManager:linkPreviewManager
messageSender:messageSender
pendingReceiptRecorder:pendingReceiptRecorder
profileManager:profileManager
networkManager:networkManager
messageManager:messageManager
blockingManager:blockingManager
identityManager:identityManager
remoteConfigManager:remoteConfigManager
aciSignalProtocolStore:aciSignalProtocolStore
pniSignalProtocolStore:pniSignalProtocolStore
udManager:udManager
messageDecrypter:messageDecrypter
groupsV2MessageProcessor:groupsV2MessageProcessor
socketManager:socketManager
tsAccountManager:tsAccountManager
ows2FAManager:ows2FAManager
disappearingMessagesJob:disappearingMessagesJob
receiptManager:receiptManager
outgoingReceiptManager:outgoingReceiptManager
reachabilityManager:reachabilityManager
syncManager:syncManager
typingIndicators:typingIndicators
attachmentDownloads:attachmentDownloads
stickerManager:stickerManager
databaseStorage:databaseStorage
signalServiceAddressCache:signalServiceAddressCache
signalService:signalService
accountServiceClient:accountServiceClient
storageServiceManager:storageServiceManager
storageCoordinator:storageCoordinator
sskPreferences:sskPreferences
groupsV2:groupsV2
groupV2Updates:groupV2Updates
messageFetcherJob:messageFetcherJob
bulkProfileFetch:bulkProfileFetch
versionedProfiles:versionedProfiles
modelReadCaches:modelReadCaches
earlyMessageManager:earlyMessageManager
messagePipelineSupervisor:messagePipelineSupervisor
appExpiry:appExpiry
messageProcessor:messageProcessor
paymentsHelper:paymentsHelper
paymentsCurrencies:paymentsCurrencies
paymentsEvents:paymentsEvents
mobileCoinHelper:mobileCoinHelper
spamChallengeResolver:spamChallengeResolver
senderKeyStore:senderKeyStore
phoneNumberUtil:phoneNumberUtil
webSocketFactory:webSocketFactory
legacyChangePhoneNumber:legacyChangePhoneNumber
subscriptionManager:subscriptionManager
systemStoryManager:systemStoryManager
remoteMegaphoneFetcher:remoteMegaphoneFetcher
sskJobQueues:sskJobQueues
contactDiscoveryManager:contactDiscoveryManager];
if (!self) {
return nil;
}
self.callMessageHandlerRef = [OWSFakeCallMessageHandler new];
self.notificationsManagerRef = [NoopNotificationsManager new];
return self;
}
- (void)setContactsManagerForMockEnvironment:(id<ContactsManagerProtocol>)contactsManager
{
[super setContactsManagerRef:contactsManager];
}
@end
#endif
NS_ASSUME_NONNULL_END