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
No related branches found
No related tags found
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.
Finish editing this message first!
Please register or to comment