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

Update db contact after checking auth status

parent 5152e13d
No related branches found
No related tags found
2 merge requests!102Release 1.0.0,!81Messenger example - contact authorization improvements
......@@ -102,6 +102,7 @@ let package = Package(
.target(
name: "CheckContactAuthFeature",
dependencies: [
.target(name: "AppCore"),
.product(name: "ComposableArchitecture", package: "swift-composable-architecture"),
.product(name: "XXClient", package: "elixxir-dapps-sdk-swift"),
.product(name: "XXMessengerClient", package: "elixxir-dapps-sdk-swift"),
......
......@@ -54,6 +54,7 @@ extension AppEnvironment {
checkAuth: {
CheckContactAuthEnvironment(
messenger: messenger,
db: dbManager.getDB,
mainQueue: mainQueue,
bgQueue: bgQueue
)
......
import AppCore
import ComposableArchitecture
import Foundation
import XCTestDynamicOverlay
import XXClient
import XXMessengerClient
import XXModels
public struct CheckContactAuthState: Equatable {
public enum Result: Equatable {
......@@ -11,7 +13,7 @@ public struct CheckContactAuthState: Equatable {
}
public init(
contact: Contact,
contact: XXClient.Contact,
isChecking: Bool = false,
result: Result? = nil
) {
......@@ -20,7 +22,7 @@ public struct CheckContactAuthState: Equatable {
self.result = result
}
public var contact: Contact
public var contact: XXClient.Contact
public var isChecking: Bool
public var result: Result?
}
......@@ -33,15 +35,18 @@ public enum CheckContactAuthAction: Equatable {
public struct CheckContactAuthEnvironment {
public init(
messenger: Messenger,
db: DBManagerGetDB,
mainQueue: AnySchedulerOf<DispatchQueue>,
bgQueue: AnySchedulerOf<DispatchQueue>
) {
self.messenger = messenger
self.db = db
self.mainQueue = mainQueue
self.bgQueue = bgQueue
}
public var messenger: Messenger
public var db: DBManagerGetDB
public var mainQueue: AnySchedulerOf<DispatchQueue>
public var bgQueue: AnySchedulerOf<DispatchQueue>
}
......@@ -50,6 +55,7 @@ public struct CheckContactAuthEnvironment {
extension CheckContactAuthEnvironment {
public static let unimplemented = CheckContactAuthEnvironment(
messenger: .unimplemented,
db: .unimplemented,
mainQueue: .unimplemented,
bgQueue: .unimplemented
)
......@@ -67,6 +73,10 @@ public let checkContactAuthReducer = Reducer<CheckContactAuthState, CheckContact
let e2e = try env.messenger.e2e.tryGet()
let contactId = try state.contact.getId()
let result = try e2e.hasAuthenticatedChannel(partnerId: contactId)
try env.db().bulkUpdateContacts.callAsFunction(
.init(id: [contactId]),
.init(authStatus: result ? .friend : .stranger)
)
return .success(.didCheck(.success(result)))
} catch {
return .success(.didCheck(.failure(error.localizedDescription)))
......
import ComposableArchitecture
import CustomDump
import XCTest
import XXClient
import XXModels
@testable import CheckContactAuthFeature
final class CheckContactAuthFeatureTests: XCTestCase {
func testCheck() {
var contact = Contact.unimplemented("contact-data".data(using: .utf8)!)
var contact = XXClient.Contact.unimplemented("contact-data".data(using: .utf8)!)
let contactId = "contact-id".data(using: .utf8)!
contact.getIdFromContact.run = { _ in contactId }
......@@ -18,6 +20,8 @@ final class CheckContactAuthFeatureTests: XCTestCase {
)
var didCheckPartnerId: [Data] = []
var didBulkUpdateContactsWithQuery: [XXModels.Contact.Query] = []
var didBulkUpdateContactsWithAssignments: [XXModels.Contact.Assignments] = []
store.environment.mainQueue = .immediate
store.environment.bgQueue = .immediate
......@@ -29,12 +33,25 @@ final class CheckContactAuthFeatureTests: XCTestCase {
}
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(.checkTapped) {
$0.isChecking = true
$0.result = nil
}
XCTAssertNoDifference(didCheckPartnerId, [contactId])
XCTAssertNoDifference(didBulkUpdateContactsWithQuery, [.init(id: [contactId])])
XCTAssertNoDifference(didBulkUpdateContactsWithAssignments, [.init(authStatus: .friend)])
store.receive(.didCheck(.success(true))) {
$0.isChecking = false
$0.result = .success(true)
......@@ -42,7 +59,7 @@ final class CheckContactAuthFeatureTests: XCTestCase {
}
func testCheckNoConnection() {
var contact = Contact.unimplemented("contact-data".data(using: .utf8)!)
var contact = XXClient.Contact.unimplemented("contact-data".data(using: .utf8)!)
let contactId = "contact-id".data(using: .utf8)!
contact.getIdFromContact.run = { _ in contactId }
......@@ -54,19 +71,39 @@ final class CheckContactAuthFeatureTests: XCTestCase {
environment: .unimplemented
)
var didCheckPartnerId: [Data] = []
var didBulkUpdateContactsWithQuery: [XXModels.Contact.Query] = []
var didBulkUpdateContactsWithAssignments: [XXModels.Contact.Assignments] = []
store.environment.mainQueue = .immediate
store.environment.bgQueue = .immediate
store.environment.messenger.e2e.get = {
var e2e: E2E = .unimplemented
e2e.hasAuthenticatedChannel.run = { _ in false }
e2e.hasAuthenticatedChannel.run = { partnerId in
didCheckPartnerId.append(partnerId)
return false
}
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(.checkTapped) {
$0.isChecking = true
$0.result = nil
}
XCTAssertNoDifference(didCheckPartnerId, [contactId])
XCTAssertNoDifference(didBulkUpdateContactsWithQuery, [.init(id: [contactId])])
XCTAssertNoDifference(didBulkUpdateContactsWithAssignments, [.init(authStatus: .stranger)])
store.receive(.didCheck(.success(false))) {
$0.isChecking = false
$0.result = .success(false)
......@@ -74,7 +111,7 @@ final class CheckContactAuthFeatureTests: XCTestCase {
}
func testCheckFailure() {
var contact = Contact.unimplemented("contact-data".data(using: .utf8)!)
var contact = XXClient.Contact.unimplemented("contact-data".data(using: .utf8)!)
let contactId = "contact-id".data(using: .utf8)!
contact.getIdFromContact.run = { _ in contactId }
......
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