Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • mobile/ios/elixxir-dapps-sdk-swift
1 result
Show changes
Commits on Source (3)
import Foundation
public enum FactType: Equatable {
public enum FactType: Equatable, Hashable {
public static let knownTypes: [FactType] = [.username, .email, .phone]
case username
......
import XCTestDynamicOverlay
import XXClient
public struct MessengerMyContact {
public enum IncludeFacts: Equatable {
case all
case types(Set<FactType>)
}
public enum Error: Swift.Error {
case notConnected
case notLoggedIn
}
public var run: (IncludeFacts?) throws -> XXClient.Contact
public func callAsFunction(includeFacts: IncludeFacts? = .all) throws -> XXClient.Contact {
try run(includeFacts)
}
}
extension MessengerMyContact {
public static func live(_ env: MessengerEnvironment) -> MessengerMyContact {
MessengerMyContact { includeFacts in
guard let e2e = env.e2e() else {
throw Error.notConnected
}
var contact = e2e.getContact()
if let includeFacts {
guard let ud = env.ud() else {
throw Error.notLoggedIn
}
let udFacts = try ud.getFacts()
switch includeFacts {
case .all:
try contact.setFacts(udFacts)
case .types(let types):
try contact.setFacts(udFacts.filter { types.contains($0.type) })
}
}
return contact
}
}
}
extension MessengerMyContact {
public static let unimplemented = MessengerMyContact(
run: XCTUnimplemented("\(Self.self)")
)
}
......@@ -22,6 +22,7 @@ public struct Messenger {
public var register: MessengerRegister
public var isLoggedIn: MessengerIsLoggedIn
public var logIn: MessengerLogIn
public var myContact: MessengerMyContact
public var waitForNetwork: MessengerWaitForNetwork
public var waitForNodes: MessengerWaitForNodes
public var destroy: MessengerDestroy
......@@ -63,6 +64,7 @@ extension Messenger {
register: .live(env),
isLoggedIn: .live(env),
logIn: .live(env),
myContact: .live(env),
waitForNetwork: .live(env),
waitForNodes: .live(env),
destroy: .live(env),
......@@ -105,6 +107,7 @@ extension Messenger {
register: .unimplemented,
isLoggedIn: .unimplemented,
logIn: .unimplemented,
myContact: .unimplemented,
waitForNetwork: .unimplemented,
waitForNodes: .unimplemented,
destroy: .unimplemented,
......
import CustomDump
import XCTest
import XXClient
@testable import XXMessengerClient
final class MessengerMyContactTests: XCTestCase {
func testMyContactWithAllFacts() throws {
let e2eContactData = "e2e-contact-data".data(using: .utf8)!
var e2eContactSetFacts: [[Fact]] = []
let e2eContactWithFactsData = "e2e-contact-with-facts-data".data(using: .utf8)!
let udFacts = [
Fact(type: .username, value: "ud-fact-username"),
Fact(type: .email, value: "ud-fact-email"),
Fact(type: .phone, value: "ud-fact-phone"),
]
var env: MessengerEnvironment = .unimplemented
env.e2e.get = {
var e2e: E2E = .unimplemented
e2e.getContact.run = {
var contact: Contact = .unimplemented(e2eContactData)
contact.setFactsOnContact.run = { _, facts in
e2eContactSetFacts.append(facts)
return e2eContactWithFactsData
}
return contact
}
return e2e
}
env.ud.get = {
var ud: UserDiscovery = .unimplemented
ud.getFacts.run = { udFacts }
return ud
}
let myContact: MessengerMyContact = .live(env)
let contact = try myContact()
XCTAssertNoDifference(e2eContactSetFacts, [udFacts])
XCTAssertNoDifference(contact, .unimplemented(e2eContactWithFactsData))
}
func testMyContactWithoutFacts() throws {
let e2eContactData = "e2e-contact-data".data(using: .utf8)!
var env: MessengerEnvironment = .unimplemented
env.e2e.get = {
var e2e: E2E = .unimplemented
e2e.getContact.run = { .unimplemented(e2eContactData) }
return e2e
}
let myContact: MessengerMyContact = .live(env)
let contact = try myContact(includeFacts: .none)
XCTAssertNoDifference(contact, .unimplemented(e2eContactData))
}
func testMyContactWithFactTypes() throws {
let e2eContactData = "e2e-contact-data".data(using: .utf8)!
var e2eContactSetFacts: [[Fact]] = []
let e2eContactWithFactsData = "e2e-contact-with-facts-data".data(using: .utf8)!
let udFactUsername = Fact(type: .username, value: "ud-fact-username")
let udFactEmail = Fact(type: .email, value: "ud-fact-email")
let udFactPhone = Fact(type: .phone, value: "ud-fact-phone")
let udFacts = [udFactUsername, udFactEmail, udFactPhone]
var env: MessengerEnvironment = .unimplemented
env.e2e.get = {
var e2e: E2E = .unimplemented
e2e.getContact.run = {
var contact: Contact = .unimplemented(e2eContactData)
contact.setFactsOnContact.run = { _, facts in
e2eContactSetFacts.append(facts)
return e2eContactWithFactsData
}
return contact
}
return e2e
}
env.ud.get = {
var ud: UserDiscovery = .unimplemented
ud.getFacts.run = { udFacts }
return ud
}
let myContact: MessengerMyContact = .live(env)
let contact = try myContact(includeFacts: .types([.username, .phone]))
XCTAssertNoDifference(e2eContactSetFacts, [[udFactUsername, udFactPhone]])
XCTAssertNoDifference(contact, .unimplemented(e2eContactWithFactsData))
}
func testMyContactWhenNotConnected() {
var env: MessengerEnvironment = .unimplemented
env.e2e.get = { nil }
let myContact: MessengerMyContact = .live(env)
XCTAssertThrowsError(try myContact()) { error in
XCTAssertNoDifference(
error as NSError,
MessengerMyContact.Error.notConnected as NSError
)
}
}
func testMyContactWithFactsWhenNotLoggedIn() {
var env: MessengerEnvironment = .unimplemented
env.e2e.get = {
var e2e: E2E = .unimplemented
e2e.getContact.run = { .unimplemented(Data()) }
return e2e
}
env.ud.get = { nil }
let myContact: MessengerMyContact = .live(env)
XCTAssertThrowsError(try myContact()) { error in
XCTAssertNoDifference(
error as NSError,
MessengerMyContact.Error.notLoggedIn as NSError
)
}
}
}