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 ...@@ -69,15 +69,19 @@ public let verifyContactReducer = Reducer<VerifyContactState, VerifyContactActio
state.isVerifying = true state.isVerifying = true
state.result = nil state.result = nil
return Effect.result { [state] in return Effect.result { [state] in
do { func updateStatus(_ status: XXModels.Contact.AuthStatus) throws {
let result = try env.messenger.verifyContact(state.contact)
let contactId = try state.contact.getId()
try env.db().bulkUpdateContacts.callAsFunction( try env.db().bulkUpdateContacts.callAsFunction(
.init(id: [contactId]), .init(id: [try state.contact.getId()]),
.init(authStatus: result ? .verified : .verificationFailed) .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))) return .success(.didVerify(.success(result)))
} catch { } catch {
try? updateStatus(.verificationFailed)
return .success(.didVerify(.failure(error.localizedDescription))) return .success(.didVerify(.failure(error.localizedDescription)))
} }
} }
......
...@@ -45,8 +45,14 @@ final class VerifyContactFeatureTests: XCTestCase { ...@@ -45,8 +45,14 @@ final class VerifyContactFeatureTests: XCTestCase {
} }
XCTAssertNoDifference(didVerifyContact, [contact]) XCTAssertNoDifference(didVerifyContact, [contact])
XCTAssertNoDifference(didBulkUpdateContactsWithQuery, [.init(id: [contactId])]) XCTAssertNoDifference(didBulkUpdateContactsWithQuery, [
XCTAssertNoDifference(didBulkUpdateContactsWithAssignments, [.init(authStatus: .verified)]) .init(id: [contactId]),
.init(id: [contactId]),
])
XCTAssertNoDifference(didBulkUpdateContactsWithAssignments, [
.init(authStatus: .verificationInProgress),
.init(authStatus: .verified)
])
store.receive(.didVerify(.success(true))) { store.receive(.didVerify(.success(true))) {
$0.isVerifying = false $0.isVerifying = false
...@@ -93,8 +99,14 @@ final class VerifyContactFeatureTests: XCTestCase { ...@@ -93,8 +99,14 @@ final class VerifyContactFeatureTests: XCTestCase {
} }
XCTAssertNoDifference(didVerifyContact, [contact]) XCTAssertNoDifference(didVerifyContact, [contact])
XCTAssertNoDifference(didBulkUpdateContactsWithQuery, [.init(id: [contactId])]) XCTAssertNoDifference(didBulkUpdateContactsWithQuery, [
XCTAssertNoDifference(didBulkUpdateContactsWithAssignments, [.init(authStatus: .verificationFailed)]) .init(id: [contactId]),
.init(id: [contactId]),
])
XCTAssertNoDifference(didBulkUpdateContactsWithAssignments, [
.init(authStatus: .verificationInProgress),
.init(authStatus: .verificationFailed),
])
store.receive(.didVerify(.success(false))) { store.receive(.didVerify(.success(false))) {
$0.isVerifying = false $0.isVerifying = false
...@@ -103,9 +115,13 @@ final class VerifyContactFeatureTests: XCTestCase { ...@@ -103,9 +115,13 @@ final class VerifyContactFeatureTests: XCTestCase {
} }
func testVerifyFailure() { 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( let store = TestStore(
initialState: VerifyContactState( initialState: VerifyContactState(
contact: .unimplemented("contact-data".data(using: .utf8)!) contact: contact
), ),
reducer: verifyContactReducer, reducer: verifyContactReducer,
environment: .unimplemented environment: .unimplemented
...@@ -114,15 +130,36 @@ final class VerifyContactFeatureTests: XCTestCase { ...@@ -114,15 +130,36 @@ final class VerifyContactFeatureTests: XCTestCase {
struct Failure: Error {} struct Failure: Error {}
let error = Failure() let error = Failure()
var didBulkUpdateContactsWithQuery: [XXModels.Contact.Query] = []
var didBulkUpdateContactsWithAssignments: [XXModels.Contact.Assignments] = []
store.environment.mainQueue = .immediate store.environment.mainQueue = .immediate
store.environment.bgQueue = .immediate store.environment.bgQueue = .immediate
store.environment.messenger.verifyContact.run = { _ in throw error } 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) { store.send(.verifyTapped) {
$0.isVerifying = true $0.isVerifying = true
$0.result = nil $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))) { store.receive(.didVerify(.failure(error.localizedDescription))) {
$0.isVerifying = false $0.isVerifying = false
$0.result = .failure(error.localizedDescription) $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