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

@ -8,11 +8,11 @@ class LK001UpdateFriendRequestStatusStorageTest : XCTestCase {
override func setUp() { override func setUp() {
super.setUp() super.setUp()
// Activate the mock environment
ClearCurrentAppContextForTests() ClearCurrentAppContextForTests()
SetCurrentAppContext(TestAppContext()) SetCurrentAppContext(TestAppContext())
MockSSKEnvironment.activate() MockSSKEnvironment.activate()
// Register a mock user
let identityManager = OWSIdentityManager.shared() let identityManager = OWSIdentityManager.shared()
let seed = Randomness.generateRandomBytes(16)! let seed = Randomness.generateRandomBytes(16)!
let keyPair = Curve25519.generateKeyPair(fromSeed: seed + seed) let keyPair = Curve25519.generateKeyPair(fromSeed: seed + seed)
@ -24,16 +24,16 @@ class LK001UpdateFriendRequestStatusStorageTest : XCTestCase {
func test_shouldMigrateFriendRequestStatusCorrectly() { func test_shouldMigrateFriendRequestStatusCorrectly() {
typealias ThreadFriendRequestStatus = NSInteger typealias ThreadFriendRequestStatus = NSInteger
let friendRequestMappings: [ThreadFriendRequestStatus: LKFriendRequestStatus] = [ let friendRequestMappings: [ThreadFriendRequestStatus:LKFriendRequestStatus] = [
0: .none, 0 : .none,
1: .requestSending, 1 : .requestSending,
2: .requestSent, 2 : .requestSent,
3: .requestReceived, 3 : .requestReceived,
4: .friends, 4 : .friends,
5: .requestExpired 5 : .requestExpired
]; ]
var hexEncodedPublicKeyMapping: [String: ThreadFriendRequestStatus] = [:] var hexEncodedPublicKeyMapping: [String:ThreadFriendRequestStatus] = [:]
for (threadFriendRequestStatus, _) in friendRequestMappings { for (threadFriendRequestStatus, _) in friendRequestMappings {
let hexEncodedPublicKey = Curve25519.generateKeyPair().hexEncodedPublicKey let hexEncodedPublicKey = Curve25519.generateKeyPair().hexEncodedPublicKey
hexEncodedPublicKeyMapping[hexEncodedPublicKey] = threadFriendRequestStatus 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") let migration = self.expectation(description: "Migration")
LK001UpdateFriendRequestStatusStorage().runUp { LK001UpdateFriendRequestStatusStorage().runUp {
migration.fulfill() migration.fulfill()
} }
self.wait(for: [migration], timeout: 5.0) wait(for: [ migration ], timeout: 5)
storage.dbReadWriteConnection.readWrite { transaction in storage.dbReadWriteConnection.readWrite { transaction in
for (hexEncodedPublicKey, threadFriendRequestStatus) in hexEncodedPublicKeyMapping { for (hexEncodedPublicKey, threadFriendRequestStatus) in hexEncodedPublicKeyMapping {
let expectedFriendRequestStatus = friendRequestMappings[threadFriendRequestStatus]! let expectedFriendRequestStatus = friendRequestMappings[threadFriendRequestStatus]!
let friendRequestStatus = self.storage.getFriendRequestStatus(for: hexEncodedPublicKey, transaction: transaction) 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) sendFriendRequestAcceptanceMessage(to: device, using: transaction)
} else if friendRequestStatus == .requestSent { } else if friendRequestStatus == .requestSent {
// We sent a friend request to this device before, how can we be sure that it hasn't expired? // 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 { } else if friendRequestStatus == .none || friendRequestStatus == .requestExpired {
// TODO: We should track these so that we can expire them and resend if needed // TODO: We should track these so that we can expire them and resend if needed
MultiDeviceProtocol.getAutoGeneratedMultiDeviceFRMessageSend(for: device, in: transaction) MultiDeviceProtocol.getAutoGeneratedMultiDeviceFRMessageSend(for: device, in: transaction)

Loading…
Cancel
Save