diff --git a/Examples/xx-messenger/Package.swift b/Examples/xx-messenger/Package.swift index 69578afe9138193e3bfe17509ed00af4eae07d81..411e8e2dcea75f6f5d6996ce29ae025403a13541 100644 --- a/Examples/xx-messenger/Package.swift +++ b/Examples/xx-messenger/Package.swift @@ -82,6 +82,7 @@ let package = Package( name: "AppCoreTests", dependencies: [ .target(name: "AppCore"), + .product(name: "ComposableArchitecture", package: "swift-composable-architecture"), .product(name: "CustomDump", package: "swift-custom-dump"), ], swiftSettings: swiftSettings diff --git a/Examples/xx-messenger/Sources/AppCore/AppDependecies.swift b/Examples/xx-messenger/Sources/AppCore/AppDependecies.swift new file mode 100644 index 0000000000000000000000000000000000000000..d5a173cb03d121d3535be72b453498b6df291bf3 --- /dev/null +++ b/Examples/xx-messenger/Sources/AppCore/AppDependecies.swift @@ -0,0 +1,96 @@ +import ComposableArchitecture +import Foundation +import XCTestDynamicOverlay +import XXMessengerClient + +public struct AppDependencies { + public var dbManager: DBManager + public var messenger: Messenger + public var authHandler: AuthCallbackHandler + public var backupStorage: BackupStorage + public var mainQueue: AnySchedulerOf<DispatchQueue> + public var bgQueue: AnySchedulerOf<DispatchQueue> + public var now: () -> Date + public var sendMessage: SendMessage + public var sendImage: SendImage + public var messageListener: MessageListenerHandler + public var receiveFileHandler: ReceiveFileHandler + public var log: Logger + public var loadData: URLDataLoader +} + +extension AppDependencies { + public static func live() -> AppDependencies { + let dbManager = DBManager.live() + let messengerEnv = MessengerEnvironment.live() + let messenger = Messenger.live(messengerEnv) + let now: () -> Date = Date.init + + return AppDependencies( + dbManager: dbManager, + messenger: messenger, + authHandler: .live( + messenger: messenger, + handleRequest: .live(db: dbManager.getDB, now: now), + handleConfirm: .live(db: dbManager.getDB), + handleReset: .live(db: dbManager.getDB) + ), + backupStorage: .onDisk(), + mainQueue: DispatchQueue.main.eraseToAnyScheduler(), + bgQueue: DispatchQueue.global(qos: .background).eraseToAnyScheduler(), + now: now, + sendMessage: .live( + messenger: messenger, + db: dbManager.getDB, + now: now + ), + sendImage: .live( + messenger: messenger, + db: dbManager.getDB, + now: now + ), + messageListener: .live( + messenger: messenger, + db: dbManager.getDB + ), + receiveFileHandler: .live( + messenger: messenger, + db: dbManager.getDB, + now: now + ), + log: .live(), + loadData: .live + ) + } + + public static let unimplemented = AppDependencies( + dbManager: .unimplemented, + messenger: .unimplemented, + authHandler: .unimplemented, + backupStorage: .unimplemented, + mainQueue: .unimplemented, + bgQueue: .unimplemented, + now: XCTestDynamicOverlay.unimplemented( + "\(Self.self)", + placeholder: Date(timeIntervalSince1970: 0) + ), + sendMessage: .unimplemented, + sendImage: .unimplemented, + messageListener: .unimplemented, + receiveFileHandler: .unimplemented, + log: .unimplemented, + loadData: .unimplemented + ) +} + +private enum AppDependenciesKey: DependencyKey { + static let liveValue: AppDependencies = .live() + static let testValue: AppDependencies = .unimplemented +} + +extension DependencyValues { + public var appDependencies: AppDependencies { + get { self[AppDependenciesKey.self] } + set { self[AppDependenciesKey.self] = newValue } + } +}