From c571cb082fe0b86cef3db9e1f8e730a136cb788b Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Wed, 19 Oct 2022 11:15:26 +0200
Subject: [PATCH] Add MessengerIsFileTransferRunning function

---
 .../MessengerIsFileTransferRunning.swift      | 21 +++++++++++++++++++
 .../Messenger/Messenger.swift                 |  3 +++
 .../MessengerIsFileTransferRunningTests.swift | 20 ++++++++++++++++++
 3 files changed, 44 insertions(+)
 create mode 100644 Sources/XXMessengerClient/Messenger/Functions/MessengerIsFileTransferRunning.swift
 create mode 100644 Tests/XXMessengerClientTests/Messenger/Functions/MessengerIsFileTransferRunningTests.swift

diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerIsFileTransferRunning.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerIsFileTransferRunning.swift
new file mode 100644
index 00000000..f1d71190
--- /dev/null
+++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerIsFileTransferRunning.swift
@@ -0,0 +1,21 @@
+import XCTestDynamicOverlay
+
+public struct MessengerIsFileTransferRunning {
+  public var run: () -> Bool
+
+  public func callAsFunction() -> Bool {
+    run()
+  }
+}
+
+extension MessengerIsFileTransferRunning {
+  public static func live(_ env: MessengerEnvironment) -> MessengerIsFileTransferRunning {
+    MessengerIsFileTransferRunning { env.fileTransfer.get() != nil }
+  }
+}
+
+extension MessengerIsFileTransferRunning {
+  public static let unimplemented = MessengerIsFileTransferRunning(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
diff --git a/Sources/XXMessengerClient/Messenger/Messenger.swift b/Sources/XXMessengerClient/Messenger/Messenger.swift
index d565ebb2..f8d982e4 100644
--- a/Sources/XXMessengerClient/Messenger/Messenger.swift
+++ b/Sources/XXMessengerClient/Messenger/Messenger.swift
@@ -41,6 +41,7 @@ public struct Messenger {
   public var setLogLevel: MessengerSetLogLevel
   public var startLogging: MessengerStartLogging
   public var registerReceiveFileCallback: MessengerRegisterReceiveFileCallback
+  public var isFileTransferRunning: MessengerIsFileTransferRunning
   public var startFileTransfer: MessengerStartFileTransfer
   public var sendFile: MessengerSendFile
   public var receiveFile: MessengerReceiveFile
@@ -89,6 +90,7 @@ extension Messenger {
       setLogLevel: .live(env),
       startLogging: .live(env),
       registerReceiveFileCallback: .live(env),
+      isFileTransferRunning: .live(env),
       startFileTransfer: .live(env),
       sendFile: .live(env),
       receiveFile: .live(env)
@@ -138,6 +140,7 @@ extension Messenger {
     setLogLevel: .unimplemented,
     startLogging: .unimplemented,
     registerReceiveFileCallback: .unimplemented,
+    isFileTransferRunning: .unimplemented,
     startFileTransfer: .unimplemented,
     sendFile: .unimplemented,
     receiveFile: .unimplemented
diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerIsFileTransferRunningTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerIsFileTransferRunningTests.swift
new file mode 100644
index 00000000..3ac1fd30
--- /dev/null
+++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerIsFileTransferRunningTests.swift
@@ -0,0 +1,20 @@
+import XCTest
+@testable import XXMessengerClient
+
+final class MessengerIsFileTransferRunningTests: XCTestCase {
+  func testIsRunning() {
+    var env: MessengerEnvironment = .unimplemented
+    env.fileTransfer.get = { .unimplemented }
+    let isRunning: MessengerIsFileTransferRunning = .live(env)
+
+    XCTAssertTrue(isRunning())
+  }
+
+  func testIsNotRunning() {
+    var env: MessengerEnvironment = .unimplemented
+    env.fileTransfer.get = { nil }
+    let isRunning: MessengerIsFileTransferRunning = .live(env)
+
+    XCTAssertFalse(isRunning())
+  }
+}
-- 
GitLab