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

Add isListeningForMessages state to Messenger

parent 29fcdf5f
No related branches found
No related tags found
2 merge requests!102Release 1.0.0,!100Messenger - restore from backup
Showing
with 99 additions and 7 deletions
......@@ -25,6 +25,7 @@ extension MessengerConnect {
identity: try cMix.makeReceptionIdentity(legacy: true),
e2eParamsJSON: env.getE2EParams()
))
env.isListeningForMessages.set(false)
}
}
}
......
......@@ -22,6 +22,7 @@ extension MessengerDestroy {
env.ud.set(nil)
env.e2e.set(nil)
env.cMix.set(nil)
env.isListeningForMessages.set(false)
try env.fileManager.removeDirectory(env.storageDir)
try env.passwordStorage.remove()
}
......
import XCTestDynamicOverlay
public struct MessengerIsListeningForMessages {
public var run: () -> Bool
public func callAsFunction() -> Bool {
run()
}
}
extension MessengerIsListeningForMessages {
public static func live(_ env: MessengerEnvironment) -> MessengerIsListeningForMessages {
MessengerIsListeningForMessages(run: env.isListeningForMessages.get)
}
}
extension MessengerIsListeningForMessages {
public static let unimplemented = MessengerIsListeningForMessages(
run: XCTUnimplemented("\(Self.self)", placeholder: false)
)
}
......@@ -16,14 +16,20 @@ public struct MessengerListenForMessages {
extension MessengerListenForMessages {
public static func live(_ env: MessengerEnvironment) -> MessengerListenForMessages {
MessengerListenForMessages {
guard let e2e = env.e2e() else {
throw Error.notConnected
do {
guard let e2e = env.e2e() else {
throw Error.notConnected
}
try e2e.registerListener(
senderId: nil,
messageType: 2,
callback: env.messageListeners.registered()
)
env.isListeningForMessages.set(true)
} catch {
env.isListeningForMessages.set(false)
throw error
}
try e2e.registerListener(
senderId: nil,
messageType: 2,
callback: env.messageListeners.registered()
)
}
}
}
......
......@@ -73,6 +73,7 @@ extension MessengerRestoreBackup {
env.cMix.set(cMix)
env.e2e.set(e2e)
env.ud.set(ud)
env.isListeningForMessages.set(false)
return Result(
restoredParams: params,
restoredContacts: report.restoredContacts
......
......@@ -14,6 +14,7 @@ public struct Messenger {
public var start: MessengerStart
public var isConnected: MessengerIsConnected
public var connect: MessengerConnect
public var isListeningForMessages: MessengerIsListeningForMessages
public var listenForMessages: MessengerListenForMessages
public var isRegistered: MessengerIsRegistered
public var register: MessengerRegister
......@@ -46,6 +47,7 @@ extension Messenger {
start: .live(env),
isConnected: .live(env),
connect: .live(env),
isListeningForMessages: .live(env),
listenForMessages: .live(env),
isRegistered: .live(env),
register: .live(env),
......@@ -79,6 +81,7 @@ extension Messenger {
start: .unimplemented,
isConnected: .unimplemented,
connect: .unimplemented,
isListeningForMessages: .unimplemented,
listenForMessages: .unimplemented,
isRegistered: .unimplemented,
register: .unimplemented,
......
......@@ -12,6 +12,7 @@ public struct MessengerEnvironment {
public var getCMixParams: GetCMixParams
public var getE2EParams: GetE2EParams
public var getSingleUseParams: GetSingleUseParams
public var isListeningForMessages: Stored<Bool>
public var isRegisteredWithUD: IsRegisteredWithUD
public var loadCMix: LoadCMix
public var login: Login
......@@ -52,6 +53,7 @@ extension MessengerEnvironment {
getCMixParams: .liveDefault,
getE2EParams: .liveDefault,
getSingleUseParams: .liveDefault,
isListeningForMessages: .inMemory(false),
isRegisteredWithUD: .live,
loadCMix: .live,
login: .live,
......@@ -87,6 +89,7 @@ extension MessengerEnvironment {
getCMixParams: .unimplemented,
getE2EParams: .unimplemented,
getSingleUseParams: .unimplemented,
isListeningForMessages: .unimplemented(placeholder: false),
isRegisteredWithUD: .unimplemented,
loadCMix: .unimplemented,
login: .unimplemented,
......
......@@ -17,12 +17,14 @@ final class MessengerConnectTests: XCTestCase {
var didLogInWithAuthCallbacks: [AuthCallbacks?] = []
var didSetE2E: [E2E?] = []
var didHandleAuthCallbacks: [AuthCallbacks.Callback] = []
var didSetIsListeningForMessages: [Bool] = []
let cMixId = 1234
let receptionId = ReceptionIdentity.stub
let e2eParams = "e2e-params".data(using: .utf8)!
var env: MessengerEnvironment = .unimplemented
env.isListeningForMessages.set = { didSetIsListeningForMessages.append($0) }
env.cMix.get = {
var cMix: CMix = .unimplemented
cMix.getId.run = { cMixId }
......@@ -62,6 +64,7 @@ final class MessengerConnectTests: XCTestCase {
e2eParamsJSON: e2eParams
)
])
XCTAssertNoDifference(didSetIsListeningForMessages, [false])
XCTAssertEqual(didLogInWithAuthCallbacks.compactMap { $0 }.count, 1)
XCTAssertEqual(didSetE2E.compactMap { $0 }.count, 1)
......
......@@ -14,6 +14,7 @@ final class MessengerDestroyTests: XCTestCase {
var didSetE2E: [E2E?] = []
var didSetCMix: [CMix?] = []
var didRemovePassword = 0
var didSetIsListeningForMessages: [Bool] = []
var env: MessengerEnvironment = .unimplemented
env.cMix.get = {
......@@ -28,6 +29,7 @@ final class MessengerDestroyTests: XCTestCase {
env.ud.set = { didSetUD.append($0) }
env.e2e.set = { didSetE2E.append($0) }
env.cMix.set = { didSetCMix.append($0) }
env.isListeningForMessages.set = { didSetIsListeningForMessages.append($0) }
env.fileManager.removeDirectory = { didRemoveDirectory.append($0) }
env.passwordStorage.remove = { didRemovePassword += 1 }
let destroy: MessengerDestroy = .live(env)
......@@ -39,6 +41,7 @@ final class MessengerDestroyTests: XCTestCase {
XCTAssertNoDifference(didSetUD.map { $0 == nil }, [true])
XCTAssertNoDifference(didSetE2E.map { $0 == nil }, [true])
XCTAssertNoDifference(didSetCMix.map { $0 == nil }, [true])
XCTAssertNoDifference(didSetIsListeningForMessages, [false])
XCTAssertNoDifference(didRemoveDirectory, [storageDir])
XCTAssertNoDifference(didRemovePassword, 1)
}
......@@ -67,12 +70,14 @@ final class MessengerDestroyTests: XCTestCase {
var didSetUD: [UserDiscovery?] = []
var didSetE2E: [E2E?] = []
var didSetCMix: [CMix?] = []
var didSetIsListeningForMessages: [Bool] = []
var env: MessengerEnvironment = .unimplemented
env.cMix.get = { nil }
env.ud.set = { didSetUD.append($0) }
env.e2e.set = { didSetE2E.append($0) }
env.cMix.set = { didSetCMix.append($0) }
env.isListeningForMessages.set = { didSetIsListeningForMessages.append($0) }
env.fileManager.removeDirectory = { _ in throw error }
let destroy: MessengerDestroy = .live(env)
......@@ -82,6 +87,7 @@ final class MessengerDestroyTests: XCTestCase {
XCTAssertNoDifference(didSetUD.map { $0 == nil }, [true])
XCTAssertNoDifference(didSetE2E.map { $0 == nil }, [true])
XCTAssertNoDifference(didSetCMix.map { $0 == nil }, [true])
XCTAssertNoDifference(didSetIsListeningForMessages, [false])
}
func testRemovePasswordFailure() {
......@@ -92,12 +98,14 @@ final class MessengerDestroyTests: XCTestCase {
var didSetUD: [UserDiscovery?] = []
var didSetE2E: [E2E?] = []
var didSetCMix: [CMix?] = []
var didSetIsListeningForMessages: [Bool] = []
var env: MessengerEnvironment = .unimplemented
env.cMix.get = { nil }
env.ud.set = { didSetUD.append($0) }
env.e2e.set = { didSetE2E.append($0) }
env.cMix.set = { didSetCMix.append($0) }
env.isListeningForMessages.set = { didSetIsListeningForMessages.append($0) }
env.storageDir = storageDir
env.fileManager.removeDirectory = { didRemoveDirectory.append($0) }
env.passwordStorage.remove = { throw error }
......@@ -109,6 +117,7 @@ final class MessengerDestroyTests: XCTestCase {
XCTAssertNoDifference(didSetUD.map { $0 == nil }, [true])
XCTAssertNoDifference(didSetE2E.map { $0 == nil }, [true])
XCTAssertNoDifference(didSetCMix.map { $0 == nil }, [true])
XCTAssertNoDifference(didSetIsListeningForMessages, [false])
XCTAssertNoDifference(didRemoveDirectory, [storageDir])
}
}
import XCTest
@testable import XXMessengerClient
final class MessengerIsListeningForMessagesTests: XCTestCase {
func testListening() {
var env: MessengerEnvironment = .unimplemented
env.isListeningForMessages.get = { true }
let isListening: MessengerIsListeningForMessages = .live(env)
XCTAssertTrue(isListening())
}
func testNotListening() {
var env: MessengerEnvironment = .unimplemented
env.isListeningForMessages.get = { false }
let isListening: MessengerIsListeningForMessages = .live(env)
XCTAssertFalse(isListening())
}
}
......@@ -12,6 +12,7 @@ final class MessengerListenForMessagesTests: XCTestCase {
var didRegisterListenerWithParams: [RegisterListenerParams] = []
var didRegisterListenerWithCallback: [Listener] = []
var didHandleMessage: [Message] = []
var didSetIsListeningForMessages: [Bool] = []
var env: MessengerEnvironment = .unimplemented
env.e2e.get = {
......@@ -25,6 +26,9 @@ final class MessengerListenForMessagesTests: XCTestCase {
env.messageListeners.registered = {
Listener { message in didHandleMessage.append(message) }
}
env.isListeningForMessages.set = {
didSetIsListeningForMessages.append($0)
}
let listen: MessengerListenForMessages = .live(env)
try listen()
......@@ -32,6 +36,7 @@ final class MessengerListenForMessagesTests: XCTestCase {
XCTAssertNoDifference(didRegisterListenerWithParams, [
.init(senderId: nil, messageType: 2)
])
XCTAssertNoDifference(didSetIsListeningForMessages, [true])
let message = Message.stub(123)
didRegisterListenerWithCallback.first?.handle(message)
......@@ -40,19 +45,26 @@ final class MessengerListenForMessagesTests: XCTestCase {
}
func testListenWhenNotLoggedIn() {
var didSetIsListeningForMessages: [Bool] = []
var env: MessengerEnvironment = .unimplemented
env.e2e.get = { nil }
env.isListeningForMessages.set = { didSetIsListeningForMessages.append($0) }
let listen: MessengerListenForMessages = .live(env)
XCTAssertThrowsError(try listen()) { error in
XCTAssertNoDifference(error as? MessengerListenForMessages.Error, .notConnected)
}
XCTAssertNoDifference(didSetIsListeningForMessages, [false])
}
func testListenFailure() {
struct Failure: Error, Equatable {}
let error = Failure()
var didSetIsListeningForMessages: [Bool] = []
var env: MessengerEnvironment = .unimplemented
env.e2e.get = {
var e2e: E2E = .unimplemented
......@@ -60,10 +72,13 @@ final class MessengerListenForMessagesTests: XCTestCase {
return e2e
}
env.messageListeners.registered = { Listener.unimplemented }
env.isListeningForMessages.set = { didSetIsListeningForMessages.append($0) }
let listen: MessengerListenForMessages = .live(env)
XCTAssertThrowsError(try listen()) { err in
XCTAssertNoDifference(err as? Failure, error)
}
XCTAssertNoDifference(didSetIsListeningForMessages, [false])
}
}
......@@ -100,6 +100,9 @@ final class MessengerRestoreBackupTests: XCTestCase {
env.cMix.set = { _ in caughtActions.append(.didSetCMix) }
env.e2e.set = { _ in caughtActions.append(.didSetE2E) }
env.ud.set = { _ in caughtActions.append(.didSetUD) }
env.isListeningForMessages.set = {
caughtActions.append(.didSetIsListeningForMessages(isListening: $0))
}
let restore: MessengerRestoreBackup = .live(env)
......@@ -157,6 +160,9 @@ final class MessengerRestoreBackupTests: XCTestCase {
.didSetCMix,
.didSetE2E,
.didSetUD,
.didSetIsListeningForMessages(
isListening: false
),
])
XCTAssertNoDifference(result, MessengerRestoreBackup.Result(
......@@ -228,4 +234,7 @@ private enum CaughtAction: Equatable {
case didSetCMix
case didSetE2E
case didSetUD
case didSetIsListeningForMessages(
isListening: Bool
)
}
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