From ef6c6113d3543851abeb0debdb1f3efece20ab36 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Wed, 28 Sep 2022 13:23:30 +0200
Subject: [PATCH] Add MessengerIsBackupRunning function

---
 .../Functions/MessengerIsBackupRunning.swift  | 24 ++++++++++++
 .../Messenger/Messenger.swift                 |  7 +++-
 .../Messenger/MessengerEnvironment.swift      |  3 ++
 .../MessengerIsBackupRunningTests.swift       | 37 +++++++++++++++++++
 4 files changed, 69 insertions(+), 2 deletions(-)
 create mode 100644 Sources/XXMessengerClient/Messenger/Functions/MessengerIsBackupRunning.swift
 create mode 100644 Tests/XXMessengerClientTests/Messenger/Functions/MessengerIsBackupRunningTests.swift

diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerIsBackupRunning.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerIsBackupRunning.swift
new file mode 100644
index 00000000..08453e23
--- /dev/null
+++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerIsBackupRunning.swift
@@ -0,0 +1,24 @@
+import XCTestDynamicOverlay
+import XXClient
+
+public struct MessengerIsBackupRunning {
+  public var run: () -> Bool
+
+  public func callAsFunction() -> Bool {
+    run()
+  }
+}
+
+extension MessengerIsBackupRunning {
+  public static func live(_ env: MessengerEnvironment) -> MessengerIsBackupRunning {
+    MessengerIsBackupRunning {
+      env.backup()?.isRunning() == true
+    }
+  }
+}
+
+extension MessengerIsBackupRunning {
+  public static let unimplemented = MessengerIsBackupRunning(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
diff --git a/Sources/XXMessengerClient/Messenger/Messenger.swift b/Sources/XXMessengerClient/Messenger/Messenger.swift
index 030aefb5..9e373e0b 100644
--- a/Sources/XXMessengerClient/Messenger/Messenger.swift
+++ b/Sources/XXMessengerClient/Messenger/Messenger.swift
@@ -30,6 +30,7 @@ public struct Messenger {
   public var verifyContact: MessengerVerifyContact
   public var sendMessage: MessengerSendMessage
   public var registerBackupCallback: MessengerRegisterBackupCallback
+  public var isBackupRunning: MessengerIsBackupRunning
 }
 
 extension Messenger {
@@ -63,7 +64,8 @@ extension Messenger {
       registerForNotifications: .live(env),
       verifyContact: .live(env),
       sendMessage: .live(env),
-      registerBackupCallback: .live(env)
+      registerBackupCallback: .live(env),
+      isBackupRunning: .live(env)
     )
   }
 }
@@ -98,6 +100,7 @@ extension Messenger {
     registerForNotifications: .unimplemented,
     verifyContact: .unimplemented,
     sendMessage: .unimplemented,
-    registerBackupCallback: .unimplemented
+    registerBackupCallback: .unimplemented,
+    isBackupRunning: .unimplemented
   )
 }
diff --git a/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift b/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift
index f6f9a826..d2ae4fac 100644
--- a/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift
+++ b/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift
@@ -4,6 +4,7 @@ import XCTestDynamicOverlay
 
 public struct MessengerEnvironment {
   public var authCallbacks: AuthCallbacksRegistry
+  public var backup: Stored<Backup?>
   public var backupCallbacks: BackupCallbacksRegistry
   public var cMix: Stored<CMix?>
   public var downloadNDF: DownloadAndVerifySignedNdf
@@ -46,6 +47,7 @@ extension MessengerEnvironment {
   public static func live() -> MessengerEnvironment {
     MessengerEnvironment(
       authCallbacks: .live(),
+      backup: .inMemory(),
       backupCallbacks: .live(),
       cMix: .inMemory(),
       downloadNDF: .live,
@@ -83,6 +85,7 @@ extension MessengerEnvironment {
 extension MessengerEnvironment {
   public static let unimplemented = MessengerEnvironment(
     authCallbacks: .unimplemented,
+    backup: .unimplemented(),
     backupCallbacks: .unimplemented,
     cMix: .unimplemented(),
     downloadNDF: .unimplemented,
diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerIsBackupRunningTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerIsBackupRunningTests.swift
new file mode 100644
index 00000000..7076aa64
--- /dev/null
+++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerIsBackupRunningTests.swift
@@ -0,0 +1,37 @@
+import XCTest
+import XXClient
+@testable import XXMessengerClient
+
+final class MessengerIsBackupRunningTests: XCTestCase {
+  func testWithoutBackup() {
+    var env: MessengerEnvironment = .unimplemented
+    env.backup.get = { nil }
+    let isRunning: MessengerIsBackupRunning = .live(env)
+
+    XCTAssertFalse(isRunning())
+  }
+
+  func testWithBackupRunning() {
+    var env: MessengerEnvironment = .unimplemented
+    env.backup.get = {
+      var backup: Backup = .unimplemented
+      backup.isRunning.run = { true }
+      return backup
+    }
+    let isRunning: MessengerIsBackupRunning = .live(env)
+
+    XCTAssertTrue(isRunning())
+  }
+
+  func testWithBackupNotRunning() {
+    var env: MessengerEnvironment = .unimplemented
+    env.backup.get = {
+      var backup: Backup = .unimplemented
+      backup.isRunning.run = { false }
+      return backup
+    }
+    let isRunning: MessengerIsBackupRunning = .live(env)
+
+    XCTAssertFalse(isRunning())
+  }
+}
-- 
GitLab