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

Merge branch 'development' into dev/update-bindings

parents 35d0b435 e72395cd
No related branches found
No related tags found
2 merge requests!102Release 1.0.0,!67Update Bindings
import Foundation
import XXClient
import XCTestDynamicOverlay
public struct MessengerRegisterForNotifications {
public enum Error: Swift.Error, Equatable {
case notConnected
}
public var run: (Data) throws -> Void
public func callAsFunction(token: Data) throws -> Void {
try run(token)
}
}
extension MessengerRegisterForNotifications {
public static func live(_ env: MessengerEnvironment) -> MessengerRegisterForNotifications {
MessengerRegisterForNotifications { token in
guard let e2e = env.e2e() else {
throw Error.notConnected
}
try env.registerForNotifications(
e2eId: e2e.getId(),
token: token.map { String(format: "%02hhx", $0) }.joined()
)
}
}
}
extension MessengerRegisterForNotifications {
public static let unimplemented = MessengerRegisterForNotifications(
run: XCTUnimplemented("\(Self.self)")
)
}
...@@ -20,6 +20,7 @@ public struct Messenger { ...@@ -20,6 +20,7 @@ public struct Messenger {
public var waitForNodes: MessengerWaitForNodes public var waitForNodes: MessengerWaitForNodes
public var destroy: MessengerDestroy public var destroy: MessengerDestroy
public var searchUsers: MessengerSearchUsers public var searchUsers: MessengerSearchUsers
public var registerForNotifications: MessengerRegisterForNotifications
} }
extension Messenger { extension Messenger {
...@@ -43,7 +44,8 @@ extension Messenger { ...@@ -43,7 +44,8 @@ extension Messenger {
waitForNetwork: .live(env), waitForNetwork: .live(env),
waitForNodes: .live(env), waitForNodes: .live(env),
destroy: .live(env), destroy: .live(env),
searchUsers: .live(env) searchUsers: .live(env),
registerForNotifications: .live(env)
) )
} }
} }
...@@ -68,6 +70,7 @@ extension Messenger { ...@@ -68,6 +70,7 @@ extension Messenger {
waitForNetwork: .unimplemented, waitForNetwork: .unimplemented,
waitForNodes: .unimplemented, waitForNodes: .unimplemented,
destroy: .unimplemented, destroy: .unimplemented,
searchUsers: .unimplemented searchUsers: .unimplemented,
registerForNotifications: .unimplemented
) )
} }
...@@ -19,6 +19,7 @@ public struct MessengerEnvironment { ...@@ -19,6 +19,7 @@ public struct MessengerEnvironment {
public var newCMix: NewCMix public var newCMix: NewCMix
public var newOrLoadUd: NewOrLoadUd public var newOrLoadUd: NewOrLoadUd
public var passwordStorage: PasswordStorage public var passwordStorage: PasswordStorage
public var registerForNotifications: RegisterForNotifications
public var searchUD: SearchUD public var searchUD: SearchUD
public var sleep: (TimeInterval) -> Void public var sleep: (TimeInterval) -> Void
public var storageDir: String public var storageDir: String
...@@ -53,6 +54,7 @@ extension MessengerEnvironment { ...@@ -53,6 +54,7 @@ extension MessengerEnvironment {
newCMix: .live, newCMix: .live,
newOrLoadUd: .live, newOrLoadUd: .live,
passwordStorage: .keychain, passwordStorage: .keychain,
registerForNotifications: .live,
searchUD: .live, searchUD: .live,
sleep: { Thread.sleep(forTimeInterval: $0) }, sleep: { Thread.sleep(forTimeInterval: $0) },
storageDir: MessengerEnvironment.defaultStorageDir, storageDir: MessengerEnvironment.defaultStorageDir,
...@@ -82,6 +84,7 @@ extension MessengerEnvironment { ...@@ -82,6 +84,7 @@ extension MessengerEnvironment {
newCMix: .unimplemented, newCMix: .unimplemented,
newOrLoadUd: .unimplemented, newOrLoadUd: .unimplemented,
passwordStorage: .unimplemented, passwordStorage: .unimplemented,
registerForNotifications: .unimplemented,
searchUD: .unimplemented, searchUD: .unimplemented,
sleep: XCTUnimplemented("\(Self.self).sleep"), sleep: XCTUnimplemented("\(Self.self).sleep"),
storageDir: "unimplemented", storageDir: "unimplemented",
......
import CustomDump
import XCTest
import XXClient
@testable import XXMessengerClient
final class MessengerRegisterForNotificationsTest: XCTestCase {
func testRegister() throws {
struct DidRegister: Equatable {
var e2eId: Int
var token: String
}
var didRegister: [DidRegister] = []
var env: MessengerEnvironment = .unimplemented
env.e2e.get = {
var e2e: E2E = .unimplemented
e2e.getId.run = { 1234 }
return e2e
}
env.registerForNotifications.run = { e2eId, token in
didRegister.append(.init(e2eId: e2eId, token: token))
}
let register: MessengerRegisterForNotifications = .live(env)
let token = "test-token".data(using: .utf8)!
try register(token: token)
XCTAssertNoDifference(didRegister, [.init(e2eId: 1234, token: "746573742d746f6b656e")])
}
func testRegisterWhenNotConnected() {
var env: MessengerEnvironment = .unimplemented
env.e2e.get = { nil }
let register: MessengerRegisterForNotifications = .live(env)
let token = "test-token".data(using: .utf8)!
XCTAssertThrowsError(try register(token: token)) { error in
XCTAssertEqual(error as? MessengerRegisterForNotifications.Error, .notConnected)
}
}
func testRegisterFailure() {
struct Failure: Error, Equatable {}
let failure = Failure()
var env: MessengerEnvironment = .unimplemented
env.e2e.get = {
var e2e: E2E = .unimplemented
e2e.getId.run = { 1234 }
return e2e
}
env.registerForNotifications.run = { _, _ in throw failure }
let register: MessengerRegisterForNotifications = .live(env)
let token = "test-token".data(using: .utf8)!
XCTAssertThrowsError(try register(token: token)) { error in
XCTAssertEqual(error as? Failure, failure)
}
}
}
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