From 64847678745b17b433ae399172cb15dd15d0ff14 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Mon, 12 Sep 2022 12:58:16 +0200 Subject: [PATCH] Update auth status when verifying contact --- .../VerifyContactFeature.swift | 14 ++++-- .../VerifyContactFeatureTests.swift | 47 +++++++++++++++++-- 2 files changed, 51 insertions(+), 10 deletions(-) diff --git a/Examples/xx-messenger/Sources/VerifyContactFeature/VerifyContactFeature.swift b/Examples/xx-messenger/Sources/VerifyContactFeature/VerifyContactFeature.swift index 8a69a072..1663d155 100644 --- a/Examples/xx-messenger/Sources/VerifyContactFeature/VerifyContactFeature.swift +++ b/Examples/xx-messenger/Sources/VerifyContactFeature/VerifyContactFeature.swift @@ -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))) } } diff --git a/Examples/xx-messenger/Tests/VerifyContactFeatureTests/VerifyContactFeatureTests.swift b/Examples/xx-messenger/Tests/VerifyContactFeatureTests/VerifyContactFeatureTests.swift index 6ca82b1e..97f8b428 100644 --- a/Examples/xx-messenger/Tests/VerifyContactFeatureTests/VerifyContactFeatureTests.swift +++ b/Examples/xx-messenger/Tests/VerifyContactFeatureTests/VerifyContactFeatureTests.swift @@ -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) -- GitLab