From d881c1d359ff00ed4a4eaa669dd91cfa89aebec7 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Mon, 7 Nov 2022 11:26:00 +0100 Subject: [PATCH 1/3] Remove XXMessenger.BackupParams model MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - use string for backup params
- start backup with optional params --- .../Functions/MessengerBackupParams.swift | 8 +-- .../Functions/MessengerRestoreBackup.swift | 8 +-- .../Functions/MessengerStartBackup.swift | 10 ++- .../Utils/BackupParams.swift | 21 ------ .../MessengerBackupParamsTests.swift | 11 ++- .../MessengerRestoreBackupTests.swift | 5 +- .../Functions/MessengerStartBackupTests.swift | 71 ++++++++++++++++--- .../TestHelpers/TestDoubles.swift | 6 -- 8 files changed, 79 insertions(+), 61 deletions(-) delete mode 100644 Sources/XXMessengerClient/Utils/BackupParams.swift diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerBackupParams.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerBackupParams.swift index f5ac71f0..4307aea5 100644 --- a/Sources/XXMessengerClient/Messenger/Functions/MessengerBackupParams.swift +++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerBackupParams.swift @@ -6,9 +6,9 @@ public struct MessengerBackupParams { case notRunning } - public var run: (BackupParams) throws -> Void + public var run: (String) throws -> Void - public func callAsFunction(_ params: BackupParams) throws { + public func callAsFunction(_ params: String) throws { try run(params) } } @@ -19,9 +19,7 @@ extension MessengerBackupParams { guard let backup = env.backup(), backup.isRunning() else { throw Error.notRunning } - let paramsData = try params.encode() - let paramsString = String(data: paramsData, encoding: .utf8)! - backup.addJSON(paramsString) + backup.addJSON(params) } } } diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerRestoreBackup.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerRestoreBackup.swift index 0e5387a3..da66d579 100644 --- a/Sources/XXMessengerClient/Messenger/Functions/MessengerRestoreBackup.swift +++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerRestoreBackup.swift @@ -5,14 +5,14 @@ import XCTestDynamicOverlay public struct MessengerRestoreBackup { public struct Result: Equatable { public init( - restoredParams: BackupParams, + restoredParams: String, restoredContacts: [Data] ) { self.restoredParams = restoredParams self.restoredContacts = restoredContacts } - public var restoredParams: BackupParams + public var restoredParams: String public var restoredContacts: [Data] } @@ -42,8 +42,6 @@ extension MessengerRestoreBackup { sessionPassword: password, backupFileContents: backupData ) - let paramsData = report.params.data(using: .utf8)! - let params = try BackupParams.decode(paramsData) let cMix = try env.loadCMix( storageDir: storageDir, password: password, @@ -68,7 +66,7 @@ extension MessengerRestoreBackup { ) env.ud.set(ud) return Result( - restoredParams: params, + restoredParams: report.params, restoredContacts: report.restoredContacts ) } diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerStartBackup.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerStartBackup.swift index 1512d361..cd28535c 100644 --- a/Sources/XXMessengerClient/Messenger/Functions/MessengerStartBackup.swift +++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerStartBackup.swift @@ -9,11 +9,11 @@ public struct MessengerStartBackup { case notLoggedIn } - public var run: (String, BackupParams) throws -> Void + public var run: (String, String?) throws -> Void public func callAsFunction( password: String, - params: BackupParams + params: String? = nil ) throws { try run(password, params) } @@ -31,8 +31,6 @@ extension MessengerStartBackup { guard let ud = env.ud() else { throw Error.notLoggedIn } - let paramsData = try params.encode() - let paramsString = String(data: paramsData, encoding: .utf8)! var didAddParams = false var semaphore: DispatchSemaphore? = .init(value: 0) let backup = try env.initializeBackup( @@ -41,9 +39,9 @@ extension MessengerStartBackup { password: password, callback: .init { data in semaphore?.wait() - if !didAddParams { + if let params, !didAddParams { if let backup = env.backup() { - backup.addJSON(paramsString) + backup.addJSON(params) didAddParams = true } } else { diff --git a/Sources/XXMessengerClient/Utils/BackupParams.swift b/Sources/XXMessengerClient/Utils/BackupParams.swift deleted file mode 100644 index 8bf39a51..00000000 --- a/Sources/XXMessengerClient/Utils/BackupParams.swift +++ /dev/null @@ -1,21 +0,0 @@ -import Foundation - -public struct BackupParams: Equatable { - public init( - username: String - ) { - self.username = username - } - - public var username: String -} - -extension BackupParams: Codable { - public static func decode(_ data: Data) throws -> Self { - try JSONDecoder().decode(Self.self, from: data) - } - - public func encode() throws -> Data { - try JSONEncoder().encode(self) - } -} diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerBackupParamsTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerBackupParamsTests.swift index b65a34b9..8a61b85e 100644 --- a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerBackupParamsTests.swift +++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerBackupParamsTests.swift @@ -6,6 +6,7 @@ import XXClient final class MessengerBackupParamsTests: XCTestCase { func testBackupParams() throws { var didAddJSON: [String] = [] + let params = "test-123" var env: MessengerEnvironment = .unimplemented env.backup.get = { @@ -16,11 +17,9 @@ final class MessengerBackupParamsTests: XCTestCase { } let backup: MessengerBackupParams = .live(env) - try backup(.stub) + try backup(params) - XCTAssertNoDifference(didAddJSON, [ - String(data: try BackupParams.stub.encode(), encoding: .utf8)! - ]) + XCTAssertNoDifference(didAddJSON, [params]) } func testBackupParamsWhenNoBackup() { @@ -28,7 +27,7 @@ final class MessengerBackupParamsTests: XCTestCase { env.backup.get = { nil } let backup: MessengerBackupParams = .live(env) - XCTAssertThrowsError(try backup(.stub)) { error in + XCTAssertThrowsError(try backup("")) { error in XCTAssertNoDifference( error as NSError, MessengerBackupParams.Error.notRunning as NSError @@ -45,7 +44,7 @@ final class MessengerBackupParamsTests: XCTestCase { } let backup: MessengerBackupParams = .live(env) - XCTAssertThrowsError(try backup(.stub)) { error in + XCTAssertThrowsError(try backup("")) { error in XCTAssertNoDifference( error as NSError, MessengerBackupParams.Error.notRunning as NSError diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerRestoreBackupTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerRestoreBackupTests.swift index 4f819b47..d097c32e 100644 --- a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerRestoreBackupTests.swift +++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerRestoreBackupTests.swift @@ -10,10 +10,9 @@ final class MessengerRestoreBackupTests: XCTestCase { let ndfData = "ndf-data".data(using: .utf8)! let password = "password".data(using: .utf8)! let backupContacts: [Data] = (1...3).map { "contact-\($0)" }.map { $0.data(using: .utf8)! } - let backupParams = BackupParams.stub let backupReport = BackupReport( restoredContacts: backupContacts, - params: String(data: try! JSONEncoder().encode(backupParams), encoding: .utf8)! + params: "backup-report-params" ) let cMixParams = "cmix-params".data(using: .utf8)! let e2eParams = "e2e-params".data(using: .utf8)! @@ -157,7 +156,7 @@ final class MessengerRestoreBackupTests: XCTestCase { ]) XCTAssertNoDifference(result, MessengerRestoreBackup.Result( - restoredParams: backupParams, + restoredParams: backupReport.params, restoredContacts: backupContacts )) } diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartBackupTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartBackupTests.swift index b92bd1ee..df798488 100644 --- a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartBackupTests.swift +++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartBackupTests.swift @@ -4,7 +4,7 @@ import XXClient @testable import XXMessengerClient final class MessengerStartBackupTests: XCTestCase { - func testStart() throws { + func testStartWithParams() throws { struct InitBackupParams: Equatable { var e2eId: Int var udId: Int @@ -16,6 +16,7 @@ final class MessengerStartBackupTests: XCTestCase { var didSetBackup: [Backup?] = [] var didAddJSON: [String] = [] + let params = "backup-params" let password = "test-password" let e2eId = 123 let udId = 321 @@ -49,7 +50,7 @@ final class MessengerStartBackupTests: XCTestCase { } let start: MessengerStartBackup = .live(env) - try start(password: password, params: .stub) + try start(password: password, params: params) XCTAssertNoDifference(didInitializeBackup, [ .init(e2eId: e2eId, udId: udId, password: password) @@ -62,9 +63,7 @@ final class MessengerStartBackupTests: XCTestCase { didHandleCallback.map(StringData.init), [].map(StringData.init) ) - XCTAssertNoDifference(didAddJSON, [ - String(data: try BackupParams.stub.encode(), encoding: .utf8)! - ]) + XCTAssertNoDifference(didAddJSON, [params]) backupCallbacks.forEach { $0.handle(dataWithParams) } @@ -74,6 +73,60 @@ final class MessengerStartBackupTests: XCTestCase { ) } + func testStartWithoutParams() throws { + struct InitBackupParams: Equatable { + var e2eId: Int + var udId: Int + var password: String + } + var didInitializeBackup: [InitBackupParams] = [] + var backupCallbacks: [UpdateBackupFunc] = [] + var didHandleCallback: [Data] = [] + var didSetBackup: [Backup?] = [] + + let password = "test-password" + let e2eId = 123 + let udId = 321 + let dataWithoutParams = "backup-without-params".data(using: .utf8)! + + var env: MessengerEnvironment = .unimplemented + env.backup.get = { didSetBackup.last as? Backup } + env.backup.set = { didSetBackup.append($0) } + env.e2e.get = { + var e2e: E2E = .unimplemented + e2e.getId.run = { e2eId } + return e2e + } + env.ud.get = { + var ud: UserDiscovery = .unimplemented + ud.getId.run = { udId } + return ud + } + env.backupCallbacks.registered = { + UpdateBackupFunc { didHandleCallback.append($0) } + } + env.initializeBackup.run = { e2eId, udId, password, callback in + didInitializeBackup.append(.init(e2eId: e2eId, udId: udId, password: password)) + backupCallbacks.append(callback) + return .unimplemented + } + let start: MessengerStartBackup = .live(env) + + try start(password: password) + + XCTAssertNoDifference(didInitializeBackup, [ + .init(e2eId: e2eId, udId: udId, password: password) + ]) + XCTAssertNoDifference(didSetBackup.map { $0 != nil }, [true]) + + backupCallbacks.forEach { $0.handle(dataWithoutParams) } + + XCTAssertNoDifference( + didHandleCallback.map(StringData.init), + [dataWithoutParams].map(StringData.init) + ) + } + func testStartWhenRunning() { var env: MessengerEnvironment = .unimplemented env.backup.get = { @@ -83,7 +136,7 @@ final class MessengerStartBackupTests: XCTestCase { } let start: MessengerStartBackup = .live(env) - XCTAssertThrowsError(try start(password: "", params: .stub)) { error in + XCTAssertThrowsError(try start(password: "")) { error in XCTAssertNoDifference( error as NSError, MessengerStartBackup.Error.isRunning as NSError @@ -97,7 +150,7 @@ final class MessengerStartBackupTests: XCTestCase { env.e2e.get = { nil } let start: MessengerStartBackup = .live(env) - XCTAssertThrowsError(try start(password: "", params: .stub)) { error in + XCTAssertThrowsError(try start(password: "")) { error in XCTAssertNoDifference( error as NSError, MessengerStartBackup.Error.notConnected as NSError @@ -112,7 +165,7 @@ final class MessengerStartBackupTests: XCTestCase { env.ud.get = { nil } let start: MessengerStartBackup = .live(env) - XCTAssertThrowsError(try start(password: "", params: .stub)) { error in + XCTAssertThrowsError(try start(password: "")) { error in XCTAssertNoDifference( error as NSError, MessengerStartBackup.Error.notLoggedIn as NSError @@ -140,7 +193,7 @@ final class MessengerStartBackupTests: XCTestCase { env.initializeBackup.run = { _, _, _, _ in throw failure } let start: MessengerStartBackup = .live(env) - XCTAssertThrowsError(try start(password: "", params: .stub)) { error in + XCTAssertThrowsError(try start(password: "")) { error in XCTAssertNoDifference(error as NSError, failure as NSError) } } diff --git a/Tests/XXMessengerClientTests/TestHelpers/TestDoubles.swift b/Tests/XXMessengerClientTests/TestHelpers/TestDoubles.swift index 93110b2e..e43d76ac 100644 --- a/Tests/XXMessengerClientTests/TestHelpers/TestDoubles.swift +++ b/Tests/XXMessengerClientTests/TestHelpers/TestDoubles.swift @@ -18,12 +18,6 @@ extension Message { } } -extension BackupParams { - static let stub = BackupParams( - username: "stub-username" - ) -} - extension ReceivedFile { static func stub(_ id: Int) -> ReceivedFile { ReceivedFile( -- GitLab From d285d29ec04905224a0874a3cf47e72e499d7a50 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Mon, 7 Nov 2022 11:36:12 +0100 Subject: [PATCH 2/3] Update backup params in messenger example --- .../BackupFeature/BackupComponent.swift | 13 +---- .../BackupComponentTests.swift | 53 ++----------------- .../RestoreComponentTests.swift | 2 +- 3 files changed, 5 insertions(+), 63 deletions(-) diff --git a/Examples/xx-messenger/Sources/BackupFeature/BackupComponent.swift b/Examples/xx-messenger/Sources/BackupFeature/BackupComponent.swift index af3e3c34..212a728d 100644 --- a/Examples/xx-messenger/Sources/BackupFeature/BackupComponent.swift +++ b/Examples/xx-messenger/Sources/BackupFeature/BackupComponent.swift @@ -11,10 +11,6 @@ public struct BackupComponent: ReducerProtocol { case passphrase } - public enum Error: String, Swift.Error, Equatable { - case contactUsernameMissing - } - public init( isRunning: Bool = false, isStarting: Bool = false, @@ -102,14 +98,7 @@ public struct BackupComponent: ReducerProtocol { state.focusedField = nil return Effect.run { [state] subscriber in do { - let contact = try messenger.myContact(includeFacts: .types([.username])) - guard let username = try contact.getFact(.username)?.value else { - throw State.Error.contactUsernameMissing - } - try messenger.startBackup( - password: state.passphrase, - params: BackupParams(username: username) - ) + try messenger.startBackup(password: state.passphrase) subscriber.send(.didStart(failure: nil)) } catch { subscriber.send(.didStart(failure: error as NSError)) diff --git a/Examples/xx-messenger/Tests/BackupFeatureTests/BackupComponentTests.swift b/Examples/xx-messenger/Tests/BackupFeatureTests/BackupComponentTests.swift index e409a1b9..80ba5c11 100644 --- a/Examples/xx-messenger/Tests/BackupFeatureTests/BackupComponentTests.swift +++ b/Examples/xx-messenger/Tests/BackupFeatureTests/BackupComponentTests.swift @@ -72,12 +72,6 @@ final class BackupFeatureTests: XCTestCase { ) store.dependencies.app.mainQueue = .immediate store.dependencies.app.bgQueue = .immediate - store.dependencies.app.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.dependencies.app.messenger.startBackup.run = { passphrase, params in actions.append(.didStartBackup(passphrase: passphrase, params: params)) } @@ -102,12 +96,9 @@ final class BackupFeatureTests: XCTestCase { } XCTAssertNoDifference(actions, [ - .didGetMyContact( - includingFacts: .types([.username]) - ), .didStartBackup( passphrase: passphrase, - params: .init(username: username) + params: nil ) ]) @@ -118,38 +109,6 @@ final class BackupFeatureTests: XCTestCase { } } - func testStartBackupWithoutContactUsername() { - var isBackupRunning: [Bool] = [false] - - let store = TestStore( - initialState: BackupComponent.State( - passphrase: "1234" - ), - reducer: BackupComponent() - ) - store.dependencies.app.mainQueue = .immediate - store.dependencies.app.bgQueue = .immediate - store.dependencies.app.messenger.myContact.run = { _ in - var contact = Contact.unimplemented("contact-data".data(using: .utf8)!) - contact.getFactsFromContact.run = { _ in [] } - return contact - } - store.dependencies.app.messenger.isBackupRunning.run = { - isBackupRunning.removeFirst() - } - - store.send(.startTapped) { - $0.isStarting = true - } - - let failure = BackupComponent.State.Error.contactUsernameMissing - store.receive(.didStart(failure: failure as NSError)) { - $0.isRunning = false - $0.isStarting = false - $0.alert = .error(failure) - } - } - func testStartBackupMyContactFailure() { struct Failure: Error {} let failure = Failure() @@ -163,7 +122,7 @@ final class BackupFeatureTests: XCTestCase { ) store.dependencies.app.mainQueue = .immediate store.dependencies.app.bgQueue = .immediate - store.dependencies.app.messenger.myContact.run = { _ in throw failure } + store.dependencies.app.messenger.startBackup.run = { _, _ in throw failure } store.dependencies.app.messenger.isBackupRunning.run = { isBackupRunning.removeFirst() } @@ -192,11 +151,6 @@ final class BackupFeatureTests: XCTestCase { ) store.dependencies.app.mainQueue = .immediate store.dependencies.app.bgQueue = .immediate - store.dependencies.app.messenger.myContact.run = { _ in - var contact = Contact.unimplemented("data".data(using: .utf8)!) - contact.getFactsFromContact.run = { _ in [Fact(type: .username, value: "username")] } - return contact - } store.dependencies.app.messenger.startBackup.run = { _, _ in throw failure } @@ -397,9 +351,8 @@ final class BackupFeatureTests: XCTestCase { private enum Action: Equatable { case didRegisterObserver - case didStartBackup(passphrase: String, params: BackupParams) + case didStartBackup(passphrase: String, params: String?) case didResumeBackup case didStopBackup case didRemoveBackup - case didGetMyContact(includingFacts: MessengerMyContact.IncludeFacts?) } diff --git a/Examples/xx-messenger/Tests/RestoreFeatureTests/RestoreComponentTests.swift b/Examples/xx-messenger/Tests/RestoreFeatureTests/RestoreComponentTests.swift index 8a15fb74..6b512b58 100644 --- a/Examples/xx-messenger/Tests/RestoreFeatureTests/RestoreComponentTests.swift +++ b/Examples/xx-messenger/Tests/RestoreFeatureTests/RestoreComponentTests.swift @@ -82,7 +82,7 @@ final class RestoreComponentTests: XCTestCase { Fact(type: .phone, value: "restored-fact-phone"), ] let restoreResult = MessengerRestoreBackup.Result( - restoredParams: BackupParams(username: "restored-param-username"), + restoredParams: "", restoredContacts: [ "contact-1-id".data(using: .utf8)!, "contact-2-id".data(using: .utf8)!, -- GitLab From 95498858f4fbd6c9d9e296266876e2e9ab41c8fd Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Mon, 7 Nov 2022 11:44:28 +0100 Subject: [PATCH 3/3] Clean up --- .../Tests/BackupFeatureTests/BackupComponentTests.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/Examples/xx-messenger/Tests/BackupFeatureTests/BackupComponentTests.swift b/Examples/xx-messenger/Tests/BackupFeatureTests/BackupComponentTests.swift index 80ba5c11..41a1f4b1 100644 --- a/Examples/xx-messenger/Tests/BackupFeatureTests/BackupComponentTests.swift +++ b/Examples/xx-messenger/Tests/BackupFeatureTests/BackupComponentTests.swift @@ -63,7 +63,6 @@ final class BackupFeatureTests: XCTestCase { func testStartBackup() { var actions: [Action]! var isBackupRunning: [Bool] = [true] - let username = "test-username" let passphrase = "backup-password" let store = TestStore( -- GitLab