You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-ios/Signal/test/Models/AccountManagerTest.swift

121 lines
3.9 KiB
Swift

//
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
//
import XCTest
import PromiseKit
struct VerificationFailedError: Error { }
struct FailedToGetRPRegistrationTokenError: Error { }
enum PushNotificationRequestResult: String {
case FailTSOnly = "FailTSOnly",
FailRPOnly = "FailRPOnly",
FailBoth = "FailBoth",
Succeed = "Succeed"
}
class FailingTSAccountManager: TSAccountManager {
let phoneNumberAwaitingVerification = "+13235555555"
override func verifyAccount(withCode: String, success: @escaping () -> Void, failure: @escaping (Error) -> Void) {
failure(VerificationFailedError())
}
override func registerForPushNotifications(pushToken: String, voipToken: String, success successHandler: @escaping () -> Void, failure failureHandler: @escaping (Error) -> Void) {
if pushToken == PushNotificationRequestResult.FailTSOnly.rawValue || pushToken == PushNotificationRequestResult.FailBoth.rawValue {
failureHandler(OWSErrorMakeUnableToProcessServerResponseError())
} else {
successHandler()
}
}
}
class VerifyingTSAccountManager: FailingTSAccountManager {
override func verifyAccount(withCode: String, success: @escaping () -> Void, failure: @escaping (Error) -> Void) {
success()
}
}
class TokenObtainingTSAccountManager: VerifyingTSAccountManager {
}
class AccountManagerTest: XCTestCase {
let tsAccountManager = FailingTSAccountManager(networkManager: TSNetworkManager.shared(), storageManager: TSStorageManager.shared())
func testRegisterWhenEmptyCode() {
let accountManager = AccountManager(textSecureAccountManager: tsAccountManager)
let expectation = self.expectation(description: "should fail")
firstly {
accountManager.register(verificationCode: "")
}.then {
XCTFail("Should fail")
}.catch { error in
let nserror = error as NSError
if OWSErrorCode(rawValue: nserror.code) == OWSErrorCode.userError {
expectation.fulfill()
} else {
XCTFail("Unexpected error: \(error)")
}
}
self.waitForExpectations(timeout: 1.0, handler: nil)
}
func testRegisterWhenVerificationFails() {
let accountManager = AccountManager(textSecureAccountManager: tsAccountManager)
let expectation = self.expectation(description: "should fail")
firstly {
accountManager.register(verificationCode: "123456")
}.then {
XCTFail("Should fail")
}.catch { error in
if error is VerificationFailedError {
expectation.fulfill()
} else {
XCTFail("Unexpected error: \(error)")
}
}
self.waitForExpectations(timeout: 1.0, handler: nil)
}
func testSuccessfulRegistration() {
let tsAccountManager = TokenObtainingTSAccountManager(networkManager: TSNetworkManager.shared(), storageManager: TSStorageManager.shared())
let accountManager = AccountManager(textSecureAccountManager: tsAccountManager)
let expectation = self.expectation(description: "should succeed")
firstly {
accountManager.register(verificationCode: "123456")
}.then {
expectation.fulfill()
}.catch { error in
XCTFail("Unexpected error: \(error)")
}
self.waitForExpectations(timeout: 1.0, handler: nil)
}
func testUpdatePushTokens() {
let accountManager = AccountManager(textSecureAccountManager: tsAccountManager)
let expectation = self.expectation(description: "should fail")
accountManager.updatePushTokens(pushToken: PushNotificationRequestResult.FailTSOnly.rawValue, voipToken: "whatever").then {
XCTFail("Expected to fail.")
}.catch { _ in
expectation.fulfill()
}
self.waitForExpectations(timeout: 1.0, handler: nil)
}
}