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

Register backup callback and update storage

parent cfafee09
No related branches found
No related tags found
2 merge requests!110Backup improvements & example,!102Release 1.0.0
......@@ -28,6 +28,7 @@ extension AppEnvironment {
handleConfirm: .live(db: dbManager.getDB),
handleReset: .live(db: dbManager.getDB)
)
let backupStorage = BackupStorage.live(now: Date.init)
let mainQueue = DispatchQueue.main.eraseToAnyScheduler()
let bgQueue = DispatchQueue.global(qos: .background).eraseToAnyScheduler()
......@@ -91,6 +92,7 @@ extension AppEnvironment {
messenger: messenger,
db: dbManager.getDB
),
backupStorage: backupStorage,
log: .live(),
mainQueue: mainQueue,
bgQueue: bgQueue,
......
......@@ -50,6 +50,7 @@ struct AppEnvironment {
var messenger: Messenger
var authHandler: AuthCallbackHandler
var messageListener: MessageListenerHandler
var backupStorage: BackupStorage
var log: Logger
var mainQueue: AnySchedulerOf<DispatchQueue>
var bgQueue: AnySchedulerOf<DispatchQueue>
......@@ -64,6 +65,7 @@ extension AppEnvironment {
messenger: .unimplemented,
authHandler: .unimplemented,
messageListener: .unimplemented,
backupStorage: .unimplemented,
log: .unimplemented,
mainQueue: .unimplemented,
bgQueue: .unimplemented,
......@@ -94,6 +96,9 @@ let appReducer = Reducer<AppState, AppAction, AppEnvironment>
cancellables.append(env.messageListener(onError: { error in
env.log(.error(error as NSError))
}))
cancellables.append(env.messenger.registerBackupCallback(.init { data in
env.backupStorage.store(data)
}))
let isLoaded = env.messenger.isLoaded()
let isCreated = env.messenger.isCreated()
......
......@@ -10,7 +10,7 @@ import XXClient
final class AppFeatureTests: XCTestCase {
func testStartWithoutMessengerCreated() {
var actions: [Action] = []
var actions: [Action]!
let store = TestStore(
initialState: AppState(),
......@@ -34,24 +34,29 @@ final class AppFeatureTests: XCTestCase {
actions.append(.didStartMessageListener)
return Cancellable {}
}
store.environment.messenger.registerBackupCallback.run = { _ in
actions.append(.didRegisterBackupCallback)
return Cancellable {}
}
actions = []
store.send(.start)
store.receive(.set(\.$screen, .welcome(WelcomeState()))) {
$0.screen = .welcome(WelcomeState())
}
XCTAssertNoDifference(actions, [
.didMakeDB,
.didStartAuthHandler,
.didStartMessageListener,
.didRegisterBackupCallback,
])
store.send(.stop)
}
func testStartWithMessengerCreated() {
var actions: [Action] = []
var actions: [Action]!
let store = TestStore(
initialState: AppState(),
......@@ -78,17 +83,22 @@ final class AppFeatureTests: XCTestCase {
actions.append(.didStartMessageListener)
return Cancellable {}
}
store.environment.messenger.registerBackupCallback.run = { _ in
actions.append(.didRegisterBackupCallback)
return Cancellable {}
}
actions = []
store.send(.start)
store.receive(.set(\.$screen, .home(HomeState()))) {
$0.screen = .home(HomeState())
}
XCTAssertNoDifference(actions, [
.didMakeDB,
.didStartAuthHandler,
.didStartMessageListener,
.didRegisterBackupCallback,
.didLoadMessenger,
])
......@@ -96,7 +106,7 @@ final class AppFeatureTests: XCTestCase {
}
func testWelcomeFinished() {
var actions: [Action] = []
var actions: [Action]!
let store = TestStore(
initialState: AppState(
......@@ -122,7 +132,12 @@ final class AppFeatureTests: XCTestCase {
actions.append(.didStartMessageListener)
return Cancellable {}
}
store.environment.messenger.registerBackupCallback.run = { _ in
actions.append(.didRegisterBackupCallback)
return Cancellable {}
}
actions = []
store.send(.welcome(.finished)) {
$0.screen = .loading
}
......@@ -130,10 +145,10 @@ final class AppFeatureTests: XCTestCase {
store.receive(.set(\.$screen, .home(HomeState()))) {
$0.screen = .home(HomeState())
}
XCTAssertNoDifference(actions, [
.didStartAuthHandler,
.didStartMessageListener,
.didRegisterBackupCallback,
.didLoadMessenger,
])
......@@ -141,7 +156,7 @@ final class AppFeatureTests: XCTestCase {
}
func testRestoreFinished() {
var actions: [Action] = []
var actions: [Action]!
let store = TestStore(
initialState: AppState(
......@@ -167,7 +182,12 @@ final class AppFeatureTests: XCTestCase {
actions.append(.didStartMessageListener)
return Cancellable {}
}
store.environment.messenger.registerBackupCallback.run = { _ in
actions.append(.didRegisterBackupCallback)
return Cancellable {}
}
actions = []
store.send(.restore(.finished)) {
$0.screen = .loading
}
......@@ -175,10 +195,10 @@ final class AppFeatureTests: XCTestCase {
store.receive(.set(\.$screen, .home(HomeState()))) {
$0.screen = .home(HomeState())
}
XCTAssertNoDifference(actions, [
.didStartAuthHandler,
.didStartMessageListener,
.didRegisterBackupCallback,
.didLoadMessenger,
])
......@@ -186,7 +206,7 @@ final class AppFeatureTests: XCTestCase {
}
func testHomeDidDeleteAccount() {
var actions: [Action] = []
var actions: [Action]!
let store = TestStore(
initialState: AppState(
......@@ -209,7 +229,12 @@ final class AppFeatureTests: XCTestCase {
actions.append(.didStartMessageListener)
return Cancellable {}
}
store.environment.messenger.registerBackupCallback.run = { _ in
actions.append(.didRegisterBackupCallback)
return Cancellable {}
}
actions = []
store.send(.home(.deleteAccount(.success))) {
$0.screen = .loading
}
......@@ -217,10 +242,10 @@ final class AppFeatureTests: XCTestCase {
store.receive(.set(\.$screen, .welcome(WelcomeState()))) {
$0.screen = .welcome(WelcomeState())
}
XCTAssertNoDifference(actions, [
.didStartAuthHandler,
.didStartMessageListener,
.didRegisterBackupCallback,
])
store.send(.stop)
......@@ -284,7 +309,7 @@ final class AppFeatureTests: XCTestCase {
struct Failure: Error {}
let error = Failure()
var actions: [Action] = []
var actions: [Action]!
let store = TestStore(
initialState: AppState(),
......@@ -306,7 +331,12 @@ final class AppFeatureTests: XCTestCase {
actions.append(.didStartMessageListener)
return Cancellable {}
}
store.environment.messenger.registerBackupCallback.run = { _ in
actions.append(.didRegisterBackupCallback)
return Cancellable {}
}
actions = []
store.send(.start)
store.receive(.set(\.$screen, .failure(error.localizedDescription))) {
......@@ -316,15 +346,17 @@ final class AppFeatureTests: XCTestCase {
XCTAssertNoDifference(actions, [
.didStartAuthHandler,
.didStartMessageListener,
.didRegisterBackupCallback,
])
store.send(.stop)
}
func testStartHandlersAndListeners() {
var actions: [Action] = []
var actions: [Action]!
var authHandlerOnError: [AuthCallbackHandler.OnError] = []
var messageListenerOnError: [MessageListenerHandler.OnError] = []
var backupCallback: [UpdateBackupFunc] = []
let store = TestStore(
initialState: AppState(),
......@@ -351,22 +383,33 @@ final class AppFeatureTests: XCTestCase {
actions.append(.didCancelMessageListener)
}
}
store.environment.messenger.registerBackupCallback.run = { callback in
backupCallback.append(callback)
actions.append(.didRegisterBackupCallback)
return Cancellable {
actions.append(.didCancelBackupCallback)
}
}
store.environment.log.run = { msg, _, _, _ in
actions.append(.didLog(msg))
}
store.environment.backupStorage.store = { data in
actions.append(.didStoreBackup(data))
}
actions = []
store.send(.start)
store.receive(.set(\.$screen, .home(HomeState()))) {
$0.screen = .home(HomeState())
}
XCTAssertNoDifference(actions, [
.didStartAuthHandler,
.didStartMessageListener,
.didRegisterBackupCallback,
])
actions = []
actions = []
store.send(.start) {
$0.screen = .loading
}
......@@ -374,15 +417,16 @@ final class AppFeatureTests: XCTestCase {
store.receive(.set(\.$screen, .home(HomeState()))) {
$0.screen = .home(HomeState())
}
XCTAssertNoDifference(actions, [
.didCancelAuthHandler,
.didCancelMessageListener,
.didCancelBackupCallback,
.didStartAuthHandler,
.didStartMessageListener,
.didRegisterBackupCallback,
])
actions = []
actions = []
struct AuthError: Error {}
let authError = AuthError()
authHandlerOnError.first?(authError)
......@@ -390,8 +434,8 @@ final class AppFeatureTests: XCTestCase {
XCTAssertNoDifference(actions, [
.didLog(.error(authError as NSError))
])
actions = []
actions = []
struct MessageError: Error {}
let messageError = MessageError()
messageListenerOnError.first?(messageError)
......@@ -399,13 +443,22 @@ final class AppFeatureTests: XCTestCase {
XCTAssertNoDifference(actions, [
.didLog(.error(messageError as NSError))
])
actions = []
let backupData = "backup".data(using: .utf8)!
backupCallback.first?.handle(backupData)
XCTAssertNoDifference(actions, [
.didStoreBackup(backupData),
])
actions = []
store.send(.stop)
XCTAssertNoDifference(actions, [
.didCancelAuthHandler,
.didCancelMessageListener,
.didCancelBackupCallback,
])
}
}
......@@ -414,8 +467,11 @@ private enum Action: Equatable {
case didMakeDB
case didStartAuthHandler
case didStartMessageListener
case didRegisterBackupCallback
case didLoadMessenger
case didCancelAuthHandler
case didCancelMessageListener
case didCancelBackupCallback
case didLog(Logger.Message)
case didStoreBackup(Data)
}
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