pull/175/head
nielsandriesse 5 years ago
parent be4c548848
commit 76b5b98038

@ -1,17 +1,13 @@
//
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
import Foundation
import SignalServiceKit
@objc
public class LK001UpdateFriendRequestStatusStorage: OWSDatabaseMigration {
public class LK001UpdateFriendRequestStatusStorage : OWSDatabaseMigration {
// MARK: -
// Increment a similar constant for each migration.
// 100-114 are reserved for signal migrations
// 100-114 are reserved for Signal migrations
@objc
class func migrationId() -> String {
return "001"
@ -25,18 +21,15 @@ public class LK001UpdateFriendRequestStatusStorage: OWSDatabaseMigration {
DispatchQueue.global().async {
self.dbReadWriteConnection().readWrite { transaction in
guard let threads = TSThread.allObjectsInCollection() as? [TSThread] else {
owsFailDebug("Failed to convert objects to TSThread")
owsFailDebug("Failed to convert objects to TSThread.")
return
}
for thread in threads {
guard let thread = thread as? TSContactThread,
let friendRequestStatus = LKFriendRequestStatus(rawValue: thread.friendRequestStatus) else {
continue;
}
let friendRequestStatus = LKFriendRequestStatus(rawValue: thread.friendRequestStatus) else { continue }
OWSPrimaryStorage.shared().setFriendRequestStatus(friendRequestStatus, for: thread.contactIdentifier(), transaction: transaction)
}
}
completion()
}
}

@ -8,11 +8,11 @@ class LK001UpdateFriendRequestStatusStorageTest : XCTestCase {
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)
@ -24,16 +24,16 @@ class LK001UpdateFriendRequestStatusStorageTest : XCTestCase {
func test_shouldMigrateFriendRequestStatusCorrectly() {
typealias ThreadFriendRequestStatus = NSInteger
let friendRequestMappings: [ThreadFriendRequestStatus: LKFriendRequestStatus] = [
0: .none,
1: .requestSending,
2: .requestSent,
3: .requestReceived,
4: .friends,
5: .requestExpired
];
let friendRequestMappings: [ThreadFriendRequestStatus:LKFriendRequestStatus] = [
0 : .none,
1 : .requestSending,
2 : .requestSent,
3 : .requestReceived,
4 : .friends,
5 : .requestExpired
]
var hexEncodedPublicKeyMapping: [String: ThreadFriendRequestStatus] = [:]
var hexEncodedPublicKeyMapping: [String:ThreadFriendRequestStatus] = [:]
for (threadFriendRequestStatus, _) in friendRequestMappings {
let hexEncodedPublicKey = Curve25519.generateKeyPair().hexEncodedPublicKey
hexEncodedPublicKeyMapping[hexEncodedPublicKey] = threadFriendRequestStatus
@ -47,18 +47,18 @@ class LK001UpdateFriendRequestStatusStorageTest : XCTestCase {
}
}
// Wait for migration to complete
// Wait for the migration to complete
let migration = self.expectation(description: "Migration")
LK001UpdateFriendRequestStatusStorage().runUp {
migration.fulfill()
}
self.wait(for: [migration], timeout: 5.0)
wait(for: [ migration ], timeout: 5)
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)")
XCTAssertEqual(friendRequestStatus, expectedFriendRequestStatus, "Expected friend request status \(friendRequestStatus.rawValue) to match \(expectedFriendRequestStatus.rawValue).")
}
}
}

@ -117,7 +117,6 @@ public final class FriendRequestProtocol : NSObject {
sendFriendRequestAcceptanceMessage(to: device, using: transaction)
} else if friendRequestStatus == .requestSent {
// We sent a friend request to this device before, how can we be sure that it hasn't expired?
// TODO: Shouldn't the status then be .expired?
} else if friendRequestStatus == .none || friendRequestStatus == .requestExpired {
// TODO: We should track these so that we can expire them and resend if needed
MultiDeviceProtocol.getAutoGeneratedMultiDeviceFRMessageSend(for: device, in: transaction)

Loading…
Cancel
Save