Skip to content
Snippets Groups Projects
Commit bd1010a7 authored by Dariusz Rybicki's avatar Dariusz Rybicki
Browse files

Merge branch 'development' into fix/group-initial-message

parents 059fc861 df7e9900
Branches
Tags
2 merge requests!102Release 1.0.0,!94Make GroupGetInitMessage return optional value
Showing
with 475 additions and 137 deletions
......@@ -41,7 +41,7 @@ public struct UserSearchState: Equatable {
public init(
focusedField: Field? = nil,
query: MessengerSearchUsers.Query = .init(),
query: MessengerSearchContacts.Query = .init(),
isSearching: Bool = false,
failure: String? = nil,
results: IdentifiedArrayOf<Result> = [],
......@@ -56,7 +56,7 @@ public struct UserSearchState: Equatable {
}
@BindableState public var focusedField: Field?
@BindableState public var query: MessengerSearchUsers.Query
@BindableState public var query: MessengerSearchContacts.Query
public var isSearching: Bool
public var failure: String?
public var results: IdentifiedArrayOf<Result>
......@@ -113,7 +113,7 @@ public let userSearchReducer = Reducer<UserSearchState, UserSearchAction, UserSe
state.failure = nil
return .result { [query = state.query] in
do {
return .success(.didSucceed(try env.messenger.searchUsers(query: query)))
return .success(.didSucceed(try env.messenger.searchContacts(query: query)))
} catch {
return .success(.didFail(error.localizedDescription))
}
......
......@@ -14,7 +14,7 @@ public struct UserSearchView: View {
struct ViewState: Equatable {
var focusedField: UserSearchState.Field?
var query: MessengerSearchUsers.Query
var query: MessengerSearchContacts.Query
var isSearching: Bool
var failure: String?
var results: IdentifiedArrayOf<UserSearchState.Result>
......
......@@ -13,7 +13,7 @@ final class UserSearchFeatureTests: XCTestCase {
environment: .unimplemented
)
var didSearchWithQuery: [MessengerSearchUsers.Query] = []
var didSearchWithQuery: [MessengerSearchContacts.Query] = []
struct GetIdFromContactError: Error {}
struct GetFactsFromContactError: Error {}
......@@ -44,7 +44,7 @@ final class UserSearchFeatureTests: XCTestCase {
store.environment.bgQueue = .immediate
store.environment.mainQueue = .immediate
store.environment.messenger.searchUsers.run = { query in
store.environment.messenger.searchContacts.run = { query in
didSearchWithQuery.append(query)
return contacts
}
......@@ -100,7 +100,7 @@ final class UserSearchFeatureTests: XCTestCase {
store.environment.bgQueue = .immediate
store.environment.mainQueue = .immediate
store.environment.messenger.searchUsers.run = { _ in throw failure }
store.environment.messenger.searchContacts.run = { _ in throw failure }
store.send(.searchTapped) {
$0.focusedField = nil
......
......@@ -2,9 +2,20 @@ import Bindings
import XCTestDynamicOverlay
public struct UdMultiLookupCallback {
public enum Result: Equatable {
case success([Contact])
case failure(error: NSError, failedIDs: [Data])
public struct Result: Equatable {
public init(
contacts: [Contact],
failedIds: [Data],
errors: [NSError]
) {
self.contacts = contacts
self.failedIds = failedIds
self.errors = errors
}
public var contacts: [Contact]
public var failedIds: [Data]
public var errors: [NSError]
}
public init(handle: @escaping (Result) -> Void) {
......@@ -30,23 +41,31 @@ extension UdMultiLookupCallback {
let callback: UdMultiLookupCallback
func callback(_ contactListJSON: Data?, failedIDs: Data?, err: Error?) {
var result = UdMultiLookupCallback.Result(
contacts: [],
failedIds: [],
errors: []
)
if let err = err {
callback.handle(.failure(
error: err as NSError,
failedIDs: failedIDs
.map { (try? JSONDecoder().decode([Data].self, from: $0)) ?? [] } ?? []
))
} else if let contactListJSON = contactListJSON {
result.errors.append(err as NSError)
}
if let contactListJSON = contactListJSON {
do {
result.contacts = try JSONDecoder()
.decode([Data].self, from: contactListJSON)
.map { Contact.live($0) }
} catch {
result.errors.append(error as NSError)
}
}
if let failedIDs = failedIDs {
do {
let contactsData = try JSONDecoder().decode([Data].self, from: contactListJSON)
let contacts: [Contact] = contactsData.map { Contact.live($0) }
callback.handle(.success(contacts))
result.failedIds = try JSONDecoder().decode([Data].self, from: failedIDs)
} catch {
callback.handle(.failure(error: error as NSError, failedIDs: []))
result.errors.append(error as NSError)
}
} else {
fatalError("BindingsUdMultiLookupCallbackProtocol received `nil` contactListJSON and `nil` error")
}
callback.handle(result)
}
}
......
......@@ -2,30 +2,45 @@ import Bindings
import XCTestDynamicOverlay
public struct LookupUD {
public var run: (Int, Contact, Data, Data, UdLookupCallback) throws -> SingleUseSendReport
public func callAsFunction(
public struct Params: Equatable {
public init(
e2eId: Int,
udContact: Contact,
lookupId: Data,
singleRequestParamsJSON: Data = GetSingleUseParams.liveDefault(),
singleRequestParamsJSON: Data = GetSingleUseParams.liveDefault()
) {
self.e2eId = e2eId
self.udContact = udContact
self.lookupId = lookupId
self.singleRequestParamsJSON = singleRequestParamsJSON
}
public var e2eId: Int
public var udContact: Contact
public var lookupId: Data
public var singleRequestParamsJSON: Data
}
public var run: (Params, UdLookupCallback) throws -> SingleUseSendReport
public func callAsFunction(
params: Params,
callback: UdLookupCallback
) throws -> SingleUseSendReport {
try run(e2eId, udContact, lookupId, singleRequestParamsJSON, callback)
try run(params, callback)
}
}
extension LookupUD {
public static let live = LookupUD {
e2eId, udContact, lookupId, singleRequestParamsJSON, callback in
public static let live = LookupUD { params, callback in
var error: NSError?
let reportData = BindingsLookupUD(
e2eId,
udContact.data,
params.e2eId,
params.udContact.data,
callback.makeBindingsUdLookupCallback(),
lookupId,
singleRequestParamsJSON,
params.lookupId,
params.singleRequestParamsJSON,
&error
)
if let error = error {
......
......@@ -2,30 +2,44 @@ import Bindings
import XCTestDynamicOverlay
public struct SearchUD {
public var run: (Int, Contact, [Fact], Data, UdSearchCallback) throws -> SingleUseSendReport
public func callAsFunction(
public struct Params: Equatable {
public init(
e2eId: Int,
udContact: Contact,
facts: [Fact],
singleRequestParamsJSON: Data = GetSingleUseParams.liveDefault(),
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(
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 {
......
import Foundation
import XCTestDynamicOverlay
import XXClient
public struct MessengerLookupContact {
public enum Error: Swift.Error, Equatable {
case notConnected
case notLoggedIn
}
public var run: (Data) throws -> Contact
public func callAsFunction(id: Data) throws -> Contact {
try run(id)
}
}
extension MessengerLookupContact {
public static func live(_ env: MessengerEnvironment) -> MessengerLookupContact {
MessengerLookupContact { id in
guard let e2e = env.e2e() else {
throw Error.notConnected
}
guard let ud = env.ud() else {
throw Error.notLoggedIn
}
var result: Result<Contact, NSError>!
let semaphore = DispatchSemaphore(value: 0)
_ = try env.lookupUD(
params: LookupUD.Params(
e2eId: e2e.getId(),
udContact: try ud.getContact(),
lookupId: id,
singleRequestParamsJSON: env.getSingleUseParams()
),
callback: UdLookupCallback { lookupResult in
result = lookupResult
semaphore.signal()
}
)
semaphore.wait()
return try result.get()
}
}
}
extension MessengerLookupContact {
public static let unimplemented = MessengerLookupContact(
run: XCTUnimplemented("\(Self.self)")
)
}
import Foundation
import XCTestDynamicOverlay
import XXClient
public struct MessengerLookupContacts {
public enum Error: Swift.Error, Equatable {
case notConnected
case notLoggedIn
}
public var run: ([Data]) throws -> UdMultiLookupCallback.Result
public func callAsFunction(ids: [Data]) throws -> UdMultiLookupCallback.Result {
try run(ids)
}
}
extension MessengerLookupContacts {
public static func live(_ env: MessengerEnvironment) -> MessengerLookupContacts {
MessengerLookupContacts { ids in
guard let e2e = env.e2e() else {
throw Error.notConnected
}
guard let ud = env.ud() else {
throw Error.notLoggedIn
}
var callbackResult: UdMultiLookupCallback.Result!
let semaphore = DispatchSemaphore(value: 0)
_ = try env.multiLookupUD(
params: MultiLookupUD.Params(
e2eId: e2e.getId(),
udContact: try ud.getContact(),
lookupIds: ids,
singleRequestParams: env.getSingleUseParams()
),
callback: UdMultiLookupCallback { result in
callbackResult = result
semaphore.signal()
}
)
semaphore.wait()
return callbackResult
}
}
}
extension MessengerLookupContacts {
public static let unimplemented = MessengerLookupContacts(
run: XCTUnimplemented("\(Self.self)")
)
}
......@@ -2,7 +2,7 @@ import Foundation
import XCTestDynamicOverlay
import XXClient
public struct MessengerSearchUsers {
public struct MessengerSearchContacts {
public struct Query: Equatable {
public init(
username: String? = nil,
......@@ -31,9 +31,9 @@ public struct MessengerSearchUsers {
}
}
extension MessengerSearchUsers {
public static func live(_ env: MessengerEnvironment) -> MessengerSearchUsers {
MessengerSearchUsers { query in
extension MessengerSearchContacts {
public static func live(_ env: MessengerEnvironment) -> MessengerSearchContacts {
MessengerSearchContacts { query in
guard let e2e = env.e2e() else {
throw Error.notConnected
}
......@@ -43,11 +43,13 @@ extension MessengerSearchUsers {
var result: Result<[Contact], Swift.Error>!
let semaphore = DispatchSemaphore(value: 0)
_ = try env.searchUD(
params: SearchUD.Params(
e2eId: e2e.getId(),
udContact: try ud.getContact(),
facts: query.facts,
singleRequestParamsJSON: env.getSingleUseParams(),
callback: .init { searchResult in
singleRequestParamsJSON: env.getSingleUseParams()
),
callback: UdSearchCallback { searchResult in
switch searchResult {
case .success(let contacts):
result = .success(contacts)
......@@ -63,7 +65,7 @@ extension MessengerSearchUsers {
}
}
extension MessengerSearchUsers.Query {
extension MessengerSearchContacts.Query {
public var isEmpty: Bool {
[username, email, phone]
.compactMap { $0 }
......@@ -86,8 +88,8 @@ extension MessengerSearchUsers.Query {
}
}
extension MessengerSearchUsers {
public static let unimplemented = MessengerSearchUsers(
extension MessengerSearchContacts {
public static let unimplemented = MessengerSearchContacts(
run: XCTUnimplemented("\(Self.self)")
)
}
......@@ -30,11 +30,13 @@ extension MessengerVerifyContact {
var lookupResult: Result<Contact, NSError>!
let semaphore = DispatchSemaphore(value: 0)
_ = try env.lookupUD(
params: LookupUD.Params(
e2eId: e2e.getId(),
udContact: try ud.getContact(),
lookupId: try contact.getId(),
singleRequestParamsJSON: env.getSingleUseParams(),
callback: .init { result in
singleRequestParamsJSON: env.getSingleUseParams()
),
callback: UdLookupCallback { result in
lookupResult = result
semaphore.signal()
}
......@@ -45,11 +47,13 @@ extension MessengerVerifyContact {
var searchResult: Result<[Contact], NSError>!
let semaphore = DispatchSemaphore(value: 0)
_ = try env.searchUD(
params: SearchUD.Params(
e2eId: e2e.getId(),
udContact: try ud.getContact(),
facts: facts,
singleRequestParamsJSON: env.getSingleUseParams(),
callback: .init { result in
singleRequestParamsJSON: env.getSingleUseParams()
),
callback: UdSearchCallback { result in
searchResult = result
semaphore.signal()
}
......
......@@ -21,7 +21,8 @@ public struct Messenger {
public var waitForNetwork: MessengerWaitForNetwork
public var waitForNodes: MessengerWaitForNodes
public var destroy: MessengerDestroy
public var searchUsers: MessengerSearchUsers
public var searchContacts: MessengerSearchContacts
public var lookupContact: MessengerLookupContact
public var registerForNotifications: MessengerRegisterForNotifications
public var verifyContact: MessengerVerifyContact
public var sendMessage: MessengerSendMessage
......@@ -50,7 +51,8 @@ extension Messenger {
waitForNetwork: .live(env),
waitForNodes: .live(env),
destroy: .live(env),
searchUsers: .live(env),
searchContacts: .live(env),
lookupContact: .live(env),
registerForNotifications: .live(env),
verifyContact: .live(env),
sendMessage: .live(env)
......@@ -80,7 +82,8 @@ extension Messenger {
waitForNetwork: .unimplemented,
waitForNodes: .unimplemented,
destroy: .unimplemented,
searchUsers: .unimplemented,
searchContacts: .unimplemented,
lookupContact: .unimplemented,
registerForNotifications: .unimplemented,
verifyContact: .unimplemented,
sendMessage: .unimplemented
......
......@@ -17,6 +17,7 @@ public struct MessengerEnvironment {
public var login: Login
public var lookupUD: LookupUD
public var messageListeners: ListenersRegistry
public var multiLookupUD: MultiLookupUD
public var ndfEnvironment: NDFEnvironment
public var newCMix: NewCMix
public var newOrLoadUd: NewOrLoadUd
......@@ -54,6 +55,7 @@ extension MessengerEnvironment {
login: .live,
lookupUD: .live,
messageListeners: .live(),
multiLookupUD: .live(),
ndfEnvironment: .mainnet,
newCMix: .live,
newOrLoadUd: .live,
......@@ -86,6 +88,7 @@ extension MessengerEnvironment {
login: .unimplemented,
lookupUD: .unimplemented,
messageListeners: .unimplemented,
multiLookupUD: .unimplemented,
ndfEnvironment: .unimplemented,
newCMix: .unimplemented,
newOrLoadUd: .unimplemented,
......
import CustomDump
import XCTest
import XXClient
@testable import XXMessengerClient
final class MessengerLookupContactTests: XCTestCase {
func testLookup() throws {
let contactId = "contact-id".data(using: .utf8)!
let e2eId = 123
let udContact = Contact.unimplemented("ud-contact".data(using: .utf8)!)
let singleRequestParams = "single-request-params".data(using: .utf8)!
let contact = Contact.unimplemented("contact".data(using: .utf8)!)
var didLookupWithParams: [LookupUD.Params] = []
var env: MessengerEnvironment = .unimplemented
env.e2e.get = {
var e2e: E2E = .unimplemented
e2e.getId.run = { e2eId }
return e2e
}
env.ud.get = {
var ud: UserDiscovery = .unimplemented
ud.getContact.run = { udContact }
return ud
}
env.getSingleUseParams.run = { singleRequestParams }
env.lookupUD.run = { params, callback in
didLookupWithParams.append(params)
callback.handle(.success(contact))
return SingleUseSendReport(rounds: [], roundURL: "", ephId: 0, receptionId: Data())
}
let lookup: MessengerLookupContact = .live(env)
let result = try lookup(id: contactId)
XCTAssertNoDifference(didLookupWithParams, [.init(
e2eId: e2eId,
udContact: udContact,
lookupId: contactId,
singleRequestParamsJSON: singleRequestParams
)])
XCTAssertNoDifference(result, contact)
}
func testLookupWhenNotConnected() {
var env: MessengerEnvironment = .unimplemented
env.e2e.get = { nil }
let lookup: MessengerLookupContact = .live(env)
XCTAssertThrowsError(try lookup(id: Data())) { error in
XCTAssertEqual(error as? MessengerLookupContact.Error, .notConnected)
}
}
func testLookupWhenNotLoggedIn() {
var env: MessengerEnvironment = .unimplemented
env.e2e.get = { .unimplemented }
env.ud.get = { nil }
let lookup: MessengerLookupContact = .live(env)
XCTAssertThrowsError(try lookup(id: Data())) { error in
XCTAssertEqual(error as? MessengerLookupContact.Error, .notLoggedIn)
}
}
func testLookupFailure() {
struct Failure: Error, Equatable {}
let failure = Failure()
var env: MessengerEnvironment = .unimplemented
env.e2e.get = {
var e2e: E2E = .unimplemented
e2e.getId.run = { 0 }
return e2e
}
env.ud.get = {
var ud: UserDiscovery = .unimplemented
ud.getContact.run = { .unimplemented(Data()) }
return ud
}
env.getSingleUseParams.run = { Data() }
env.lookupUD.run = { _, _ in throw failure }
let lookup: MessengerLookupContact = .live(env)
XCTAssertThrowsError(try lookup(id: Data())) { error in
XCTAssertEqual(error as? Failure, failure)
}
}
func testLookupCallbackFailure() {
struct Failure: Error, Equatable {}
let failure = Failure()
var env: MessengerEnvironment = .unimplemented
env.e2e.get = {
var e2e: E2E = .unimplemented
e2e.getId.run = { 0 }
return e2e
}
env.ud.get = {
var ud: UserDiscovery = .unimplemented
ud.getContact.run = { .unimplemented(Data()) }
return ud
}
env.getSingleUseParams.run = { Data() }
env.lookupUD.run = { _, callback in
callback.handle(.failure(failure as NSError))
return SingleUseSendReport(rounds: [], roundURL: "", ephId: 0, receptionId: Data())
}
let lookup: MessengerLookupContact = .live(env)
XCTAssertThrowsError(try lookup(id: Data())) { error in
XCTAssertEqual(error as? Failure, failure)
}
}
}
import CustomDump
import XCTest
import XXClient
@testable import XXMessengerClient
final class MessengerLookupContactsTests: XCTestCase {
func testLookup() throws {
let contactIds = ["contact-id".data(using: .utf8)!]
let e2eId = 123
let udContact = Contact.unimplemented("ud-contact".data(using: .utf8)!)
let singleRequestParams = "single-request-params".data(using: .utf8)!
let contacts = [Contact.unimplemented("contact".data(using: .utf8)!)]
var didMultiLookupWithParams: [MultiLookupUD.Params] = []
var env: MessengerEnvironment = .unimplemented
env.e2e.get = {
var e2e: E2E = .unimplemented
e2e.getId.run = { e2eId }
return e2e
}
env.ud.get = {
var ud: UserDiscovery = .unimplemented
ud.getContact.run = { udContact }
return ud
}
env.getSingleUseParams.run = { singleRequestParams }
env.multiLookupUD.run = { params, callback in
didMultiLookupWithParams.append(params)
callback.handle(.init(
contacts: contacts,
failedIds: [],
errors: []
))
}
let lookup: MessengerLookupContacts = .live(env)
let result = try lookup(ids: contactIds)
XCTAssertNoDifference(didMultiLookupWithParams, [.init(
e2eId: e2eId,
udContact: udContact,
lookupIds: contactIds,
singleRequestParams: singleRequestParams
)])
XCTAssertNoDifference(result, .init(contacts: contacts, failedIds: [], errors: []))
}
func testLookupWhenNotConnected() {
var env: MessengerEnvironment = .unimplemented
env.e2e.get = { nil }
let lookup: MessengerLookupContacts = .live(env)
XCTAssertThrowsError(try lookup(ids: [])) { error in
XCTAssertEqual(error as? MessengerLookupContacts.Error, .notConnected)
}
}
func testLookupWhenNotLoggedIn() {
var env: MessengerEnvironment = .unimplemented
env.e2e.get = { .unimplemented }
env.ud.get = { nil }
let lookup: MessengerLookupContacts = .live(env)
XCTAssertThrowsError(try lookup(ids: [])) { error in
XCTAssertEqual(error as? MessengerLookupContacts.Error, .notLoggedIn)
}
}
func testLookupFailure() {
struct Failure: Error, Equatable {}
let failure = Failure()
var env: MessengerEnvironment = .unimplemented
env.e2e.get = {
var e2e: E2E = .unimplemented
e2e.getId.run = { 0 }
return e2e
}
env.ud.get = {
var ud: UserDiscovery = .unimplemented
ud.getContact.run = { .unimplemented(Data()) }
return ud
}
env.getSingleUseParams.run = { Data() }
env.multiLookupUD.run = { _, _ in throw failure }
let lookup: MessengerLookupContacts = .live(env)
XCTAssertThrowsError(try lookup(ids: [])) { error in
XCTAssertEqual(error as? Failure, failure)
}
}
}
......@@ -3,16 +3,9 @@ import XCTest
import XXClient
@testable import XXMessengerClient
final class MessengerSearchUsersTests: XCTestCase {
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 MessengerSearchUsersTests: 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)!),
......@@ -41,8 +29,8 @@ final class MessengerSearchUsersTests: XCTestCase {
return SingleUseSendReport(rounds: [], roundURL: "", ephId: 0, receptionId: Data())
}
let search: MessengerSearchUsers = .live(env)
let query = MessengerSearchUsers.Query(
let search: MessengerSearchContacts = .live(env)
let query = MessengerSearchContacts.Query(
username: "Username",
email: "Email",
phone: "Phone"
......@@ -67,10 +55,10 @@ final class MessengerSearchUsersTests: XCTestCase {
func testSearchNotConnected() {
var env: MessengerEnvironment = .unimplemented
env.e2e.get = { nil }
let search: MessengerSearchUsers = .live(env)
let search: MessengerSearchContacts = .live(env)
XCTAssertThrowsError(try search(query: .init())) { error in
XCTAssertNoDifference(error as? MessengerSearchUsers.Error, .notConnected)
XCTAssertNoDifference(error as? MessengerSearchContacts.Error, .notConnected)
}
}
......@@ -78,10 +66,10 @@ final class MessengerSearchUsersTests: XCTestCase {
var env: MessengerEnvironment = .unimplemented
env.e2e.get = { .unimplemented }
env.ud.get = { nil }
let search: MessengerSearchUsers = .live(env)
let search: MessengerSearchContacts = .live(env)
XCTAssertThrowsError(try search(query: .init())) { error in
XCTAssertNoDifference(error as? MessengerSearchUsers.Error, .notLoggedIn)
XCTAssertNoDifference(error as? MessengerSearchContacts.Error, .notLoggedIn)
}
}
......@@ -101,9 +89,9 @@ final class MessengerSearchUsersTests: XCTestCase {
return ud
}
env.getSingleUseParams.run = { Data() }
env.searchUD.run = { _, _, _, _, _ in throw error }
env.searchUD.run = { _, _ in throw error }
let search: MessengerSearchUsers = .live(env)
let search: MessengerSearchContacts = .live(env)
XCTAssertThrowsError(try search(query: .init())) { err in
XCTAssertNoDifference(err as? Failure, error)
......@@ -126,12 +114,12 @@ final class MessengerSearchUsersTests: 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())
}
let search: MessengerSearchUsers = .live(env)
let search: MessengerSearchContacts = .live(env)
XCTAssertThrowsError(try search(query: .init())) { err in
XCTAssertNoDifference(err as? Failure, error)
......@@ -139,7 +127,7 @@ final class MessengerSearchUsersTests: XCTestCase {
}
func testQueryIsEmpty() {
let emptyQueries: [MessengerSearchUsers.Query] = [
let emptyQueries: [MessengerSearchContacts.Query] = [
.init(username: nil, email: nil, phone: nil),
.init(username: "", email: nil, phone: nil),
.init(username: nil, email: "", phone: nil),
......@@ -151,7 +139,7 @@ final class MessengerSearchUsersTests: XCTestCase {
XCTAssertTrue(query.isEmpty, "\(query) should be empty")
}
let nonEmptyQueries: [MessengerSearchUsers.Query] = [
let nonEmptyQueries: [MessengerSearchContacts.Query] = [
.init(username: "test", email: nil, phone: nil),
.init(username: nil, email: "test", phone: nil),
.init(username: nil, email: nil, phone: "test"),
......@@ -165,17 +153,17 @@ final class MessengerSearchUsersTests: XCTestCase {
func testQueryFacts() {
XCTAssertNoDifference(
MessengerSearchUsers.Query(username: nil, email: nil, phone: nil).facts,
MessengerSearchContacts.Query(username: nil, email: nil, phone: nil).facts,
[]
)
XCTAssertNoDifference(
MessengerSearchUsers.Query(username: "", email: "", phone: "").facts,
MessengerSearchContacts.Query(username: "", email: "", phone: "").facts,
[]
)
XCTAssertNoDifference(
MessengerSearchUsers.Query(
MessengerSearchContacts.Query(
username: "username",
email: "email",
phone: "phone"
......@@ -188,7 +176,7 @@ final class MessengerSearchUsersTests: XCTestCase {
)
XCTAssertNoDifference(
MessengerSearchUsers.Query(
MessengerSearchContacts.Query(
username: "username",
email: "",
phone: nil
......
......@@ -28,18 +28,12 @@ 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
var e2eId: Int
}
var didLookupUDWithParams: [LookupUDParams] = []
var didLookupUDWithParams: [LookupUD.Params] = []
var didVerifyOwnershipWithParams: [VerifyOwnershipParams] = []
var contact = Contact.unimplemented("contact-data".data(using: .utf8)!)
......@@ -68,13 +62,8 @@ final class MessengerVerifyContactTests: XCTestCase {
return ud
}
env.getSingleUseParams.run = { "single-use-params".data(using: .utf8)! }
env.lookupUD.run = { e2eId, udContact, lookupId, singleRequestParamsJSON, callback in
didLookupUDWithParams.append(.init(
e2eId: e2eId,
udContact: udContact,
lookupId: lookupId,
singleRequestParamsJSON: singleRequestParamsJSON
))
env.lookupUD.run = { params, callback in
didLookupUDWithParams.append(params)
callback.handle(.success(lookedUpContact))
return SingleUseSendReport(rounds: [], roundURL: "", ephId: 0, receptionId: Data())
}
......@@ -117,7 +106,7 @@ final class MessengerVerifyContactTests: XCTestCase {
return ud
}
env.getSingleUseParams.run = { "single-use-params".data(using: .utf8)! }
env.lookupUD.run = { _, _, _, _, callback in
env.lookupUD.run = { _, callback in
callback.handle(.failure(lookupFailure))
return SingleUseSendReport(rounds: [], roundURL: "", ephId: 0, receptionId: Data())
}
......@@ -129,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)!)
......@@ -174,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())
}
......@@ -226,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())
}
......@@ -262,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())
}
......@@ -296,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())
}
......@@ -335,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())
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment