From 52851d6de1d600ef485565ebeaf9a610b7488560 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Wed, 19 Oct 2022 11:06:13 +0200
Subject: [PATCH] Start ReceiveFileHandler when app starts

---
 .../AppFeature/AppEnvironment+Live.swift      |  3 ++
 .../Sources/AppFeature/AppFeature.swift       |  6 +++
 .../AppFeatureTests/AppFeatureTests.swift     | 52 +++++++++++++++++++
 3 files changed, 61 insertions(+)

diff --git a/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift b/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift
index c4ff9b27..62ea9c13 100644
--- a/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift
+++ b/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift
@@ -113,6 +113,9 @@ extension AppEnvironment {
         messenger: messenger,
         db: dbManager.getDB
       ),
+      receiveFileHandler: .live(
+        messenger: messenger
+      ),
       backupStorage: backupStorage,
       log: .live(),
       mainQueue: mainQueue,
diff --git a/Examples/xx-messenger/Sources/AppFeature/AppFeature.swift b/Examples/xx-messenger/Sources/AppFeature/AppFeature.swift
index 7796f592..56f692c6 100644
--- a/Examples/xx-messenger/Sources/AppFeature/AppFeature.swift
+++ b/Examples/xx-messenger/Sources/AppFeature/AppFeature.swift
@@ -50,6 +50,7 @@ struct AppEnvironment {
   var messenger: Messenger
   var authHandler: AuthCallbackHandler
   var messageListener: MessageListenerHandler
+  var receiveFileHandler: ReceiveFileHandler
   var backupStorage: BackupStorage
   var log: Logger
   var mainQueue: AnySchedulerOf<DispatchQueue>
@@ -66,6 +67,7 @@ extension AppEnvironment {
     messenger: .unimplemented,
     authHandler: .unimplemented,
     messageListener: .unimplemented,
+    receiveFileHandler: .unimplemented,
     backupStorage: .unimplemented,
     log: .unimplemented,
     mainQueue: .unimplemented,
@@ -98,6 +100,10 @@ let appReducer = Reducer<AppState, AppAction, AppEnvironment>
         cancellables.append(env.messageListener(onError: { error in
           env.log(.error(error as NSError))
         }))
+        cancellables.append(env.receiveFileHandler(onError: { error in
+          env.log(.error(error as NSError))
+        }))
+
         cancellables.append(env.messenger.registerBackupCallback(.init { data in
           try? env.backupStorage.store(data)
         }))
diff --git a/Examples/xx-messenger/Tests/AppFeatureTests/AppFeatureTests.swift b/Examples/xx-messenger/Tests/AppFeatureTests/AppFeatureTests.swift
index 098a026c..4a847ae3 100644
--- a/Examples/xx-messenger/Tests/AppFeatureTests/AppFeatureTests.swift
+++ b/Examples/xx-messenger/Tests/AppFeatureTests/AppFeatureTests.swift
@@ -34,6 +34,10 @@ final class AppFeatureTests: XCTestCase {
       actions.append(.didStartMessageListener)
       return Cancellable {}
     }
+    store.environment.receiveFileHandler.run = { _ in
+      actions.append(.didStartReceiveFileHandler)
+      return Cancellable {}
+    }
     store.environment.messenger.registerBackupCallback.run = { _ in
       actions.append(.didRegisterBackupCallback)
       return Cancellable {}
@@ -49,6 +53,7 @@ final class AppFeatureTests: XCTestCase {
       .didMakeDB,
       .didStartAuthHandler,
       .didStartMessageListener,
+      .didStartReceiveFileHandler,
       .didRegisterBackupCallback,
     ])
 
@@ -83,6 +88,10 @@ final class AppFeatureTests: XCTestCase {
       actions.append(.didStartMessageListener)
       return Cancellable {}
     }
+    store.environment.receiveFileHandler.run = { _ in
+      actions.append(.didStartReceiveFileHandler)
+      return Cancellable {}
+    }
     store.environment.messenger.registerBackupCallback.run = { _ in
       actions.append(.didRegisterBackupCallback)
       return Cancellable {}
@@ -98,6 +107,7 @@ final class AppFeatureTests: XCTestCase {
       .didMakeDB,
       .didStartAuthHandler,
       .didStartMessageListener,
+      .didStartReceiveFileHandler,
       .didRegisterBackupCallback,
       .didLoadMessenger,
     ])
@@ -132,6 +142,10 @@ final class AppFeatureTests: XCTestCase {
       actions.append(.didStartMessageListener)
       return Cancellable {}
     }
+    store.environment.receiveFileHandler.run = { _ in
+      actions.append(.didStartReceiveFileHandler)
+      return Cancellable {}
+    }
     store.environment.messenger.registerBackupCallback.run = { _ in
       actions.append(.didRegisterBackupCallback)
       return Cancellable {}
@@ -148,6 +162,7 @@ final class AppFeatureTests: XCTestCase {
     XCTAssertNoDifference(actions, [
       .didStartAuthHandler,
       .didStartMessageListener,
+      .didStartReceiveFileHandler,
       .didRegisterBackupCallback,
       .didLoadMessenger,
     ])
@@ -182,6 +197,10 @@ final class AppFeatureTests: XCTestCase {
       actions.append(.didStartMessageListener)
       return Cancellable {}
     }
+    store.environment.receiveFileHandler.run = { _ in
+      actions.append(.didStartReceiveFileHandler)
+      return Cancellable {}
+    }
     store.environment.messenger.registerBackupCallback.run = { _ in
       actions.append(.didRegisterBackupCallback)
       return Cancellable {}
@@ -198,6 +217,7 @@ final class AppFeatureTests: XCTestCase {
     XCTAssertNoDifference(actions, [
       .didStartAuthHandler,
       .didStartMessageListener,
+      .didStartReceiveFileHandler,
       .didRegisterBackupCallback,
       .didLoadMessenger,
     ])
@@ -229,6 +249,10 @@ final class AppFeatureTests: XCTestCase {
       actions.append(.didStartMessageListener)
       return Cancellable {}
     }
+    store.environment.receiveFileHandler.run = { _ in
+      actions.append(.didStartReceiveFileHandler)
+      return Cancellable {}
+    }
     store.environment.messenger.registerBackupCallback.run = { _ in
       actions.append(.didRegisterBackupCallback)
       return Cancellable {}
@@ -245,6 +269,7 @@ final class AppFeatureTests: XCTestCase {
     XCTAssertNoDifference(actions, [
       .didStartAuthHandler,
       .didStartMessageListener,
+      .didStartReceiveFileHandler,
       .didRegisterBackupCallback,
     ])
 
@@ -331,6 +356,10 @@ final class AppFeatureTests: XCTestCase {
       actions.append(.didStartMessageListener)
       return Cancellable {}
     }
+    store.environment.receiveFileHandler.run = { _ in
+      actions.append(.didStartReceiveFileHandler)
+      return Cancellable {}
+    }
     store.environment.messenger.registerBackupCallback.run = { _ in
       actions.append(.didRegisterBackupCallback)
       return Cancellable {}
@@ -346,6 +375,7 @@ final class AppFeatureTests: XCTestCase {
     XCTAssertNoDifference(actions, [
       .didStartAuthHandler,
       .didStartMessageListener,
+      .didStartReceiveFileHandler,
       .didRegisterBackupCallback,
     ])
 
@@ -356,6 +386,7 @@ final class AppFeatureTests: XCTestCase {
     var actions: [Action]!
     var authHandlerOnError: [AuthCallbackHandler.OnError] = []
     var messageListenerOnError: [MessageListenerHandler.OnError] = []
+    var fileHandlerOnError: [ReceiveFileHandler.OnError] = []
     var backupCallback: [UpdateBackupFunc] = []
 
     let store = TestStore(
@@ -383,6 +414,13 @@ final class AppFeatureTests: XCTestCase {
         actions.append(.didCancelMessageListener)
       }
     }
+    store.environment.receiveFileHandler.run = { onError in
+      fileHandlerOnError.append(onError)
+      actions.append(.didStartReceiveFileHandler)
+      return Cancellable {
+        actions.append(.didCancelReceiveFileHandler)
+      }
+    }
     store.environment.messenger.registerBackupCallback.run = { callback in
       backupCallback.append(callback)
       actions.append(.didRegisterBackupCallback)
@@ -406,6 +444,7 @@ final class AppFeatureTests: XCTestCase {
     XCTAssertNoDifference(actions, [
       .didStartAuthHandler,
       .didStartMessageListener,
+      .didStartReceiveFileHandler,
       .didRegisterBackupCallback,
     ])
 
@@ -420,9 +459,11 @@ final class AppFeatureTests: XCTestCase {
     XCTAssertNoDifference(actions, [
       .didCancelAuthHandler,
       .didCancelMessageListener,
+      .didCancelReceiveFileHandler,
       .didCancelBackupCallback,
       .didStartAuthHandler,
       .didStartMessageListener,
+      .didStartReceiveFileHandler,
       .didRegisterBackupCallback,
     ])
 
@@ -444,6 +485,14 @@ final class AppFeatureTests: XCTestCase {
       .didLog(.error(messageError as NSError))
     ])
 
+    actions = []
+    let fileError = NSError(domain: "receive-file-error", code: 3)
+    fileHandlerOnError.first?(fileError)
+
+    XCTAssertNoDifference(actions, [
+      .didLog(.error(fileError))
+    ])
+
     actions = []
     let backupData = "backup".data(using: .utf8)!
     backupCallback.first?.handle(backupData)
@@ -458,6 +507,7 @@ final class AppFeatureTests: XCTestCase {
     XCTAssertNoDifference(actions, [
       .didCancelAuthHandler,
       .didCancelMessageListener,
+      .didCancelReceiveFileHandler,
       .didCancelBackupCallback,
     ])
   }
@@ -467,10 +517,12 @@ private enum Action: Equatable {
   case didMakeDB
   case didStartAuthHandler
   case didStartMessageListener
+  case didStartReceiveFileHandler
   case didRegisterBackupCallback
   case didLoadMessenger
   case didCancelAuthHandler
   case didCancelMessageListener
+  case didCancelReceiveFileHandler
   case didCancelBackupCallback
   case didLog(Logger.Message)
   case didStoreBackup(Data)
-- 
GitLab