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
......@@ -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)))
}
}
......
......@@ -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)
......
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