session-ios/SignalMessaging/Loki/Migrations/LK001UpdateFriendRequestSta...

57 lines
2.3 KiB
Swift

@testable import SignalServiceKit
import XCTest
import Curve25519Kit
class LK001UpdateFriendRequestStatusStorageTest : XCTestCase {
private var storage: OWSPrimaryStorage { OWSPrimaryStorage.shared() }
override func setUp() {
super.setUp()
LokiTestUtilities.setUpMockEnvironment()
}
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 the migration to complete
let migration = self.expectation(description: "Migration")
LK001UpdateFriendRequestStatusStorage().runUp {
migration.fulfill()
}
wait(for: [ migration ], timeout: 5)
storage.dbReadConnection.read { 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).")
}
}
}
}