From d7a739086cfbf2dfd260474907f566e854b3ce6a Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Mon, 12 Sep 2022 00:34:07 +0200 Subject: [PATCH] Update db contact after checking auth status --- Examples/xx-messenger/Package.swift | 1 + .../AppFeature/AppEnvironment+Live.swift | 1 + .../CheckContactAuthFeature.swift | 14 +++++- .../CheckContactAuthFeatureTests.swift | 45 +++++++++++++++++-- 4 files changed, 55 insertions(+), 6 deletions(-) diff --git a/Examples/xx-messenger/Package.swift b/Examples/xx-messenger/Package.swift index c2da9978..9c44e441 100644 --- a/Examples/xx-messenger/Package.swift +++ b/Examples/xx-messenger/Package.swift @@ -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"), diff --git a/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift b/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift index ae1da8b9..fa3774e8 100644 --- a/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift +++ b/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift @@ -54,6 +54,7 @@ extension AppEnvironment { checkAuth: { CheckContactAuthEnvironment( messenger: messenger, + db: dbManager.getDB, mainQueue: mainQueue, bgQueue: bgQueue ) diff --git a/Examples/xx-messenger/Sources/CheckContactAuthFeature/CheckContactAuthFeature.swift b/Examples/xx-messenger/Sources/CheckContactAuthFeature/CheckContactAuthFeature.swift index 119ff27a..1f768be8 100644 --- a/Examples/xx-messenger/Sources/CheckContactAuthFeature/CheckContactAuthFeature.swift +++ b/Examples/xx-messenger/Sources/CheckContactAuthFeature/CheckContactAuthFeature.swift @@ -1,8 +1,10 @@ +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))) diff --git a/Examples/xx-messenger/Tests/CheckContactAuthFeatureTests/CheckContactAuthFeatureTests.swift b/Examples/xx-messenger/Tests/CheckContactAuthFeatureTests/CheckContactAuthFeatureTests.swift index 1c36e33e..95f5a807 100644 --- a/Examples/xx-messenger/Tests/CheckContactAuthFeatureTests/CheckContactAuthFeatureTests.swift +++ b/Examples/xx-messenger/Tests/CheckContactAuthFeatureTests/CheckContactAuthFeatureTests.swift @@ -1,11 +1,13 @@ 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 } -- GitLab