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
This commit is part of merge request !112. Comments created here will be created in the context of that merge request.
import Foundation import Foundation
public enum FactType: Equatable { public enum FactType: Equatable, Hashable {
public static let knownTypes: [FactType] = [.username, .email, .phone] public static let knownTypes: [FactType] = [.username, .email, .phone]
case username 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 { ...@@ -22,6 +22,7 @@ public struct Messenger {
public var register: MessengerRegister public var register: MessengerRegister
public var isLoggedIn: MessengerIsLoggedIn public var isLoggedIn: MessengerIsLoggedIn
public var logIn: MessengerLogIn public var logIn: MessengerLogIn
public var myContact: MessengerMyContact
public var waitForNetwork: MessengerWaitForNetwork public var waitForNetwork: MessengerWaitForNetwork
public var waitForNodes: MessengerWaitForNodes public var waitForNodes: MessengerWaitForNodes
public var destroy: MessengerDestroy public var destroy: MessengerDestroy
...@@ -63,6 +64,7 @@ extension Messenger { ...@@ -63,6 +64,7 @@ extension Messenger {
register: .live(env), register: .live(env),
isLoggedIn: .live(env), isLoggedIn: .live(env),
logIn: .live(env), logIn: .live(env),
myContact: .live(env),
waitForNetwork: .live(env), waitForNetwork: .live(env),
waitForNodes: .live(env), waitForNodes: .live(env),
destroy: .live(env), destroy: .live(env),
...@@ -105,6 +107,7 @@ extension Messenger { ...@@ -105,6 +107,7 @@ extension Messenger {
register: .unimplemented, register: .unimplemented,
isLoggedIn: .unimplemented, isLoggedIn: .unimplemented,
logIn: .unimplemented, logIn: .unimplemented,
myContact: .unimplemented,
waitForNetwork: .unimplemented, waitForNetwork: .unimplemented,
waitForNodes: .unimplemented, waitForNodes: .unimplemented,
destroy: .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