@ 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 )
}
}
// W a i t f o r t h e m i g r a t i o n t o c o m p l e t e
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 ) . " )
}
}
}
}