diff --git a/Examples/xx-messenger/Package.swift b/Examples/xx-messenger/Package.swift index 4dad2c2bf992cff93e37f2f6f7dcfd24356602c9..d863e016e9f28069ddcc36104793639aef96be33 100644 --- a/Examples/xx-messenger/Package.swift +++ b/Examples/xx-messenger/Package.swift @@ -119,10 +119,8 @@ let package = Package( .target( name: "BackupFeature", dependencies: [ - .target(name: "AppCore"), .product(name: "ComposableArchitecture", package: "swift-composable-architecture"), .product(name: "XXMessengerClient", package: "elixxir-dapps-sdk-swift"), - .product(name: "XXModels", package: "client-ios-db"), ], swiftSettings: swiftSettings ), diff --git a/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift b/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift index cd5d752e89186c7c417cc5696ccf2e1a1367b57e..ce52387f7624f3d3583f0be4e95571926327b754 100644 --- a/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift +++ b/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift @@ -164,7 +164,6 @@ extension AppEnvironment { backup: { BackupEnvironment( messenger: messenger, - db: dbManager.getDB, backupStorage: backupStorage, mainQueue: mainQueue, bgQueue: bgQueue diff --git a/Examples/xx-messenger/Sources/BackupFeature/BackupFeature.swift b/Examples/xx-messenger/Sources/BackupFeature/BackupFeature.swift index 431dd8ea7c546a4ac05715f6a90c59ddde85a04b..8010f17d1d0727c4621841dd124a93dcda0e0b5d 100644 --- a/Examples/xx-messenger/Sources/BackupFeature/BackupFeature.swift +++ b/Examples/xx-messenger/Sources/BackupFeature/BackupFeature.swift @@ -1,10 +1,8 @@ -import AppCore import Combine import ComposableArchitecture import Foundation import XXClient import XXMessengerClient -import XXModels public struct BackupState: Equatable { public enum Field: String, Hashable { @@ -12,8 +10,7 @@ public struct BackupState: Equatable { } public enum Error: String, Swift.Error, Equatable { - case dbContactNotFound - case dbContactUsernameMissing + case contactUsernameMissing } public init( @@ -71,20 +68,17 @@ public enum BackupAction: Equatable, BindableAction { public struct BackupEnvironment { public init( messenger: Messenger, - db: DBManagerGetDB, backupStorage: BackupStorage, mainQueue: AnySchedulerOf<DispatchQueue>, bgQueue: AnySchedulerOf<DispatchQueue> ) { self.messenger = messenger - self.db = db self.backupStorage = backupStorage self.mainQueue = mainQueue self.bgQueue = bgQueue } public var messenger: Messenger - public var db: DBManagerGetDB public var backupStorage: BackupStorage public var mainQueue: AnySchedulerOf<DispatchQueue> public var bgQueue: AnySchedulerOf<DispatchQueue> @@ -94,7 +88,6 @@ public struct BackupEnvironment { extension BackupEnvironment { public static let unimplemented = BackupEnvironment( messenger: .unimplemented, - db: .unimplemented, backupStorage: .unimplemented, mainQueue: .unimplemented, bgQueue: .unimplemented @@ -129,15 +122,9 @@ public let backupReducer = Reducer<BackupState, BackupAction, BackupEnvironment> state.focusedField = nil return Effect.run { [state] subscriber in do { - let e2e: E2E = try env.messenger.e2e.tryGet() - let contactID = try e2e.getContact().getId() - let db = try env.db() - let query = XXModels.Contact.Query(id: [contactID]) - guard let contact = try db.fetchContacts(query).first else { - throw BackupState.Error.dbContactNotFound - } - guard let username = contact.username else { - throw BackupState.Error.dbContactUsernameMissing + let contact = try env.messenger.myContact(includeFacts: .types([.username])) + guard let username = try contact.getFact(.username)?.value else { + throw BackupState.Error.contactUsernameMissing } try env.messenger.startBackup( password: state.passphrase, diff --git a/Examples/xx-messenger/Tests/BackupFeatureTests/BackupFeatureTests.swift b/Examples/xx-messenger/Tests/BackupFeatureTests/BackupFeatureTests.swift index b916ddc0719ad73eaf9c0fa04eb6ab52250a0350..d0c69eb87e2efea29f635fce84656b04d2e35cba 100644 --- a/Examples/xx-messenger/Tests/BackupFeatureTests/BackupFeatureTests.swift +++ b/Examples/xx-messenger/Tests/BackupFeatureTests/BackupFeatureTests.swift @@ -2,7 +2,6 @@ import ComposableArchitecture import XCTest import XXClient import XXMessengerClient -import XXModels @testable import BackupFeature final class BackupFeatureTests: XCTestCase { @@ -65,11 +64,7 @@ final class BackupFeatureTests: XCTestCase { func testStartBackup() { var actions: [Action]! var isBackupRunning: [Bool] = [true] - let contactID = "contact-id".data(using: .utf8)! - let dbContact = XXModels.Contact( - id: contactID, - username: "db-contact-username" - ) + let username = "test-username" let passphrase = "backup-password" let store = TestStore( @@ -79,26 +74,18 @@ final class BackupFeatureTests: XCTestCase { ) store.environment.mainQueue = .immediate store.environment.bgQueue = .immediate + store.environment.messenger.myContact.run = { includeFacts in + actions.append(.didGetMyContact(includingFacts: includeFacts)) + var contact = Contact.unimplemented("contact-data".data(using: .utf8)!) + contact.getFactsFromContact.run = { _ in [Fact(type: .username, value: username)] } + return contact + } store.environment.messenger.startBackup.run = { passphrase, params in actions.append(.didStartBackup(passphrase: passphrase, params: params)) } store.environment.messenger.isBackupRunning.run = { isBackupRunning.removeFirst() } - store.environment.messenger.e2e.get = { - var e2e: E2E = .unimplemented - e2e.getContact.run = { - var contact: XXClient.Contact = .unimplemented(Data()) - contact.getIdFromContact.run = { _ in contactID } - return contact - } - return e2e - } - store.environment.db.run = { - var db: Database = .unimplemented - db.fetchContacts.run = { _ in return [dbContact] } - return db - } actions = [] store.send(.set(\.$focusedField, .passphrase)) { @@ -117,9 +104,12 @@ final class BackupFeatureTests: XCTestCase { } XCTAssertNoDifference(actions, [ + .didGetMyContact( + includingFacts: .types([.username]) + ), .didStartBackup( passphrase: passphrase, - params: .init(username: dbContact.username!) + params: .init(username: username) ) ]) @@ -130,9 +120,8 @@ final class BackupFeatureTests: XCTestCase { } } - func testStartBackupWithoutDbContact() { + func testStartBackupWithoutContactUsername() { var isBackupRunning: [Bool] = [false] - let contactID = "contact-id".data(using: .utf8)! let store = TestStore( initialState: BackupState( @@ -143,29 +132,20 @@ final class BackupFeatureTests: XCTestCase { ) store.environment.mainQueue = .immediate store.environment.bgQueue = .immediate + store.environment.messenger.myContact.run = { _ in + var contact = Contact.unimplemented("contact-data".data(using: .utf8)!) + contact.getFactsFromContact.run = { _ in [] } + return contact + } store.environment.messenger.isBackupRunning.run = { isBackupRunning.removeFirst() } - store.environment.messenger.e2e.get = { - var e2e: E2E = .unimplemented - e2e.getContact.run = { - var contact: XXClient.Contact = .unimplemented(Data()) - contact.getIdFromContact.run = { _ in contactID } - return contact - } - return e2e - } - store.environment.db.run = { - var db: Database = .unimplemented - db.fetchContacts.run = { _ in [] } - return db - } store.send(.startTapped) { $0.isStarting = true } - let failure = BackupState.Error.dbContactNotFound + let failure = BackupState.Error.contactUsernameMissing store.receive(.didStart(failure: failure as NSError)) { $0.isRunning = false $0.isStarting = false @@ -173,13 +153,10 @@ final class BackupFeatureTests: XCTestCase { } } - func testStartBackupWithoutDbContactUsername() { + func testStartBackupMyContactFailure() { + struct Failure: Error {} + let failure = Failure() var isBackupRunning: [Bool] = [false] - let contactID = "contact-id".data(using: .utf8)! - let dbContact = XXModels.Contact( - id: contactID, - username: nil - ) let store = TestStore( initialState: BackupState( @@ -190,29 +167,15 @@ final class BackupFeatureTests: XCTestCase { ) store.environment.mainQueue = .immediate store.environment.bgQueue = .immediate + store.environment.messenger.myContact.run = { _ in throw failure } store.environment.messenger.isBackupRunning.run = { isBackupRunning.removeFirst() } - store.environment.messenger.e2e.get = { - var e2e: E2E = .unimplemented - e2e.getContact.run = { - var contact: XXClient.Contact = .unimplemented(Data()) - contact.getIdFromContact.run = { _ in contactID } - return contact - } - return e2e - } - store.environment.db.run = { - var db: Database = .unimplemented - db.fetchContacts.run = { _ in [dbContact] } - return db - } store.send(.startTapped) { $0.isStarting = true } - let failure = BackupState.Error.dbContactUsernameMissing store.receive(.didStart(failure: failure as NSError)) { $0.isRunning = false $0.isStarting = false @@ -220,15 +183,10 @@ final class BackupFeatureTests: XCTestCase { } } - func testStartBackupFailure() { + func testStartBackupStartFailure() { struct Failure: Error {} let failure = Failure() var isBackupRunning: [Bool] = [false] - let contactID = "contact-id".data(using: .utf8)! - let dbContact = XXModels.Contact( - id: contactID, - username: "db-contact-username" - ) let store = TestStore( initialState: BackupState( @@ -239,26 +197,17 @@ final class BackupFeatureTests: XCTestCase { ) store.environment.mainQueue = .immediate store.environment.bgQueue = .immediate + store.environment.messenger.myContact.run = { _ in + var contact = Contact.unimplemented("data".data(using: .utf8)!) + contact.getFactsFromContact.run = { _ in [Fact(type: .username, value: "username")] } + return contact + } store.environment.messenger.startBackup.run = { _, _ in throw failure } store.environment.messenger.isBackupRunning.run = { isBackupRunning.removeFirst() } - store.environment.messenger.e2e.get = { - var e2e: E2E = .unimplemented - e2e.getContact.run = { - var contact: XXClient.Contact = .unimplemented(Data()) - contact.getIdFromContact.run = { _ in contactID } - return contact - } - return e2e - } - store.environment.db.run = { - var db: Database = .unimplemented - db.fetchContacts.run = { _ in return [dbContact] } - return db - } store.send(.startTapped) { $0.isStarting = true @@ -463,5 +412,5 @@ private enum Action: Equatable { case didResumeBackup case didStopBackup case didRemoveBackup - case didFetchContacts(XXModels.Contact.Query) + case didGetMyContact(includingFacts: MessengerMyContact.IncludeFacts?) }