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

Merge branch 'development' into feature/messenger-example-request-handling

# Conflicts:
#	Sources/XXMessengerClient/Messenger/Functions/MessengerVerifyContact.swift
#	Tests/XXMessengerClientTests/Messenger/Functions/MessengerVerifyContactTests.swift
parents 7fdbd1c6 5e0a91e4
No related branches found
No related tags found
2 merge requests!102Release 1.0.0,!76Messenger example - auth requests handling
......@@ -33,6 +33,7 @@ extension MessengerVerifyContact {
e2eId: e2e.getId(),
udContact: try ud.getContact(),
lookupId: try contact.getId(),
singleRequestParamsJSON: env.getSingleUseParams(),
callback: .init { result in
lookupResult = result
semaphore.signal()
......
......@@ -4,13 +4,346 @@ import XXClient
@testable import XXMessengerClient
final class MessengerVerifyContactTests: XCTestCase {
func testVerify() throws {
func testVerifyWhenNotConnected() {
var env: MessengerEnvironment = .unimplemented
env.e2e.get = { nil }
let verify: MessengerVerifyContact = .live(env)
let contact = Contact.unimplemented("data".data(using: .utf8)!)
XCTAssertThrowsError(try verify(contact)) { error in
XCTAssertNoDifference(error as? MessengerVerifyContact.Error, .notConnected)
}
}
func testVerifyWhenNotLoggedIn() {
var env: MessengerEnvironment = .unimplemented
env.e2e.get = { .unimplemented }
env.ud.get = { nil }
let verify: MessengerVerifyContact = .live(env)
let contact = Contact.unimplemented("data".data(using: .utf8)!)
XCTAssertThrowsError(try verify(contact)) { error in
XCTAssertNoDifference(error as? MessengerVerifyContact.Error, .notLoggedIn)
}
}
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 didVerifyOwnershipWithParams: [VerifyOwnershipParams] = []
var contact = Contact.unimplemented("contact-data".data(using: .utf8)!)
contact.getIdFromContact.run = { _ in "contact-id".data(using: .utf8)! }
contact.getFactsFromContact.run = { _ in [] }
let lookedUpContact = Contact.unimplemented("looked-up-contact-data".data(using: .utf8)!)
var env: MessengerEnvironment = .unimplemented
env.e2e.get = {
var e2e: E2E = .unimplemented
e2e.getId.run = { 123 }
e2e.verifyOwnership.run = { received, verified, e2eId in
didVerifyOwnershipWithParams.append(.init(
received: received,
verified: verified,
e2eId: e2eId
))
return true
}
return e2e
}
env.ud.get = {
var ud: UserDiscovery = .unimplemented
ud.getContact.run = { .unimplemented("ud-contact-data".data(using: .utf8)!) }
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
))
callback.handle(.success(lookedUpContact))
return SingleUseSendReport(rounds: [], roundURL: "", ephId: 0, receptionId: Data())
}
let verify: MessengerVerifyContact = .live(env)
let result = try verify(contact)
XCTAssertNoDifference(didLookupUDWithParams, [.init(
e2eId: 123,
udContact: .unimplemented("ud-contact-data".data(using: .utf8)!),
lookupId: "contact-id".data(using: .utf8)!,
singleRequestParamsJSON: "single-use-params".data(using: .utf8)!
)])
XCTAssertNoDifference(didVerifyOwnershipWithParams, [.init(
received: contact,
verified: lookedUpContact,
e2eId: 123
)])
XCTAssertTrue(result)
}
func testVerifyContactWithoutFactsLookupFailure() {
var contact = Contact.unimplemented("contact-data".data(using: .utf8)!)
contact.getFactsFromContact.run = { _ in [] }
contact.getIdFromContact.run = { _ in "contact-id".data(using: .utf8)! }
let lookupFailure = NSError(domain: "test", code: 111)
var env: MessengerEnvironment = .unimplemented
env.e2e.get = {
var e2e: E2E = .unimplemented
e2e.getId.run = { 123 }
return e2e
}
env.ud.get = {
var ud: UserDiscovery = .unimplemented
ud.getContact.run = { .unimplemented("ud-contact-data".data(using: .utf8)!) }
return ud
}
env.getSingleUseParams.run = { "single-use-params".data(using: .utf8)! }
env.lookupUD.run = { _, _, _, _, callback in
callback.handle(.failure(lookupFailure))
return SingleUseSendReport(rounds: [], roundURL: "", ephId: 0, receptionId: Data())
}
let verify: MessengerVerifyContact = .live(env)
XCTAssertThrowsError(try verify(contact)) { error in
XCTAssertNoDifference(error as NSError, lookupFailure)
}
}
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 didVerifyOwnershipWithParams: [VerifyOwnershipParams] = []
var contact = Contact.unimplemented("contact-data".data(using: .utf8)!)
contact.getIdFromContact.run = { _ in "contact-id".data(using: .utf8)! }
let contactFacts = [
Fact(type: .username, value: "contact-username"),
Fact(type: .email, value: "contact-email"),
Fact(type: .phone, value: "contact-phone"),
]
contact.getFactsFromContact.run = { _ in contactFacts }
let foundContact = Contact.unimplemented("found-contact-data".data(using: .utf8)!)
var env: MessengerEnvironment = .unimplemented
env.e2e.get = {
var e2e: E2E = .unimplemented
e2e.getId.run = { 123 }
e2e.verifyOwnership.run = { received, verified, e2eId in
didVerifyOwnershipWithParams.append(.init(
received: received,
verified: verified,
e2eId: e2eId
))
return true
}
return e2e
}
env.ud.get = {
var ud: UserDiscovery = .unimplemented
ud.getContact.run = { .unimplemented("ud-contact-data".data(using: .utf8)!) }
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
))
callback.handle(.success([foundContact]))
return SingleUseSendReport(rounds: [], roundURL: "", ephId: 0, receptionId: Data())
}
let verify: MessengerVerifyContact = .live(env)
let result = try verify(contact)
XCTAssertNoDifference(result, false)
XCTAssertNoDifference(didSearchUDWithParams, [.init(
e2eId: 123,
udContact: .unimplemented("ud-contact-data".data(using: .utf8)!),
facts: contactFacts,
singleRequestParamsJSON: "single-use-params".data(using: .utf8)!
)])
XCTAssertNoDifference(didVerifyOwnershipWithParams, [.init(
received: contact,
verified: foundContact,
e2eId: 123
)])
XCTAssertTrue(result)
}
func testVerifyContactWithFactsEmptySearchResults() throws {
var contact = Contact.unimplemented("contact-data".data(using: .utf8)!)
contact.getIdFromContact.run = { _ in "contact-id".data(using: .utf8)! }
let contactFacts = [
Fact(type: .username, value: "contact-username"),
Fact(type: .email, value: "contact-email"),
Fact(type: .phone, value: "contact-phone"),
]
contact.getFactsFromContact.run = { _ in contactFacts }
var env: MessengerEnvironment = .unimplemented
env.e2e.get = {
var e2e: E2E = .unimplemented
e2e.getId.run = { 123 }
return e2e
}
env.ud.get = {
var ud: UserDiscovery = .unimplemented
ud.getContact.run = { .unimplemented("ud-contact-data".data(using: .utf8)!) }
return ud
}
env.getSingleUseParams.run = { "single-use-params".data(using: .utf8)! }
env.searchUD.run = { e2eId, udContact, facts, singleRequestParamsJSON, callback in
callback.handle(.success([]))
return SingleUseSendReport(rounds: [], roundURL: "", ephId: 0, receptionId: Data())
}
let verify: MessengerVerifyContact = .live(env)
let result = try verify(contact)
XCTAssertFalse(result)
}
func testVerifyContactWithFactsSearchFailure() {
var contact = Contact.unimplemented("contact-data".data(using: .utf8)!)
contact.getIdFromContact.run = { _ in "contact-id".data(using: .utf8)! }
let contactFacts = [
Fact(type: .username, value: "contact-username"),
Fact(type: .email, value: "contact-email"),
Fact(type: .phone, value: "contact-phone"),
]
contact.getFactsFromContact.run = { _ in contactFacts }
let searchFailure = NSError(domain: "test", code: 111)
var env: MessengerEnvironment = .unimplemented
env.e2e.get = {
var e2e: E2E = .unimplemented
e2e.getId.run = { 123 }
return e2e
}
env.ud.get = {
var ud: UserDiscovery = .unimplemented
ud.getContact.run = { .unimplemented("ud-contact-data".data(using: .utf8)!) }
return ud
}
env.getSingleUseParams.run = { "single-use-params".data(using: .utf8)! }
env.searchUD.run = { _, _, _, _, callback in
callback.handle(.failure(searchFailure))
return SingleUseSendReport(rounds: [], roundURL: "", ephId: 0, receptionId: Data())
}
let verify: MessengerVerifyContact = .live(env)
XCTAssertThrowsError(try verify(contact)) { error in
XCTAssertNoDifference(error as NSError, searchFailure)
}
}
func testVerifyContactWithFactsVerifyOwnershipReturnsFalse() throws {
var contact = Contact.unimplemented("contact-data".data(using: .utf8)!)
contact.getIdFromContact.run = { _ in "contact-id".data(using: .utf8)! }
let contactFacts = [
Fact(type: .username, value: "contact-username"),
Fact(type: .email, value: "contact-email"),
Fact(type: .phone, value: "contact-phone"),
]
contact.getFactsFromContact.run = { _ in contactFacts }
var env: MessengerEnvironment = .unimplemented
env.e2e.get = {
var e2e: E2E = .unimplemented
e2e.getId.run = { 123 }
e2e.verifyOwnership.run = { _, _, _ in false }
return e2e
}
env.ud.get = {
var ud: UserDiscovery = .unimplemented
ud.getContact.run = { .unimplemented("ud-contact-data".data(using: .utf8)!) }
return ud
}
env.getSingleUseParams.run = { "single-use-params".data(using: .utf8)! }
env.searchUD.run = { _, _, _, _, callback in
callback.handle(.success([.unimplemented("found-contact-data".data(using: .utf8)!)]))
return SingleUseSendReport(rounds: [], roundURL: "", ephId: 0, receptionId: Data())
}
let verify: MessengerVerifyContact = .live(env)
let result = try verify(contact)
XCTAssertFalse(result)
}
func testVerifyContactWithFactsVerifyOwnershipFailure() {
var contact = Contact.unimplemented("contact-data".data(using: .utf8)!)
contact.getIdFromContact.run = { _ in "contact-id".data(using: .utf8)! }
let contactFacts = [
Fact(type: .username, value: "contact-username"),
Fact(type: .email, value: "contact-email"),
Fact(type: .phone, value: "contact-phone"),
]
contact.getFactsFromContact.run = { _ in contactFacts }
let verifyOwnershipFailure = NSError(domain: "test", code: 111)
var env: MessengerEnvironment = .unimplemented
env.e2e.get = {
var e2e: E2E = .unimplemented
e2e.getId.run = { 123 }
e2e.verifyOwnership.run = { _, _, _ in
throw verifyOwnershipFailure
}
return e2e
}
env.ud.get = {
var ud: UserDiscovery = .unimplemented
ud.getContact.run = { .unimplemented("ud-contact-data".data(using: .utf8)!) }
return ud
}
env.getSingleUseParams.run = { "single-use-params".data(using: .utf8)! }
env.searchUD.run = { _, _, _, _, callback in
callback.handle(.success([.unimplemented("found-contact-data".data(using: .utf8)!)]))
return SingleUseSendReport(rounds: [], roundURL: "", ephId: 0, receptionId: Data())
}
let verify: MessengerVerifyContact = .live(env)
XCTAssertThrowsError(try verify(contact)) { error in
XCTAssertNoDifference(error as NSError, verifyOwnershipFailure)
}
}
}
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