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

Use MessengerMyContact in BackupFeature

parent d6d7d10f
No related branches found
No related tags found
2 merge requests!112Restore contacts from backup,!102Release 1.0.0
...@@ -119,10 +119,8 @@ let package = Package( ...@@ -119,10 +119,8 @@ let package = Package(
.target( .target(
name: "BackupFeature", name: "BackupFeature",
dependencies: [ dependencies: [
.target(name: "AppCore"),
.product(name: "ComposableArchitecture", package: "swift-composable-architecture"), .product(name: "ComposableArchitecture", package: "swift-composable-architecture"),
.product(name: "XXMessengerClient", package: "elixxir-dapps-sdk-swift"), .product(name: "XXMessengerClient", package: "elixxir-dapps-sdk-swift"),
.product(name: "XXModels", package: "client-ios-db"),
], ],
swiftSettings: swiftSettings swiftSettings: swiftSettings
), ),
......
...@@ -164,7 +164,6 @@ extension AppEnvironment { ...@@ -164,7 +164,6 @@ extension AppEnvironment {
backup: { backup: {
BackupEnvironment( BackupEnvironment(
messenger: messenger, messenger: messenger,
db: dbManager.getDB,
backupStorage: backupStorage, backupStorage: backupStorage,
mainQueue: mainQueue, mainQueue: mainQueue,
bgQueue: bgQueue bgQueue: bgQueue
......
import AppCore
import Combine import Combine
import ComposableArchitecture import ComposableArchitecture
import Foundation import Foundation
import XXClient import XXClient
import XXMessengerClient import XXMessengerClient
import XXModels
public struct BackupState: Equatable { public struct BackupState: Equatable {
public enum Field: String, Hashable { public enum Field: String, Hashable {
...@@ -12,8 +10,7 @@ public struct BackupState: Equatable { ...@@ -12,8 +10,7 @@ public struct BackupState: Equatable {
} }
public enum Error: String, Swift.Error, Equatable { public enum Error: String, Swift.Error, Equatable {
case dbContactNotFound case contactUsernameMissing
case dbContactUsernameMissing
} }
public init( public init(
...@@ -71,20 +68,17 @@ public enum BackupAction: Equatable, BindableAction { ...@@ -71,20 +68,17 @@ public enum BackupAction: Equatable, BindableAction {
public struct BackupEnvironment { public struct BackupEnvironment {
public init( public init(
messenger: Messenger, messenger: Messenger,
db: DBManagerGetDB,
backupStorage: BackupStorage, backupStorage: BackupStorage,
mainQueue: AnySchedulerOf<DispatchQueue>, mainQueue: AnySchedulerOf<DispatchQueue>,
bgQueue: AnySchedulerOf<DispatchQueue> bgQueue: AnySchedulerOf<DispatchQueue>
) { ) {
self.messenger = messenger self.messenger = messenger
self.db = db
self.backupStorage = backupStorage self.backupStorage = backupStorage
self.mainQueue = mainQueue self.mainQueue = mainQueue
self.bgQueue = bgQueue self.bgQueue = bgQueue
} }
public var messenger: Messenger public var messenger: Messenger
public var db: DBManagerGetDB
public var backupStorage: BackupStorage public var backupStorage: BackupStorage
public var mainQueue: AnySchedulerOf<DispatchQueue> public var mainQueue: AnySchedulerOf<DispatchQueue>
public var bgQueue: AnySchedulerOf<DispatchQueue> public var bgQueue: AnySchedulerOf<DispatchQueue>
...@@ -94,7 +88,6 @@ public struct BackupEnvironment { ...@@ -94,7 +88,6 @@ public struct BackupEnvironment {
extension BackupEnvironment { extension BackupEnvironment {
public static let unimplemented = BackupEnvironment( public static let unimplemented = BackupEnvironment(
messenger: .unimplemented, messenger: .unimplemented,
db: .unimplemented,
backupStorage: .unimplemented, backupStorage: .unimplemented,
mainQueue: .unimplemented, mainQueue: .unimplemented,
bgQueue: .unimplemented bgQueue: .unimplemented
...@@ -129,15 +122,9 @@ public let backupReducer = Reducer<BackupState, BackupAction, BackupEnvironment> ...@@ -129,15 +122,9 @@ public let backupReducer = Reducer<BackupState, BackupAction, BackupEnvironment>
state.focusedField = nil state.focusedField = nil
return Effect.run { [state] subscriber in return Effect.run { [state] subscriber in
do { do {
let e2e: E2E = try env.messenger.e2e.tryGet() let contact = try env.messenger.myContact(includeFacts: .types([.username]))
let contactID = try e2e.getContact().getId() guard let username = try contact.getFact(.username)?.value else {
let db = try env.db() throw BackupState.Error.contactUsernameMissing
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
} }
try env.messenger.startBackup( try env.messenger.startBackup(
password: state.passphrase, password: state.passphrase,
......
...@@ -2,7 +2,6 @@ import ComposableArchitecture ...@@ -2,7 +2,6 @@ import ComposableArchitecture
import XCTest import XCTest
import XXClient import XXClient
import XXMessengerClient import XXMessengerClient
import XXModels
@testable import BackupFeature @testable import BackupFeature
final class BackupFeatureTests: XCTestCase { final class BackupFeatureTests: XCTestCase {
...@@ -65,11 +64,7 @@ final class BackupFeatureTests: XCTestCase { ...@@ -65,11 +64,7 @@ final class BackupFeatureTests: XCTestCase {
func testStartBackup() { func testStartBackup() {
var actions: [Action]! var actions: [Action]!
var isBackupRunning: [Bool] = [true] var isBackupRunning: [Bool] = [true]
let contactID = "contact-id".data(using: .utf8)! let username = "test-username"
let dbContact = XXModels.Contact(
id: contactID,
username: "db-contact-username"
)
let passphrase = "backup-password" let passphrase = "backup-password"
let store = TestStore( let store = TestStore(
...@@ -79,26 +74,18 @@ final class BackupFeatureTests: XCTestCase { ...@@ -79,26 +74,18 @@ final class BackupFeatureTests: XCTestCase {
) )
store.environment.mainQueue = .immediate store.environment.mainQueue = .immediate
store.environment.bgQueue = .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 store.environment.messenger.startBackup.run = { passphrase, params in
actions.append(.didStartBackup(passphrase: passphrase, params: params)) actions.append(.didStartBackup(passphrase: passphrase, params: params))
} }
store.environment.messenger.isBackupRunning.run = { store.environment.messenger.isBackupRunning.run = {
isBackupRunning.removeFirst() 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 = [] actions = []
store.send(.set(\.$focusedField, .passphrase)) { store.send(.set(\.$focusedField, .passphrase)) {
...@@ -117,9 +104,12 @@ final class BackupFeatureTests: XCTestCase { ...@@ -117,9 +104,12 @@ final class BackupFeatureTests: XCTestCase {
} }
XCTAssertNoDifference(actions, [ XCTAssertNoDifference(actions, [
.didGetMyContact(
includingFacts: .types([.username])
),
.didStartBackup( .didStartBackup(
passphrase: passphrase, passphrase: passphrase,
params: .init(username: dbContact.username!) params: .init(username: username)
) )
]) ])
...@@ -130,9 +120,8 @@ final class BackupFeatureTests: XCTestCase { ...@@ -130,9 +120,8 @@ final class BackupFeatureTests: XCTestCase {
} }
} }
func testStartBackupWithoutDbContact() { func testStartBackupWithoutContactUsername() {
var isBackupRunning: [Bool] = [false] var isBackupRunning: [Bool] = [false]
let contactID = "contact-id".data(using: .utf8)!
let store = TestStore( let store = TestStore(
initialState: BackupState( initialState: BackupState(
...@@ -143,29 +132,20 @@ final class BackupFeatureTests: XCTestCase { ...@@ -143,29 +132,20 @@ final class BackupFeatureTests: XCTestCase {
) )
store.environment.mainQueue = .immediate store.environment.mainQueue = .immediate
store.environment.bgQueue = .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 = { store.environment.messenger.isBackupRunning.run = {
isBackupRunning.removeFirst() 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) { store.send(.startTapped) {
$0.isStarting = true $0.isStarting = true
} }
let failure = BackupState.Error.dbContactNotFound let failure = BackupState.Error.contactUsernameMissing
store.receive(.didStart(failure: failure as NSError)) { store.receive(.didStart(failure: failure as NSError)) {
$0.isRunning = false $0.isRunning = false
$0.isStarting = false $0.isStarting = false
...@@ -173,13 +153,10 @@ final class BackupFeatureTests: XCTestCase { ...@@ -173,13 +153,10 @@ final class BackupFeatureTests: XCTestCase {
} }
} }
func testStartBackupWithoutDbContactUsername() { func testStartBackupMyContactFailure() {
struct Failure: Error {}
let failure = Failure()
var isBackupRunning: [Bool] = [false] var isBackupRunning: [Bool] = [false]
let contactID = "contact-id".data(using: .utf8)!
let dbContact = XXModels.Contact(
id: contactID,
username: nil
)
let store = TestStore( let store = TestStore(
initialState: BackupState( initialState: BackupState(
...@@ -190,29 +167,15 @@ final class BackupFeatureTests: XCTestCase { ...@@ -190,29 +167,15 @@ final class BackupFeatureTests: XCTestCase {
) )
store.environment.mainQueue = .immediate store.environment.mainQueue = .immediate
store.environment.bgQueue = .immediate store.environment.bgQueue = .immediate
store.environment.messenger.myContact.run = { _ in throw failure }
store.environment.messenger.isBackupRunning.run = { store.environment.messenger.isBackupRunning.run = {
isBackupRunning.removeFirst() 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) { store.send(.startTapped) {
$0.isStarting = true $0.isStarting = true
} }
let failure = BackupState.Error.dbContactUsernameMissing
store.receive(.didStart(failure: failure as NSError)) { store.receive(.didStart(failure: failure as NSError)) {
$0.isRunning = false $0.isRunning = false
$0.isStarting = false $0.isStarting = false
...@@ -220,15 +183,10 @@ final class BackupFeatureTests: XCTestCase { ...@@ -220,15 +183,10 @@ final class BackupFeatureTests: XCTestCase {
} }
} }
func testStartBackupFailure() { func testStartBackupStartFailure() {
struct Failure: Error {} struct Failure: Error {}
let failure = Failure() let failure = Failure()
var isBackupRunning: [Bool] = [false] var isBackupRunning: [Bool] = [false]
let contactID = "contact-id".data(using: .utf8)!
let dbContact = XXModels.Contact(
id: contactID,
username: "db-contact-username"
)
let store = TestStore( let store = TestStore(
initialState: BackupState( initialState: BackupState(
...@@ -239,26 +197,17 @@ final class BackupFeatureTests: XCTestCase { ...@@ -239,26 +197,17 @@ final class BackupFeatureTests: XCTestCase {
) )
store.environment.mainQueue = .immediate store.environment.mainQueue = .immediate
store.environment.bgQueue = .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 store.environment.messenger.startBackup.run = { _, _ in
throw failure throw failure
} }
store.environment.messenger.isBackupRunning.run = { store.environment.messenger.isBackupRunning.run = {
isBackupRunning.removeFirst() 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) { store.send(.startTapped) {
$0.isStarting = true $0.isStarting = true
...@@ -463,5 +412,5 @@ private enum Action: Equatable { ...@@ -463,5 +412,5 @@ private enum Action: Equatable {
case didResumeBackup case didResumeBackup
case didStopBackup case didStopBackup
case didRemoveBackup case didRemoveBackup
case didFetchContacts(XXModels.Contact.Query) case didGetMyContact(includingFacts: MessengerMyContact.IncludeFacts?)
} }
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