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

Save restored contact

parent 394c8fc6
No related branches found
No related tags found
2 merge requests!105Backup restoration fixes,!102Release 1.0.0
......@@ -274,8 +274,10 @@ let package = Package(
.target(
name: "RestoreFeature",
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
),
......
......@@ -103,7 +103,9 @@ extension AppEnvironment {
restore: {
RestoreEnvironment(
messenger: messenger,
db: dbManager.getDB,
loadData: .live,
now: Date.init,
mainQueue: mainQueue,
bgQueue: bgQueue
)
......
import AppCore
import Combine
import ComposableArchitecture
import Foundation
import XCTestDynamicOverlay
import XXMessengerClient
import XXModels
public struct RestoreState: Equatable {
public enum Field: String, Hashable {
......@@ -58,18 +60,24 @@ public enum RestoreAction: Equatable, BindableAction {
public struct RestoreEnvironment {
public init(
messenger: Messenger,
db: DBManagerGetDB,
loadData: URLDataLoader,
now: @escaping () -> Date,
mainQueue: AnySchedulerOf<DispatchQueue>,
bgQueue: AnySchedulerOf<DispatchQueue>
) {
self.messenger = messenger
self.db = db
self.loadData = loadData
self.now = now
self.mainQueue = mainQueue
self.bgQueue = bgQueue
}
public var messenger: Messenger
public var db: DBManagerGetDB
public var loadData: URLDataLoader
public var now: () -> Date
public var mainQueue: AnySchedulerOf<DispatchQueue>
public var bgQueue: AnySchedulerOf<DispatchQueue>
}
......@@ -77,7 +85,9 @@ public struct RestoreEnvironment {
extension RestoreEnvironment {
public static let unimplemented = RestoreEnvironment(
messenger: .unimplemented,
db: .unimplemented,
loadData: .unimplemented,
now: XCTUnimplemented("\(Self.self).now"),
mainQueue: .unimplemented,
bgQueue: .unimplemented
)
......@@ -118,10 +128,17 @@ public let restoreReducer = Reducer<RestoreState, RestoreAction, RestoreEnvironm
state.restoreFailure = nil
return Effect.result {
do {
_ = try env.messenger.restoreBackup(
let result = try env.messenger.restoreBackup(
backupData: backupData,
backupPassphrase: backupPassphrase
)
try env.db().saveContact(Contact(
id: try env.messenger.e2e.tryGet().getContact().getId(),
username: result.restoredParams.username,
email: result.restoredParams.email,
phone: result.restoredParams.phone,
createdAt: env.now()
))
return .success(.finished)
} catch {
return .success(.failed(error as NSError))
......
import CustomDump
import ComposableArchitecture
import CustomDump
import XCTest
@testable import RestoreFeature
import XXClient
import XXMessengerClient
import XXModels
@testable import RestoreFeature
final class RestoreFeatureTests: XCTestCase {
func testFileImport() {
......@@ -79,15 +81,18 @@ final class RestoreFeatureTests: XCTestCase {
let backupPassphrase = "backup-passphrase"
let restoreResult = MessengerRestoreBackup.Result(
restoredParams: BackupParams.init(
username: "",
email: nil,
phone: nil
username: "restored-username",
email: "restored-email",
phone: "restored-phone"
),
restoredContacts: []
)
let now = Date()
let contactId = "contact-id".data(using: .utf8)!
var didRestoreWithData: [Data] = []
var didRestoreWithPassphrase: [String] = []
var didSaveContact: [XXModels.Contact] = []
let store = TestStore(
initialState: RestoreState(
......@@ -99,11 +104,29 @@ final class RestoreFeatureTests: XCTestCase {
store.environment.bgQueue = .immediate
store.environment.mainQueue = .immediate
store.environment.now = { now }
store.environment.messenger.restoreBackup.run = { data, passphrase in
didRestoreWithData.append(data)
didRestoreWithPassphrase.append(passphrase)
return restoreResult
}
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.saveContact.run = { contact in
didSaveContact.append(contact)
return contact
}
return db
}
store.send(.set(\.$passphrase, backupPassphrase)) {
$0.passphrase = backupPassphrase
......@@ -115,6 +138,13 @@ final class RestoreFeatureTests: XCTestCase {
XCTAssertNoDifference(didRestoreWithData, [backupData])
XCTAssertNoDifference(didRestoreWithPassphrase, [backupPassphrase])
XCTAssertNoDifference(didSaveContact, [Contact(
id: contactId,
username: restoreResult.restoredParams.username,
email: restoreResult.restoredParams.email,
phone: restoreResult.restoredParams.phone,
createdAt: now
)])
store.receive(.finished) {
$0.isRestoring = false
......
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