mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			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.
		
		
		
		
		
			
		
			
				
	
	
		
			121 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			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)
 | |
|     }
 | |
| 
 | |
| }
 |