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

Merge branch 'development' into feature/restore-contacts-from-backup

parents 8718aa66 5f861966
No related branches found
No related tags found
2 merge requests!112Restore contacts from backup,!102Release 1.0.0
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
)
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment