From 145805a662581c519f93ef27a730e31d5f796fe9 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Mon, 12 Sep 2022 13:01:57 +0200 Subject: [PATCH] Update auth status when confirming request --- .../ConfirmRequestFeature.swift | 14 ++++++--- .../ConfirmRequestFeatureTests.swift | 31 +++++++++++++++++-- 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/Examples/xx-messenger/Sources/ConfirmRequestFeature/ConfirmRequestFeature.swift b/Examples/xx-messenger/Sources/ConfirmRequestFeature/ConfirmRequestFeature.swift index b18f9da9..7cc40da0 100644 --- a/Examples/xx-messenger/Sources/ConfirmRequestFeature/ConfirmRequestFeature.swift +++ b/Examples/xx-messenger/Sources/ConfirmRequestFeature/ConfirmRequestFeature.swift @@ -69,16 +69,20 @@ public let confirmRequestReducer = Reducer<ConfirmRequestState, ConfirmRequestAc state.isConfirming = true state.result = nil return Effect.result { [state] in + func updateStatus(_ status: XXModels.Contact.AuthStatus) throws { + try env.db().bulkUpdateContacts.callAsFunction( + .init(id: [try state.contact.getId()]), + .init(authStatus: status) + ) + } do { + try updateStatus(.confirming) let e2e = try env.messenger.e2e.tryGet() _ = try e2e.confirmReceivedRequest(partner: state.contact) - let contactId = try state.contact.getId() - try env.db().bulkUpdateContacts.callAsFunction( - .init(id: [contactId]), - .init(authStatus: .friend) - ) + try updateStatus(.friend) return .success(.didConfirm(.success)) } catch { + try? updateStatus(.confirmationFailed) return .success(.didConfirm(.failure(error.localizedDescription))) } } diff --git a/Examples/xx-messenger/Tests/ConfirmRequestFeatureTests/ConfirmRequestFeatureTests.swift b/Examples/xx-messenger/Tests/ConfirmRequestFeatureTests/ConfirmRequestFeatureTests.swift index 2686d645..8dea06e1 100644 --- a/Examples/xx-messenger/Tests/ConfirmRequestFeatureTests/ConfirmRequestFeatureTests.swift +++ b/Examples/xx-messenger/Tests/ConfirmRequestFeatureTests/ConfirmRequestFeatureTests.swift @@ -49,8 +49,14 @@ final class ConfirmRequestFeatureTests: XCTestCase { } XCTAssertNoDifference(didConfirmRequestFromContact, [contact]) - XCTAssertNoDifference(didBulkUpdateContactsWithQuery, [.init(id: [contactId])]) - XCTAssertNoDifference(didBulkUpdateContactsWithAssignments, [.init(authStatus: .friend)]) + XCTAssertNoDifference(didBulkUpdateContactsWithQuery, [ + .init(id: [contactId]), + .init(id: [contactId]), + ]) + XCTAssertNoDifference(didBulkUpdateContactsWithAssignments, [ + .init(authStatus: .confirming), + .init(authStatus: .friend), + ]) store.receive(.didConfirm(.success)) { $0.isConfirming = false @@ -74,6 +80,9 @@ final class ConfirmRequestFeatureTests: 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.e2e.get = { @@ -81,12 +90,30 @@ final class ConfirmRequestFeatureTests: XCTestCase { e2e.confirmReceivedRequest.run = { _ in throw error } return e2e } + 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(.confirmTapped) { $0.isConfirming = true $0.result = nil } + XCTAssertNoDifference(didBulkUpdateContactsWithQuery, [ + .init(id: [contactId]), + .init(id: [contactId]), + ]) + XCTAssertNoDifference(didBulkUpdateContactsWithAssignments, [ + .init(authStatus: .confirming), + .init(authStatus: .confirmationFailed), + ]) + store.receive(.didConfirm(.failure(error.localizedDescription))) { $0.isConfirming = false $0.result = .failure(error.localizedDescription) -- GitLab