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/SignalMessaging/Loki/Migrations/LK001UpdateFriendRequestSta...

67 lines
3.0 KiB
Swift

@testable import SignalServiceKit
import XCTest
import Curve25519Kit
class LK001UpdateFriendRequestStatusStorageTest : XCTestCase {
private var storage: OWSPrimaryStorage { OWSPrimaryStorage.shared() }
override func setUp() {
super.setUp()
// Activate the mock environment
ClearCurrentAppContextForTests()
SetCurrentAppContext(TestAppContext())
MockSSKEnvironment.activate()
// Register a mock user
let identityManager = OWSIdentityManager.shared()
let seed = Randomness.generateRandomBytes(16)!
let keyPair = Curve25519.generateKeyPair(fromSeed: seed + seed)
let databaseConnection = identityManager.value(forKey: "dbConnection") as! YapDatabaseConnection
databaseConnection.setObject(keyPair, forKey: OWSPrimaryStorageIdentityKeyStoreIdentityKey, inCollection: OWSPrimaryStorageIdentityKeyStoreCollection)
TSAccountManager.sharedInstance().phoneNumberAwaitingVerification = keyPair.hexEncodedPublicKey
TSAccountManager.sharedInstance().didRegister()
}
func test_shouldMigrateFriendRequestStatusCorrectly() {
typealias ThreadFriendRequestStatus = NSInteger
let friendRequestMappings: [ThreadFriendRequestStatus: LKFriendRequestStatus] = [
0: .none,
1: .requestSending,
2: .requestSent,
3: .requestReceived,
4: .friends,
5: .requestExpired
];
var hexEncodedPublicKeyMapping: [String: ThreadFriendRequestStatus] = [:]
for (threadFriendRequestStatus, _) in friendRequestMappings {
let hexEncodedPublicKey = Curve25519.generateKeyPair().hexEncodedPublicKey
hexEncodedPublicKeyMapping[hexEncodedPublicKey] = threadFriendRequestStatus
}
storage.dbReadWriteConnection.readWrite { transaction in
for (hexEncodedPublicKey, friendRequestStatus) in hexEncodedPublicKeyMapping {
let thread = TSContactThread.getOrCreateThread(withContactId: hexEncodedPublicKey, transaction: transaction)
thread.friendRequestStatus = friendRequestStatus
thread.save(with: transaction)
}
}
// Wait for migration to complete
let migration = self.expectation(description: "Migration")
LK001UpdateFriendRequestStatusStorage().runUp {
migration.fulfill()
}
self.wait(for: [migration], timeout: 5.0)
storage.dbReadWriteConnection.readWrite { transaction in
for (hexEncodedPublicKey, threadFriendRequestStatus) in hexEncodedPublicKeyMapping {
let expectedFriendRequestStatus = friendRequestMappings[threadFriendRequestStatus]!
let friendRequestStatus = self.storage.getFriendRequestStatus(for: hexEncodedPublicKey, transaction: transaction)
XCTAssertEqual(friendRequestStatus, expectedFriendRequestStatus, "Expected friend request status \(friendRequestStatus.rawValue) to match \(expectedFriendRequestStatus.rawValue)")
}
}
}
}