90 lines
4.3 KiB
Swift
90 lines
4.3 KiB
Swift
//
|
|
// Copyright 2022 New Vector Ltd
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
|
|
@testable import ElementX
|
|
import XCTest
|
|
|
|
class KeychainControllerTests: XCTestCase {
|
|
var keychain: KeychainController!
|
|
|
|
override func setUp() {
|
|
keychain = KeychainController(identifier: "\(ElementInfoPlist.cfBundleIdentifier).tests")
|
|
keychain.removeAllRestoreTokens()
|
|
}
|
|
|
|
func testAddRestoreToken() {
|
|
// Given an empty keychain.
|
|
XCTAssertTrue(keychain.restoreTokens().isEmpty, "The keychain should be empty to begin with.")
|
|
|
|
// When adding an restore token.
|
|
let username = "@test:example.com"
|
|
let restoreToken = UUID().uuidString
|
|
keychain.setRestoreToken(restoreToken, forUsername: username)
|
|
|
|
// Then the restore token should be stored in the keychain.
|
|
XCTAssertEqual(keychain.restoreTokenForUsername(username), restoreToken, "The retrieved restore token should match the value that was stored.")
|
|
}
|
|
|
|
func testRemovingRestoreToken() {
|
|
// Given a keychain with a stored restore token.
|
|
let username = "@test:example.com"
|
|
let restoreToken = UUID().uuidString
|
|
keychain.setRestoreToken(restoreToken, forUsername: username)
|
|
XCTAssertEqual(keychain.restoreTokens().count, 1, "The keychain should have 1 restore token.")
|
|
XCTAssertEqual(keychain.restoreTokenForUsername(username), restoreToken, "The initial restore token should match the value that was stored.")
|
|
|
|
// When deleting the restore token.
|
|
keychain.removeRestoreTokenForUsername(username)
|
|
|
|
// Then the keychain should be empty.
|
|
XCTAssertTrue(keychain.restoreTokens().isEmpty, "The keychain should be empty after deleting the token.")
|
|
XCTAssertNil(keychain.restoreTokenForUsername(username), "There restore token should not be returned after removal.")
|
|
}
|
|
|
|
func testRemovingAllRestoreTokens() {
|
|
// Given a keychain with 5 stored restore tokens.
|
|
for index in 0..<5 {
|
|
keychain.setRestoreToken(UUID().uuidString, forUsername: "@test\(index):example.com")
|
|
}
|
|
XCTAssertEqual(keychain.restoreTokens().count, 5, "The keychain should have 5 restore tokens.")
|
|
|
|
// When deleting all of the restore tokens.
|
|
keychain.removeAllRestoreTokens()
|
|
|
|
// Then the keychain should be empty.
|
|
XCTAssertTrue(keychain.restoreTokens().isEmpty, "The keychain should be empty after deleting the token.")
|
|
}
|
|
|
|
func testRemovingSingleRestoreTokens() {
|
|
// Given a keychain with 5 stored restore tokens.
|
|
for index in 0..<5 {
|
|
keychain.setRestoreToken(UUID().uuidString, forUsername: "@test\(index):example.com")
|
|
}
|
|
XCTAssertEqual(keychain.restoreTokens().count, 5, "The keychain should have 5 restore tokens.")
|
|
|
|
// When deleting one of the restore tokens.
|
|
keychain.removeRestoreTokenForUsername("@test2:example.com")
|
|
|
|
// Then the other 4 items should remain untouched.
|
|
XCTAssertEqual(keychain.restoreTokens().count, 4, "The keychain have 4 remaining restore tokens.")
|
|
XCTAssertNotNil(keychain.restoreTokenForUsername("@test0:example.com"), "The restore token should not have been deleted.")
|
|
XCTAssertNotNil(keychain.restoreTokenForUsername("@test1:example.com"), "The restore token should not have been deleted.")
|
|
XCTAssertNil(keychain.restoreTokenForUsername("@test2:example.com"), "The restore token should have been deleted.")
|
|
XCTAssertNotNil(keychain.restoreTokenForUsername("@test3:example.com"), "The restore token should not have been deleted.")
|
|
XCTAssertNotNil(keychain.restoreTokenForUsername("@test4:example.com"), "The restore token should not have been deleted.")
|
|
}
|
|
}
|