From 569c862eab1601dd674efc96c56525184ff83320 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Fri, 16 Sep 2022 18:09:11 +0200
Subject: [PATCH] Add SearchUD.Params struct

---
 Sources/XXClient/Functions/SearchUD.swift     | 40 +++++++++++++------
 .../Functions/MessengerSearchContacts.swift   | 12 +++---
 .../Functions/MessengerVerifyContact.swift    | 12 +++---
 .../MessengerSearchContactsTests.swift        | 22 +++-------
 .../MessengerVerifyContactTests.swift         | 31 ++++----------
 5 files changed, 53 insertions(+), 64 deletions(-)

diff --git a/Sources/XXClient/Functions/SearchUD.swift b/Sources/XXClient/Functions/SearchUD.swift
index 9f82808d..aa7c8b81 100644
--- a/Sources/XXClient/Functions/SearchUD.swift
+++ b/Sources/XXClient/Functions/SearchUD.swift
@@ -2,30 +2,44 @@ import Bindings
 import XCTestDynamicOverlay
 
 public struct SearchUD {
-  public var run: (Int, Contact, [Fact], Data, UdSearchCallback) throws -> SingleUseSendReport
+  public struct Params: Equatable {
+    public init(
+      e2eId: Int,
+      udContact: Contact,
+      facts: [Fact],
+      singleRequestParamsJSON: Data = GetSingleUseParams.liveDefault()
+    ) {
+      self.e2eId = e2eId
+      self.udContact = udContact
+      self.facts = facts
+      self.singleRequestParamsJSON = singleRequestParamsJSON
+    }
+
+    public var e2eId: Int
+    public var udContact: Contact
+    public var facts: [Fact]
+    public var singleRequestParamsJSON: Data
+  }
+
+  public var run: (Params, UdSearchCallback) throws -> SingleUseSendReport
 
   public func callAsFunction(
-    e2eId: Int,
-    udContact: Contact,
-    facts: [Fact],
-    singleRequestParamsJSON: Data = GetSingleUseParams.liveDefault(),
+    params: Params,
     callback: UdSearchCallback
   ) throws -> SingleUseSendReport {
-    try run(e2eId, udContact, facts, singleRequestParamsJSON, callback)
+    try run(params, callback)
   }
 }
 
 extension SearchUD {
-  public static let live = SearchUD {
-    e2eId, udContact, facts, singleRequestParamsJSON, callback in
-
+  public static let live = SearchUD { params, callback in
     var error: NSError?
     let reportData = BindingsSearchUD(
-      e2eId,
-      udContact.data,
+      params.e2eId,
+      params.udContact.data,
       callback.makeBindingsUdSearchCallback(),
-      try facts.encode(),
-      singleRequestParamsJSON,
+      try params.facts.encode(),
+      params.singleRequestParamsJSON,
       &error
     )
     if let error = error {
diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerSearchContacts.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerSearchContacts.swift
index 94f55c27..46b2007c 100644
--- a/Sources/XXMessengerClient/Messenger/Functions/MessengerSearchContacts.swift
+++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerSearchContacts.swift
@@ -43,11 +43,13 @@ extension MessengerSearchContacts {
       var result: Result<[Contact], Swift.Error>!
       let semaphore = DispatchSemaphore(value: 0)
       _ = try env.searchUD(
-        e2eId: e2e.getId(),
-        udContact: try ud.getContact(),
-        facts: query.facts,
-        singleRequestParamsJSON: env.getSingleUseParams(),
-        callback: .init { searchResult in
+        params: SearchUD.Params(
+          e2eId: e2e.getId(),
+          udContact: try ud.getContact(),
+          facts: query.facts,
+          singleRequestParamsJSON: env.getSingleUseParams()
+        ),
+        callback: UdSearchCallback { searchResult in
           switch searchResult {
           case .success(let contacts):
             result = .success(contacts)
diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerVerifyContact.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerVerifyContact.swift
index 2a8d176b..afb13e7c 100644
--- a/Sources/XXMessengerClient/Messenger/Functions/MessengerVerifyContact.swift
+++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerVerifyContact.swift
@@ -47,11 +47,13 @@ extension MessengerVerifyContact {
         var searchResult: Result<[Contact], NSError>!
         let semaphore = DispatchSemaphore(value: 0)
         _ = try env.searchUD(
-          e2eId: e2e.getId(),
-          udContact: try ud.getContact(),
-          facts: facts,
-          singleRequestParamsJSON: env.getSingleUseParams(),
-          callback: .init { result in
+          params: SearchUD.Params(
+            e2eId: e2e.getId(),
+            udContact: try ud.getContact(),
+            facts: facts,
+            singleRequestParamsJSON: env.getSingleUseParams()
+          ),
+          callback: UdSearchCallback { result in
             searchResult = result
             semaphore.signal()
           }
diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerSearchContactsTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerSearchContactsTests.swift
index f3ab082c..2b44f19e 100644
--- a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerSearchContactsTests.swift
+++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerSearchContactsTests.swift
@@ -5,14 +5,7 @@ import XXClient
 
 final class MessengerSearchContactsTests: XCTestCase {
   func testSearch() throws {
-    struct SearchUdParams: Equatable {
-      var e2eId: Int
-      var udContact: Contact
-      var facts: [Fact]
-      var singleRequestParamsJSON: Data
-    }
-
-    var didSearchUdWithParams: [SearchUdParams] = []
+    var didSearchUdWithParams: [SearchUD.Params] = []
 
     var env: MessengerEnvironment = .unimplemented
     env.e2e.get = {
@@ -26,13 +19,8 @@ final class MessengerSearchContactsTests: XCTestCase {
       return ud
     }
     env.getSingleUseParams.run = { "single-use-params".data(using: .utf8)! }
-    env.searchUD.run = { e2eId, udContact, facts, singleRequestParamsJSON, callback in
-      didSearchUdWithParams.append(.init(
-        e2eId: e2eId,
-        udContact: udContact,
-        facts: facts,
-        singleRequestParamsJSON: singleRequestParamsJSON
-      ))
+    env.searchUD.run = { params, callback in
+      didSearchUdWithParams.append(params)
       callback.handle(.success([
         .unimplemented("contact-1".data(using: .utf8)!),
         .unimplemented("contact-2".data(using: .utf8)!),
@@ -101,7 +89,7 @@ final class MessengerSearchContactsTests: XCTestCase {
       return ud
     }
     env.getSingleUseParams.run = { Data() }
-    env.searchUD.run = { _, _, _, _, _ in throw error }
+    env.searchUD.run = { _, _ in throw error }
 
     let search: MessengerSearchContacts = .live(env)
 
@@ -126,7 +114,7 @@ final class MessengerSearchContactsTests: XCTestCase {
       return ud
     }
     env.getSingleUseParams.run = { Data() }
-    env.searchUD.run = { _, _, _, _, callback in
+    env.searchUD.run = { _, callback in
       callback.handle(.failure(error as NSError))
       return SingleUseSendReport(rounds: [], roundURL: "", ephId: 0, receptionId: Data())
     }
diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerVerifyContactTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerVerifyContactTests.swift
index 2f4e8a84..92e4142a 100644
--- a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerVerifyContactTests.swift
+++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerVerifyContactTests.swift
@@ -28,12 +28,6 @@ final class MessengerVerifyContactTests: XCTestCase {
   }
 
   func testVerifyContactWithoutFacts() throws {
-    struct LookupUDParams: Equatable {
-      var e2eId: Int
-      var udContact: Contact
-      var lookupId: Data
-      var singleRequestParamsJSON: Data
-    }
     struct VerifyOwnershipParams: Equatable {
       var received: Contact
       var verified: Contact
@@ -124,18 +118,12 @@ final class MessengerVerifyContactTests: XCTestCase {
   }
 
   func testVerifyContactWithFacts() throws {
-    struct SearchUDParams: Equatable {
-      var e2eId: Int
-      var udContact: Contact
-      var facts: [Fact]
-      var singleRequestParamsJSON: Data
-    }
     struct VerifyOwnershipParams: Equatable {
       var received: Contact
       var verified: Contact
       var e2eId: Int
     }
-    var didSearchUDWithParams: [SearchUDParams] = []
+    var didSearchUDWithParams: [SearchUD.Params] = []
     var didVerifyOwnershipWithParams: [VerifyOwnershipParams] = []
 
     var contact = Contact.unimplemented("contact-data".data(using: .utf8)!)
@@ -169,13 +157,8 @@ final class MessengerVerifyContactTests: XCTestCase {
       return ud
     }
     env.getSingleUseParams.run = { "single-use-params".data(using: .utf8)! }
-    env.searchUD.run = { e2eId, udContact, facts, singleRequestParamsJSON, callback in
-      didSearchUDWithParams.append(.init(
-        e2eId: e2eId,
-        udContact: udContact,
-        facts: facts,
-        singleRequestParamsJSON: singleRequestParamsJSON
-      ))
+    env.searchUD.run = { params, callback in
+      didSearchUDWithParams.append(params)
       callback.handle(.success([foundContact]))
       return SingleUseSendReport(rounds: [], roundURL: "", ephId: 0, receptionId: Data())
     }
@@ -221,7 +204,7 @@ final class MessengerVerifyContactTests: XCTestCase {
       return ud
     }
     env.getSingleUseParams.run = { "single-use-params".data(using: .utf8)! }
-    env.searchUD.run = { e2eId, udContact, facts, singleRequestParamsJSON, callback in
+    env.searchUD.run = { _, callback in
       callback.handle(.success([]))
       return SingleUseSendReport(rounds: [], roundURL: "", ephId: 0, receptionId: Data())
     }
@@ -257,7 +240,7 @@ final class MessengerVerifyContactTests: XCTestCase {
       return ud
     }
     env.getSingleUseParams.run = { "single-use-params".data(using: .utf8)! }
-    env.searchUD.run = { _, _, _, _, callback in
+    env.searchUD.run = { _, callback in
       callback.handle(.failure(searchFailure))
       return SingleUseSendReport(rounds: [], roundURL: "", ephId: 0, receptionId: Data())
     }
@@ -291,7 +274,7 @@ final class MessengerVerifyContactTests: XCTestCase {
       return ud
     }
     env.getSingleUseParams.run = { "single-use-params".data(using: .utf8)! }
-    env.searchUD.run = { _, _, _, _, callback in
+    env.searchUD.run = { _, callback in
       callback.handle(.success([.unimplemented("found-contact-data".data(using: .utf8)!)]))
       return SingleUseSendReport(rounds: [], roundURL: "", ephId: 0, receptionId: Data())
     }
@@ -330,7 +313,7 @@ final class MessengerVerifyContactTests: XCTestCase {
       return ud
     }
     env.getSingleUseParams.run = { "single-use-params".data(using: .utf8)! }
-    env.searchUD.run = { _, _, _, _, callback in
+    env.searchUD.run = { _, callback in
       callback.handle(.success([.unimplemented("found-contact-data".data(using: .utf8)!)]))
       return SingleUseSendReport(rounds: [], roundURL: "", ephId: 0, receptionId: Data())
     }
-- 
GitLab