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

Update auth status when verifying contact

parent 6b5720f0
Branches
Tags
2 merge requests!102Release 1.0.0,!81Messenger example - contact authorization improvements
......@@ -69,15 +69,19 @@ public let verifyContactReducer = Reducer<VerifyContactState, VerifyContactActio
state.isVerifying = true
state.result = nil
return Effect.result { [state] in
do {
let result = try env.messenger.verifyContact(state.contact)
let contactId = try state.contact.getId()
func updateStatus(_ status: XXModels.Contact.AuthStatus) throws {
try env.db().bulkUpdateContacts.callAsFunction(
.init(id: [contactId]),
.init(authStatus: result ? .verified : .verificationFailed)
.init(id: [try state.contact.getId()]),
.init(authStatus: status)
)
}
do {
try updateStatus(.verificationInProgress)
let result = try env.messenger.verifyContact(state.contact)
try updateStatus(result ? .verified : .verificationFailed)
return .success(.didVerify(.success(result)))
} catch {
try? updateStatus(.verificationFailed)
return .success(.didVerify(.failure(error.localizedDescription)))
}
}
......
......@@ -45,8 +45,14 @@ final class VerifyContactFeatureTests: XCTestCase {
}
XCTAssertNoDifference(didVerifyContact, [contact])
XCTAssertNoDifference(didBulkUpdateContactsWithQuery, [.init(id: [contactId])])
XCTAssertNoDifference(didBulkUpdateContactsWithAssignments, [.init(authStatus: .verified)])
XCTAssertNoDifference(didBulkUpdateContactsWithQuery, [
.init(id: [contactId]),
.init(id: [contactId]),
])
XCTAssertNoDifference(didBulkUpdateContactsWithAssignments, [
.init(authStatus: .verificationInProgress),
.init(authStatus: .verified)
])
store.receive(.didVerify(.success(true))) {
$0.isVerifying = false
......@@ -93,8 +99,14 @@ final class VerifyContactFeatureTests: XCTestCase {
}
XCTAssertNoDifference(didVerifyContact, [contact])
XCTAssertNoDifference(didBulkUpdateContactsWithQuery, [.init(id: [contactId])])
XCTAssertNoDifference(didBulkUpdateContactsWithAssignments, [.init(authStatus: .verificationFailed)])
XCTAssertNoDifference(didBulkUpdateContactsWithQuery, [
.init(id: [contactId]),
.init(id: [contactId]),
])
XCTAssertNoDifference(didBulkUpdateContactsWithAssignments, [
.init(authStatus: .verificationInProgress),
.init(authStatus: .verificationFailed),
])
store.receive(.didVerify(.success(false))) {
$0.isVerifying = false
......@@ -103,9 +115,13 @@ final class VerifyContactFeatureTests: XCTestCase {
}
func testVerifyFailure() {
var contact = XXClient.Contact.unimplemented("contact-data".data(using: .utf8)!)
let contactId = "contact-id".data(using: .utf8)!
contact.getIdFromContact.run = { _ in contactId }
let store = TestStore(
initialState: VerifyContactState(
contact: .unimplemented("contact-data".data(using: .utf8)!)
contact: contact
),
reducer: verifyContactReducer,
environment: .unimplemented
......@@ -114,15 +130,36 @@ final class VerifyContactFeatureTests: XCTestCase {
struct Failure: Error {}
let error = Failure()
var didBulkUpdateContactsWithQuery: [XXModels.Contact.Query] = []
var didBulkUpdateContactsWithAssignments: [XXModels.Contact.Assignments] = []
store.environment.mainQueue = .immediate
store.environment.bgQueue = .immediate
store.environment.messenger.verifyContact.run = { _ in throw error }
store.environment.db.run = {
var db: Database = .failing
db.bulkUpdateContacts.run = { query, assignments in
didBulkUpdateContactsWithQuery.append(query)
didBulkUpdateContactsWithAssignments.append(assignments)
return 0
}
return db
}
store.send(.verifyTapped) {
$0.isVerifying = true
$0.result = nil
}
XCTAssertNoDifference(didBulkUpdateContactsWithQuery, [
.init(id: [contactId]),
.init(id: [contactId]),
])
XCTAssertNoDifference(didBulkUpdateContactsWithAssignments, [
.init(authStatus: .verificationInProgress),
.init(authStatus: .verificationFailed),
])
store.receive(.didVerify(.failure(error.localizedDescription))) {
$0.isVerifying = false
$0.result = .failure(error.localizedDescription)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment