From f97470fb78aa4fe2048ca2cb3e6fd45f05edc460 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Wed, 7 Sep 2022 11:37:58 +0200
Subject: [PATCH] Update ContactFeature

---
 .../AppFeature/AppEnvironment+Live.swift      |  8 +++-
 .../ContactFeature/ContactFeature.swift       | 43 +++++++++++++++++--
 .../Sources/ContactFeature/ContactView.swift  |  4 +-
 .../UserSearchFeature/UserSearchFeature.swift |  5 ++-
 .../ContactFeatureTests.swift                 |  4 +-
 .../UserSearchFeatureTests.swift              |  9 +++-
 6 files changed, 64 insertions(+), 9 deletions(-)

diff --git a/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift b/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift
index 03c8442c..8e3f48dc 100644
--- a/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift
+++ b/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift
@@ -1,4 +1,5 @@
 import AppCore
+import ContactFeature
 import Foundation
 import HomeFeature
 import RegisterFeature
@@ -55,7 +56,12 @@ extension AppEnvironment {
                 UserSearchResultEnvironment()
               },
               contact: {
-                ContactEnvironment()
+                ContactEnvironment(
+                  messenger: messenger,
+                  db: dbManager.getDB,
+                  mainQueue: mainQueue,
+                  bgQueue: bgQueue
+                )
               }
             )
           }
diff --git a/Examples/xx-messenger/Sources/ContactFeature/ContactFeature.swift b/Examples/xx-messenger/Sources/ContactFeature/ContactFeature.swift
index 98344db8..80fbcc81 100644
--- a/Examples/xx-messenger/Sources/ContactFeature/ContactFeature.swift
+++ b/Examples/xx-messenger/Sources/ContactFeature/ContactFeature.swift
@@ -1,8 +1,25 @@
+import AppCore
 import ComposableArchitecture
+import Foundation
 import XCTestDynamicOverlay
+import XXClient
+import XXMessengerClient
+import XXModels
 
 public struct ContactState: Equatable {
-  public init() {}
+  public init(
+    id: Data,
+    dbContact: XXModels.Contact? = nil,
+    xxContact: XXClient.Contact? = nil
+  ) {
+    self.id = id
+    self.dbContact = dbContact
+    self.xxContact = xxContact
+  }
+
+  public var id: Data
+  public var dbContact: XXModels.Contact?
+  public var xxContact: XXClient.Contact?
 }
 
 public enum ContactAction: Equatable {
@@ -10,12 +27,32 @@ public enum ContactAction: Equatable {
 }
 
 public struct ContactEnvironment {
-  public init() {}
+  public init(
+    messenger: Messenger,
+    db: DBManagerGetDB,
+    mainQueue: AnySchedulerOf<DispatchQueue>,
+    bgQueue: AnySchedulerOf<DispatchQueue>
+  ) {
+    self.messenger = messenger
+    self.db = db
+    self.mainQueue = mainQueue
+    self.bgQueue = bgQueue
+  }
+
+  public var messenger: Messenger
+  public var db: DBManagerGetDB
+  public var mainQueue: AnySchedulerOf<DispatchQueue>
+  public var bgQueue: AnySchedulerOf<DispatchQueue>
 }
 
 #if DEBUG
 extension ContactEnvironment {
-  public static let unimplemented = ContactEnvironment()
+  public static let unimplemented = ContactEnvironment(
+    messenger: .unimplemented,
+    db: .unimplemented,
+    mainQueue: .unimplemented,
+    bgQueue: .unimplemented
+  )
 }
 #endif
 
diff --git a/Examples/xx-messenger/Sources/ContactFeature/ContactView.swift b/Examples/xx-messenger/Sources/ContactFeature/ContactView.swift
index 2b403a21..a050747e 100644
--- a/Examples/xx-messenger/Sources/ContactFeature/ContactView.swift
+++ b/Examples/xx-messenger/Sources/ContactFeature/ContactView.swift
@@ -26,7 +26,9 @@ public struct ContactView: View {
 public struct ContactView_Previews: PreviewProvider {
   public static var previews: some View {
     ContactView(store: Store(
-      initialState: ContactState(),
+      initialState: ContactState(
+        id: "contact-id".data(using: .utf8)!
+      ),
       reducer: .empty,
       environment: ()
     ))
diff --git a/Examples/xx-messenger/Sources/UserSearchFeature/UserSearchFeature.swift b/Examples/xx-messenger/Sources/UserSearchFeature/UserSearchFeature.swift
index 425832e2..e8cb92c0 100644
--- a/Examples/xx-messenger/Sources/UserSearchFeature/UserSearchFeature.swift
+++ b/Examples/xx-messenger/Sources/UserSearchFeature/UserSearchFeature.swift
@@ -120,7 +120,10 @@ public let userSearchReducer = Reducer<UserSearchState, UserSearchAction, UserSe
     return .none
 
   case .result(let id, action: .tapped):
-    state.contact = ContactState()
+    state.contact = ContactState(
+      id: id,
+      xxContact: state.results[id: id]?.xxContact
+    )
     return .none
 
   case .binding(_), .result(_, _), .contact(_):
diff --git a/Examples/xx-messenger/Tests/ContactFeatureTests/ContactFeatureTests.swift b/Examples/xx-messenger/Tests/ContactFeatureTests/ContactFeatureTests.swift
index e22cd95b..4711a132 100644
--- a/Examples/xx-messenger/Tests/ContactFeatureTests/ContactFeatureTests.swift
+++ b/Examples/xx-messenger/Tests/ContactFeatureTests/ContactFeatureTests.swift
@@ -5,7 +5,9 @@ import XCTest
 final class ContactFeatureTests: XCTestCase {
   func testStart() {
     let store = TestStore(
-      initialState: ContactState(),
+      initialState: ContactState(
+        id: "contact-id".data(using: .utf8)!
+      ),
       reducer: contactReducer,
       environment: .unimplemented
     )
diff --git a/Examples/xx-messenger/Tests/UserSearchFeatureTests/UserSearchFeatureTests.swift b/Examples/xx-messenger/Tests/UserSearchFeatureTests/UserSearchFeatureTests.swift
index 285d359e..c457327c 100644
--- a/Examples/xx-messenger/Tests/UserSearchFeatureTests/UserSearchFeatureTests.swift
+++ b/Examples/xx-messenger/Tests/UserSearchFeatureTests/UserSearchFeatureTests.swift
@@ -104,14 +104,19 @@ final class UserSearchFeatureTests: XCTestCase {
     )
 
     store.send(.result(id: "contact-id".data(using: .utf8)!, action: .tapped)) {
-      $0.contact = ContactState()
+      $0.contact = ContactState(
+        id: "contact-id".data(using: .utf8)!,
+        xxContact: .unimplemented("contact-data".data(using: .utf8)!)
+      )
     }
   }
 
   func testDismissingContact() {
     let store = TestStore(
       initialState: UserSearchState(
-        contact: ContactState()
+        contact: ContactState(
+          id: "contact-id".data(using: .utf8)!
+        )
       ),
       reducer: userSearchReducer,
       environment: .unimplemented
-- 
GitLab