From 21869e9d4dbc1ae6d83bc0f2bca33e71c22a81e5 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Mon, 22 Aug 2022 18:11:25 +0100
Subject: [PATCH] Add MessengerCMix, MessengerE2E, and MessengerUD

Functors for accessing XXClient components
---
 .../Messenger/Functors/MessengerCMix.swift    | 22 +++++++++++++++++++
 .../Messenger/Functors/MessengerE2E.swift     | 22 +++++++++++++++++++
 .../Messenger/Functors/MessengerUD.swift      | 22 +++++++++++++++++++
 .../Messenger/Messenger.swift                 |  9 ++++++++
 .../Functors/MessengerCMixTests.swift         | 21 ++++++++++++++++++
 .../Functors/MessengerE2ETests.swift          | 21 ++++++++++++++++++
 .../Messenger/Functors/MessengerUDTests.swift | 21 ++++++++++++++++++
 7 files changed, 138 insertions(+)
 create mode 100644 Sources/XXMessengerClient/Messenger/Functors/MessengerCMix.swift
 create mode 100644 Sources/XXMessengerClient/Messenger/Functors/MessengerE2E.swift
 create mode 100644 Sources/XXMessengerClient/Messenger/Functors/MessengerUD.swift
 create mode 100644 Tests/XXMessengerClientTests/Messenger/Functors/MessengerCMixTests.swift
 create mode 100644 Tests/XXMessengerClientTests/Messenger/Functors/MessengerE2ETests.swift
 create mode 100644 Tests/XXMessengerClientTests/Messenger/Functors/MessengerUDTests.swift

diff --git a/Sources/XXMessengerClient/Messenger/Functors/MessengerCMix.swift b/Sources/XXMessengerClient/Messenger/Functors/MessengerCMix.swift
new file mode 100644
index 00000000..5543c048
--- /dev/null
+++ b/Sources/XXMessengerClient/Messenger/Functors/MessengerCMix.swift
@@ -0,0 +1,22 @@
+import XXClient
+import XCTestDynamicOverlay
+
+public struct MessengerCMix {
+  public var run: () -> CMix?
+
+  public func callAsFunction() -> CMix? {
+    run()
+  }
+}
+
+extension MessengerCMix {
+  public static func live(_ env: MessengerEnvironment) -> MessengerCMix {
+    MessengerCMix(run: env.ctx.getCMix)
+  }
+}
+
+extension MessengerCMix {
+  public static let unimplemented = MessengerCMix(
+    run: XCTUnimplemented("\(Self.self)", placeholder: nil)
+  )
+}
diff --git a/Sources/XXMessengerClient/Messenger/Functors/MessengerE2E.swift b/Sources/XXMessengerClient/Messenger/Functors/MessengerE2E.swift
new file mode 100644
index 00000000..cc1f8def
--- /dev/null
+++ b/Sources/XXMessengerClient/Messenger/Functors/MessengerE2E.swift
@@ -0,0 +1,22 @@
+import XXClient
+import XCTestDynamicOverlay
+
+public struct MessengerE2E {
+  public var run: () -> E2E?
+
+  public func callAsFunction() -> E2E? {
+    run()
+  }
+}
+
+extension MessengerE2E {
+  public static func live(_ env: MessengerEnvironment) -> MessengerE2E {
+    MessengerE2E(run: env.ctx.getE2E)
+  }
+}
+
+extension MessengerE2E {
+  public static let unimplemented = MessengerE2E(
+    run: XCTUnimplemented("\(Self.self)", placeholder: nil)
+  )
+}
diff --git a/Sources/XXMessengerClient/Messenger/Functors/MessengerUD.swift b/Sources/XXMessengerClient/Messenger/Functors/MessengerUD.swift
new file mode 100644
index 00000000..c64ee6cf
--- /dev/null
+++ b/Sources/XXMessengerClient/Messenger/Functors/MessengerUD.swift
@@ -0,0 +1,22 @@
+import XXClient
+import XCTestDynamicOverlay
+
+public struct MessengerUD {
+  public var run: () -> UserDiscovery?
+
+  public func callAsFunction() -> UserDiscovery? {
+    run()
+  }
+}
+
+extension MessengerUD {
+  public static func live(_ env: MessengerEnvironment) -> MessengerUD {
+    MessengerUD(run: env.ctx.getUD)
+  }
+}
+
+extension MessengerUD {
+  public static let unimplemented = MessengerUD(
+    run: XCTUnimplemented("\(Self.self)", placeholder: nil)
+  )
+}
diff --git a/Sources/XXMessengerClient/Messenger/Messenger.swift b/Sources/XXMessengerClient/Messenger/Messenger.swift
index a477f7cc..12610bd6 100644
--- a/Sources/XXMessengerClient/Messenger/Messenger.swift
+++ b/Sources/XXMessengerClient/Messenger/Messenger.swift
@@ -1,6 +1,9 @@
 import XXClient
 
 public struct Messenger {
+  public var cMix: MessengerCMix
+  public var e2e: MessengerE2E
+  public var ud: MessengerUD
   public var isCreated: MessengerIsCreated
   public var create: MessengerCreate
   public var isLoaded: MessengerIsLoaded
@@ -16,6 +19,9 @@ public struct Messenger {
 extension Messenger {
   public static func live(_ env: MessengerEnvironment) -> Messenger {
     Messenger(
+      cMix: .live(env),
+      e2e: .live(env),
+      ud: .live(env),
       isCreated: .live(env),
       create: .live(env),
       isLoaded: .live(env),
@@ -32,6 +38,9 @@ extension Messenger {
 
 extension Messenger {
   public static let unimplemented = Messenger(
+    cMix: .unimplemented,
+    e2e: .unimplemented,
+    ud: .unimplemented,
     isCreated: .unimplemented,
     create: .unimplemented,
     isLoaded: .unimplemented,
diff --git a/Tests/XXMessengerClientTests/Messenger/Functors/MessengerCMixTests.swift b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerCMixTests.swift
new file mode 100644
index 00000000..f4327a08
--- /dev/null
+++ b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerCMixTests.swift
@@ -0,0 +1,21 @@
+import XCTest
+import XXClient
+@testable import XXMessengerClient
+
+final class MessengerCMixTests: XCTestCase {
+  func testCMix() throws {
+    var env: MessengerEnvironment = .unimplemented
+    env.ctx.getCMix = { .unimplemented }
+    let cMix: MessengerCMix = .live(env)
+
+    XCTAssertNotNil(cMix())
+  }
+
+  func testCMixWhenNotSet() throws {
+    var env: MessengerEnvironment = .unimplemented
+    env.ctx.getCMix = { nil }
+    let cMix: MessengerCMix = .live(env)
+
+    XCTAssertNil(cMix())
+  }
+}
diff --git a/Tests/XXMessengerClientTests/Messenger/Functors/MessengerE2ETests.swift b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerE2ETests.swift
new file mode 100644
index 00000000..bb54fb78
--- /dev/null
+++ b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerE2ETests.swift
@@ -0,0 +1,21 @@
+import XCTest
+import XXClient
+@testable import XXMessengerClient
+
+final class MessengerE2ETests: XCTestCase {
+  func testE2E() throws {
+    var env: MessengerEnvironment = .unimplemented
+    env.ctx.getE2E = { .unimplemented }
+    let e2e: MessengerE2E = .live(env)
+
+    XCTAssertNotNil(e2e())
+  }
+
+  func testE2EWhenNotSet() throws {
+    var env: MessengerEnvironment = .unimplemented
+    env.ctx.getE2E = { nil }
+    let e2e: MessengerE2E = .live(env)
+
+    XCTAssertNil(e2e())
+  }
+}
diff --git a/Tests/XXMessengerClientTests/Messenger/Functors/MessengerUDTests.swift b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerUDTests.swift
new file mode 100644
index 00000000..0166a8bb
--- /dev/null
+++ b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerUDTests.swift
@@ -0,0 +1,21 @@
+import XCTest
+import XXClient
+@testable import XXMessengerClient
+
+final class MessengerUDTests: XCTestCase {
+  func testUD() throws {
+    var env: MessengerEnvironment = .unimplemented
+    env.ctx.getE2E = { .unimplemented }
+    let e2e: MessengerE2E = .live(env)
+
+    XCTAssertNotNil(e2e())
+  }
+
+  func testE2EWhenNotSet() throws {
+    var env: MessengerEnvironment = .unimplemented
+    env.ctx.getE2E = { nil }
+    let e2e: MessengerE2E = .live(env)
+
+    XCTAssertNil(e2e())
+  }
+}
-- 
GitLab