Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
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
)
}
}
}