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

Update auth status when confirming request

parent 64847678
No related branches found
No related tags found
2 merge requests!102Release 1.0.0,!81Messenger example - contact authorization improvements
This commit is part of merge request !81. Comments created here will be created in the context of that merge request.
...@@ -69,16 +69,20 @@ public let confirmRequestReducer = Reducer<ConfirmRequestState, ConfirmRequestAc ...@@ -69,16 +69,20 @@ public let confirmRequestReducer = Reducer<ConfirmRequestState, ConfirmRequestAc
state.isConfirming = true state.isConfirming = true
state.result = nil state.result = nil
return Effect.result { [state] in 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 { do {
try updateStatus(.confirming)
let e2e = try env.messenger.e2e.tryGet() let e2e = try env.messenger.e2e.tryGet()
_ = try e2e.confirmReceivedRequest(partner: state.contact) _ = try e2e.confirmReceivedRequest(partner: state.contact)
let contactId = try state.contact.getId() try updateStatus(.friend)
try env.db().bulkUpdateContacts.callAsFunction(
.init(id: [contactId]),
.init(authStatus: .friend)
)
return .success(.didConfirm(.success)) return .success(.didConfirm(.success))
} catch { } catch {
try? updateStatus(.confirmationFailed)
return .success(.didConfirm(.failure(error.localizedDescription))) return .success(.didConfirm(.failure(error.localizedDescription)))
} }
} }
......
...@@ -49,8 +49,14 @@ final class ConfirmRequestFeatureTests: XCTestCase { ...@@ -49,8 +49,14 @@ final class ConfirmRequestFeatureTests: XCTestCase {
} }
XCTAssertNoDifference(didConfirmRequestFromContact, [contact]) XCTAssertNoDifference(didConfirmRequestFromContact, [contact])
XCTAssertNoDifference(didBulkUpdateContactsWithQuery, [.init(id: [contactId])]) XCTAssertNoDifference(didBulkUpdateContactsWithQuery, [
XCTAssertNoDifference(didBulkUpdateContactsWithAssignments, [.init(authStatus: .friend)]) .init(id: [contactId]),
.init(id: [contactId]),
])
XCTAssertNoDifference(didBulkUpdateContactsWithAssignments, [
.init(authStatus: .confirming),
.init(authStatus: .friend),
])
store.receive(.didConfirm(.success)) { store.receive(.didConfirm(.success)) {
$0.isConfirming = false $0.isConfirming = false
...@@ -74,6 +80,9 @@ final class ConfirmRequestFeatureTests: XCTestCase { ...@@ -74,6 +80,9 @@ final class ConfirmRequestFeatureTests: 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.e2e.get = { store.environment.messenger.e2e.get = {
...@@ -81,12 +90,30 @@ final class ConfirmRequestFeatureTests: XCTestCase { ...@@ -81,12 +90,30 @@ final class ConfirmRequestFeatureTests: XCTestCase {
e2e.confirmReceivedRequest.run = { _ in throw error } e2e.confirmReceivedRequest.run = { _ in throw error }
return e2e 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) { store.send(.confirmTapped) {
$0.isConfirming = true $0.isConfirming = true
$0.result = nil $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))) { store.receive(.didConfirm(.failure(error.localizedDescription))) {
$0.isConfirming = false $0.isConfirming = 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.
Please register or to comment