diff --git a/Loki/FriendRequestProtocolTests.swift b/Loki/FriendRequestProtocolTests.swift
deleted file mode 100644
index b12d1741f..000000000
--- a/Loki/FriendRequestProtocolTests.swift
+++ /dev/null
@@ -1,655 +0,0 @@
-import CryptoSwift
-import PromiseKit
-@testable import SignalServiceKit
-import XCTest
-import Curve25519Kit
-
-class FriendRequestProtocolTests : XCTestCase {
-
- private var storage: OWSPrimaryStorage { OWSPrimaryStorage.shared() }
- private var messageSender: OWSFakeMessageSender { MockSSKEnvironment.shared.messageSender as! OWSFakeMessageSender }
-
- // MARK: - Setup
- override func setUp() {
- super.setUp()
-
- LokiTestUtilities.setUpMockEnvironment()
- }
-
- // MARK: - Helpers
- func isFriendRequestStatus(oneOf values: [LKFriendRequestStatus], for hexEncodedPublicKey: String, transaction: YapDatabaseReadWriteTransaction) -> Bool {
- let status = storage.getFriendRequestStatus(for: hexEncodedPublicKey, transaction: transaction)
- return values.contains(status)
- }
-
- func isFriendRequestStatus(_ value: LKFriendRequestStatus, for hexEncodedPublicKey: String, transaction: YapDatabaseReadWriteTransaction) -> Bool {
- return isFriendRequestStatus(oneOf: [ value ], for: hexEncodedPublicKey, transaction: transaction)
- }
-
- // MARK: - shouldInputBarBeEnabled
- func test_shouldInputBarBeEnabledReturnsTrueOnGroupThread() {
- let allGroupTypes: [GroupType] = [ .closedGroup, .openGroup, .rssFeed ]
- for groupType in allGroupTypes {
- guard let groupThread = LokiTestUtilities.createGroupThread(groupType: groupType) else { return XCTFail() }
- XCTAssertTrue(FriendRequestProtocol.shouldInputBarBeEnabled(for: groupThread))
- }
- }
-
- func test_shouldInputBarBeEnabledReturnsTrueOnNoteToSelf() {
- guard let master = OWSIdentityManager.shared().identityKeyPair()?.hexEncodedPublicKey else { return XCTFail() }
- let slave = LokiTestUtilities.generateHexEncodedPublicKey()
-
- guard let masterDevice = LokiTestUtilities.getDevice(for: master) else { return XCTFail() }
- guard let slaveDevice = LokiTestUtilities.getDevice(for: slave) else { return XCTFail() }
-
- let deviceLink = DeviceLink(between: masterDevice, and: slaveDevice)
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.addDeviceLink(deviceLink, in: transaction)
- self.storage.setFriendRequestStatus(.requestSent, for: master, transaction: transaction)
- self.storage.setFriendRequestStatus(.requestSent, for: slave, transaction: transaction)
- }
-
- let masterThread = LokiTestUtilities.createContactThread(for: master)
- let slaveThread = LokiTestUtilities.createContactThread(for: slave)
-
- XCTAssertTrue(FriendRequestProtocol.shouldInputBarBeEnabled(for: masterThread))
- XCTAssertTrue(FriendRequestProtocol.shouldInputBarBeEnabled(for: slaveThread))
- }
-
- func test_shouldInputBarBeEnabledReturnsTrueWhenStatusIsNotPending() {
- let statuses: [LKFriendRequestStatus] = [ .none, .requestExpired, .friends ]
- let device = LokiTestUtilities.generateHexEncodedPublicKey()
- let thread = LokiTestUtilities.createContactThread(for: device)
-
- for status in statuses {
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.setFriendRequestStatus(status, for: device, transaction: transaction)
- }
-
- XCTAssertTrue(FriendRequestProtocol.shouldInputBarBeEnabled(for: thread))
- }
- }
-
- func test_shouldInputBarBeEnabledReturnsFalseWhenStatusIsPending() {
- let statuses: [LKFriendRequestStatus] = [ .requestSending, .requestSent, .requestReceived ]
- let device = LokiTestUtilities.generateHexEncodedPublicKey()
- let thread = LokiTestUtilities.createContactThread(for: device)
-
- for status in statuses {
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.setFriendRequestStatus(status, for: device, transaction: transaction)
- }
-
- XCTAssertFalse(FriendRequestProtocol.shouldInputBarBeEnabled(for: thread))
- }
- }
-
- func test_shouldInputBarBeEnabledReturnsTrueWhenFriendsWithOneLinkedDevice() {
- let master = LokiTestUtilities.generateHexEncodedPublicKey()
- let slave = LokiTestUtilities.generateHexEncodedPublicKey()
-
- guard let masterDevice = LokiTestUtilities.getDevice(for: master) else { return XCTFail() }
- guard let slaveDevice = LokiTestUtilities.getDevice(for: slave) else { return XCTFail() }
-
- let deviceLink = DeviceLink(between: masterDevice, and: slaveDevice)
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.addDeviceLink(deviceLink, in: transaction)
- self.storage.setFriendRequestStatus(.friends, for: master, transaction: transaction)
- self.storage.setFriendRequestStatus(.requestSent, for: slave, transaction: transaction)
- }
-
- let masterThread = LokiTestUtilities.createContactThread(for: master)
- let slaveThread = LokiTestUtilities.createContactThread(for: slave)
-
- XCTAssertTrue(FriendRequestProtocol.shouldInputBarBeEnabled(for: masterThread))
- XCTAssertTrue(FriendRequestProtocol.shouldInputBarBeEnabled(for: slaveThread))
- }
-
- func test_shouldInputBarBeEnabledReturnsFalseWhenOneLinkedDeviceIsPending() {
- let master = LokiTestUtilities.generateHexEncodedPublicKey()
- let slave = LokiTestUtilities.generateHexEncodedPublicKey()
-
- guard let masterDevice = LokiTestUtilities.getDevice(for: master) else { return XCTFail() }
- guard let slaveDevice = LokiTestUtilities.getDevice(for: slave) else { return XCTFail() }
-
- let deviceLink = DeviceLink(between: masterDevice, and: slaveDevice)
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.addDeviceLink(deviceLink, in: transaction)
- self.storage.setFriendRequestStatus(.none, for: master, transaction: transaction)
- }
-
- let masterThread = LokiTestUtilities.createContactThread(for: master)
- let slaveThread = LokiTestUtilities.createContactThread(for: slave)
-
- let statuses: [LKFriendRequestStatus] = [ .requestSending, .requestSent, .requestReceived ]
- for status in statuses {
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.setFriendRequestStatus(status, for: slave, transaction: transaction)
- }
-
- XCTAssertFalse(FriendRequestProtocol.shouldInputBarBeEnabled(for: masterThread))
- XCTAssertFalse(FriendRequestProtocol.shouldInputBarBeEnabled(for: slaveThread))
- }
- }
-
- func test_shouldInputBarBeEnabledReturnsTrueWhenAllLinkedDevicesAreNotPendingAndNotFriends() {
- let master = LokiTestUtilities.generateHexEncodedPublicKey()
- let slave = LokiTestUtilities.generateHexEncodedPublicKey()
-
- guard let masterDevice = LokiTestUtilities.getDevice(for: master) else { return XCTFail() }
- guard let slaveDevice = LokiTestUtilities.getDevice(for: slave) else { return XCTFail() }
-
- let deviceLink = DeviceLink(between: masterDevice, and: slaveDevice)
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.addDeviceLink(deviceLink, in: transaction)
- self.storage.setFriendRequestStatus(.none, for: master, transaction: transaction)
- self.storage.setFriendRequestStatus(.none, for: slave, transaction: transaction)
- }
-
- let masterThread = LokiTestUtilities.createContactThread(for: master)
- let slaveThread = LokiTestUtilities.createContactThread(for: slave)
-
- let statuses: [LKFriendRequestStatus] = [ .requestExpired, .none ]
- for status in statuses {
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.setFriendRequestStatus(status, for: slave, transaction: transaction)
- }
-
- XCTAssertTrue(FriendRequestProtocol.shouldInputBarBeEnabled(for: masterThread))
- XCTAssertTrue(FriendRequestProtocol.shouldInputBarBeEnabled(for: slaveThread))
- }
- }
-
- func test_shouldInputBarEnabledShouldStillWorkIfLinkedDeviceThreadDoesNotExist() {
- let master = LokiTestUtilities.generateHexEncodedPublicKey()
- let slave = LokiTestUtilities.generateHexEncodedPublicKey()
-
- guard let masterDevice = LokiTestUtilities.getDevice(for: master) else { return XCTFail() }
- guard let slaveDevice = LokiTestUtilities.getDevice(for: slave) else { return XCTFail() }
-
- let deviceLink = DeviceLink(between: masterDevice, and: slaveDevice)
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.addDeviceLink(deviceLink, in: transaction)
- self.storage.setFriendRequestStatus(.requestSent, for: master, transaction: transaction)
- self.storage.setFriendRequestStatus(.friends, for: slave, transaction: transaction)
- }
-
- let masterThread = LokiTestUtilities.createContactThread(for: master)
-
- XCTAssertTrue(FriendRequestProtocol.shouldInputBarBeEnabled(for: masterThread))
- }
-
- // MARK: - shouldAttachmentButtonBeEnabled
- func test_shouldAttachmentButtonBeEnabledReturnsTrueOnGroupThread() {
- let allGroupTypes: [GroupType] = [ .closedGroup, .openGroup, .rssFeed ]
- for groupType in allGroupTypes {
- guard let groupThread = LokiTestUtilities.createGroupThread(groupType: groupType) else { return XCTFail() }
- XCTAssertTrue(FriendRequestProtocol.shouldAttachmentButtonBeEnabled(for: groupThread))
- }
- }
-
- func test_shouldAttachmentButtonBeEnabledReturnsTrueOnNoteToSelf() {
- guard let master = OWSIdentityManager.shared().identityKeyPair()?.hexEncodedPublicKey else { return XCTFail() }
- let slave = LokiTestUtilities.generateHexEncodedPublicKey()
-
- guard let masterDevice = LokiTestUtilities.getDevice(for: master) else { return XCTFail() }
- guard let slaveDevice = LokiTestUtilities.getDevice(for: slave) else { return XCTFail() }
-
- let deviceLink = DeviceLink(between: masterDevice, and: slaveDevice)
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.addDeviceLink(deviceLink, in: transaction)
- self.storage.setFriendRequestStatus(.requestSent, for: master, transaction: transaction)
- self.storage.setFriendRequestStatus(.requestSent, for: slave, transaction: transaction)
- }
-
- let masterThread = LokiTestUtilities.createContactThread(for: master)
- let slaveThread = LokiTestUtilities.createContactThread(for: slave)
-
- XCTAssertTrue(FriendRequestProtocol.shouldAttachmentButtonBeEnabled(for: masterThread))
- XCTAssertTrue(FriendRequestProtocol.shouldAttachmentButtonBeEnabled(for: slaveThread))
- }
-
- func test_shouldAttachmentButtonBeEnabledReturnsTrueWhenFriends() {
- let device = LokiTestUtilities.generateHexEncodedPublicKey()
- let thread = LokiTestUtilities.createContactThread(for: device)
-
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.setFriendRequestStatus(.friends, for: device, transaction: transaction)
- }
-
- XCTAssertTrue(FriendRequestProtocol.shouldAttachmentButtonBeEnabled(for: thread))
- }
-
- func test_shouldAttachmentButtonBeEnabledReturnsFalseWhenNotFriends() {
- let statuses: [LKFriendRequestStatus] = [ .requestSending, .requestSent, .requestReceived, .none, .requestExpired ]
- let device = LokiTestUtilities.generateHexEncodedPublicKey()
- let thread = LokiTestUtilities.createContactThread(for: device)
-
- for status in statuses {
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.setFriendRequestStatus(status, for: device, transaction: transaction)
- }
-
- XCTAssertFalse(FriendRequestProtocol.shouldAttachmentButtonBeEnabled(for: thread))
- }
- }
-
- func test_shouldAttachmentButtonBeEnabledReturnsTrueWhenFriendsWithOneLinkedDevice() {
- let master = LokiTestUtilities.generateHexEncodedPublicKey()
- let slave = LokiTestUtilities.generateHexEncodedPublicKey()
-
- guard let masterDevice = LokiTestUtilities.getDevice(for: master) else { return XCTFail() }
- guard let slaveDevice = LokiTestUtilities.getDevice(for: slave) else { return XCTFail() }
-
- let deviceLink = DeviceLink(between: masterDevice, and: slaveDevice)
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.addDeviceLink(deviceLink, in: transaction)
- self.storage.setFriendRequestStatus(.friends, for: master, transaction: transaction)
- self.storage.setFriendRequestStatus(.requestSent, for: slave, transaction: transaction)
- }
-
- let masterThread = LokiTestUtilities.createContactThread(for: master)
- let slaveThread = LokiTestUtilities.createContactThread(for: slave)
-
- XCTAssertTrue(FriendRequestProtocol.shouldAttachmentButtonBeEnabled(for: masterThread))
- XCTAssertTrue(FriendRequestProtocol.shouldAttachmentButtonBeEnabled(for: slaveThread))
- }
-
- func test_shouldAttachmentButtonBeEnabledShouldStillWorkIfLinkedDeviceThreadDoesNotExist() {
- let master = LokiTestUtilities.generateHexEncodedPublicKey()
- let slave = LokiTestUtilities.generateHexEncodedPublicKey()
-
- guard let masterDevice = LokiTestUtilities.getDevice(for: master) else { return XCTFail() }
- guard let slaveDevice = LokiTestUtilities.getDevice(for: slave) else { return XCTFail() }
-
- let deviceLink = DeviceLink(between: masterDevice, and: slaveDevice)
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.addDeviceLink(deviceLink, in: transaction)
- self.storage.setFriendRequestStatus(.none, for: master, transaction: transaction)
- self.storage.setFriendRequestStatus(.friends, for: slave, transaction: transaction)
- }
-
- let masterThread = LokiTestUtilities.createContactThread(for: master)
-
- XCTAssertTrue(FriendRequestProtocol.shouldAttachmentButtonBeEnabled(for: masterThread))
- }
-
- // MARK: - getFriendRequestUIState
- func test_getFriendRequestUIStateShouldReturnNoneForGroupThreads() {
- let allGroupTypes: [GroupType] = [ .closedGroup, .openGroup, .rssFeed ]
- for groupType in allGroupTypes {
- guard let groupThread = LokiTestUtilities.createGroupThread(groupType: groupType) else { return XCTFail() }
- XCTAssertTrue(FriendRequestProtocol.getFriendRequestUIStatus(for: groupThread) == .none)
- }
- }
-
- func test_getFriendRequestUIStateShouldReturnNoneOnNoteToSelf() {
- guard let master = OWSIdentityManager.shared().identityKeyPair()?.hexEncodedPublicKey else { return XCTFail() }
- let slave = LokiTestUtilities.generateHexEncodedPublicKey()
-
- guard let masterDevice = LokiTestUtilities.getDevice(for: master) else { return XCTFail() }
- guard let slaveDevice = LokiTestUtilities.getDevice(for: slave) else { return XCTFail() }
-
- let deviceLink = DeviceLink(between: masterDevice, and: slaveDevice)
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.addDeviceLink(deviceLink, in: transaction)
- self.storage.setFriendRequestStatus(.friends, for: master, transaction: transaction)
- self.storage.setFriendRequestStatus(.friends, for: slave, transaction: transaction)
- }
-
- let masterThread = LokiTestUtilities.createContactThread(for: master)
- let slaveThread = LokiTestUtilities.createContactThread(for: slave)
-
- XCTAssertTrue(FriendRequestProtocol.getFriendRequestUIStatus(for: masterThread) == .none)
- XCTAssertTrue(FriendRequestProtocol.getFriendRequestUIStatus(for: slaveThread) == .none )
- }
-
- func test_getFriendRequestUIStateShouldReturnTheCorrectStates() {
- let bob = LokiTestUtilities.generateHexEncodedPublicKey()
- let bobThread = LokiTestUtilities.createContactThread(for: bob)
-
- let expectedStatuses: [LKFriendRequestStatus:FriendRequestProtocol.FriendRequestUIStatus] = [
- .none: .none,
- .requestExpired: .expired,
- .requestSending: .sent,
- .requestSent: .sent,
- .requestReceived: .received,
- .friends: .friends,
- ]
-
- for (friendRequestStatus, uiState) in expectedStatuses {
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.setFriendRequestStatus(friendRequestStatus, for: bob, transaction: transaction)
- }
-
- XCTAssertEqual(FriendRequestProtocol.getFriendRequestUIStatus(for: bobThread), uiState, "Expected FriendRequestUIStatus to be \(uiState).")
- }
- }
-
- func test_getFriendRequestUIStateShouldWorkWithMultiDevice() {
- let master = LokiTestUtilities.generateHexEncodedPublicKey()
- let slave = LokiTestUtilities.generateHexEncodedPublicKey()
-
- guard let masterDevice = LokiTestUtilities.getDevice(for: master) else { return XCTFail() }
- guard let slaveDevice = LokiTestUtilities.getDevice(for: slave) else { return XCTFail() }
-
- let deviceLink = DeviceLink(between: masterDevice, and: slaveDevice)
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.addDeviceLink(deviceLink, in: transaction)
- self.storage.setFriendRequestStatus(.none, for: master, transaction: transaction)
- }
-
- let masterThread = LokiTestUtilities.createContactThread(for: master)
- let slaveThread = LokiTestUtilities.createContactThread(for: slave)
-
- let expectedStatuses: [LKFriendRequestStatus:FriendRequestProtocol.FriendRequestUIStatus] = [
- .none: .none,
- .requestExpired: .expired,
- .requestSending: .sent,
- .requestSent: .sent,
- .requestReceived: .received,
- .friends: .friends,
- ]
-
- for (friendRequestStatus, uiState) in expectedStatuses {
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.setFriendRequestStatus(friendRequestStatus, for: slave, transaction: transaction)
- }
-
- XCTAssertEqual(FriendRequestProtocol.getFriendRequestUIStatus(for: masterThread), uiState, "Expected FriendRequestUIStatus to be \(uiState.rawValue).")
- XCTAssertEqual(FriendRequestProtocol.getFriendRequestUIStatus(for: slaveThread), uiState, "Expected FriendRequestUIStatus to be \(uiState.rawValue).")
- }
- }
-
- func test_getFriendRequestUIStateShouldPreferFriendsOverRequestReceived() {
- // Case: We don't want to confuse the user by showing a friend request box when they're already friends.
- let master = LokiTestUtilities.generateHexEncodedPublicKey()
- let slave = LokiTestUtilities.generateHexEncodedPublicKey()
-
- guard let masterDevice = LokiTestUtilities.getDevice(for: master) else { return XCTFail() }
- guard let slaveDevice = LokiTestUtilities.getDevice(for: slave) else { return XCTFail() }
-
- let masterThread = LokiTestUtilities.createContactThread(for: master)
-
- let deviceLink = DeviceLink(between: masterDevice, and: slaveDevice)
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.addDeviceLink(deviceLink, in: transaction)
- self.storage.setFriendRequestStatus(.requestReceived, for: master, transaction: transaction)
- self.storage.setFriendRequestStatus(.friends, for: slave, transaction: transaction)
- }
-
- XCTAssertTrue(FriendRequestProtocol.getFriendRequestUIStatus(for: masterThread) == .friends)
- }
-
- func test_getFriendRequestUIStateShouldPreferReceivedOverSent() {
- // Case: We sent Bob a friend request and he sent one back to us through another device.
- // If something went wrong then we should be able to fall back to manually accepting the friend request even if we sent one.
- let master = LokiTestUtilities.generateHexEncodedPublicKey()
- let slave = LokiTestUtilities.generateHexEncodedPublicKey()
-
- guard let masterDevice = LokiTestUtilities.getDevice(for: master) else { return XCTFail() }
- guard let slaveDevice = LokiTestUtilities.getDevice(for: slave) else { return XCTFail() }
-
- let masterThread = LokiTestUtilities.createContactThread(for: master)
-
- let deviceLink = DeviceLink(between: masterDevice, and: slaveDevice)
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.addDeviceLink(deviceLink, in: transaction)
- self.storage.setFriendRequestStatus(.requestSent, for: master, transaction: transaction)
- self.storage.setFriendRequestStatus(.requestReceived, for: slave, transaction: transaction)
- }
-
- XCTAssertTrue(FriendRequestProtocol.getFriendRequestUIStatus(for: masterThread) == .received)
- }
-
- // MARK: - acceptFriendRequest
- func test_acceptFriendRequestShouldSetStatusToFriendsIfWeReceivedAFriendRequest() {
- // Case: Bob sent us a friend request, we should become friends with him on accepting.
- let bob = LokiTestUtilities.generateHexEncodedPublicKey()
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.setFriendRequestStatus(.requestReceived, for: bob, transaction: transaction)
- }
-
- storage.dbReadWriteConnection.readWrite { transaction in
- FriendRequestProtocol.acceptFriendRequest(from: bob, using: transaction)
- XCTAssertTrue(self.storage.getFriendRequestStatus(for: bob, transaction: transaction) == .friends)
- }
- }
-
- // TODO: Add test to see if an accept message is sent out
-
- func test_acceptFriendRequestShouldSendAFriendRequestMessageIfStatusIsNoneOrExpired() {
- // Case: Somehow our friend request status doesn't match the UI.
- // Since user accepted then we should send a friend request message.
- let statuses: [LKFriendRequestStatus] = [ .none, .requestExpired ]
- for status in statuses {
- let bob = LokiTestUtilities.generateHexEncodedPublicKey()
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.setFriendRequestStatus(status, for: bob, transaction: transaction)
- }
-
- let expectation = self.expectation(description: "Send message")
-
- let messageSender = self.messageSender
- messageSender.sendMessageWasCalledBlock = { sentMessage in
- guard sentMessage is FriendRequestMessage else {
- return XCTFail("Expected a friend request to be sent, but found: \(sentMessage).")
- }
- expectation.fulfill()
- messageSender.sendMessageWasCalledBlock = nil
- }
-
- storage.dbReadWriteConnection.readWrite { transaction in
- FriendRequestProtocol.acceptFriendRequest(from: bob, using: transaction)
- }
-
- wait(for: [ expectation ], timeout: 1)
- }
- }
-
- func test_acceptFriendRequestShouldNotSendAFriendRequestMessageToOurOwnDevice() {
- let statuses: [LKFriendRequestStatus] = [ .none, .requestExpired ]
- for status in statuses {
- let ourDevice = LokiTestUtilities.getCurrentUserHexEncodedPublicKey()
-
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.setFriendRequestStatus(status, for: ourDevice, transaction: transaction)
- }
-
- let expectation = self.expectation(description: "Send message")
-
- let messageSender = self.messageSender
- messageSender.sendMessageWasCalledBlock = { sentMessage in
- XCTFail("Expected message not to be sent.")
- }
-
- storage.dbReadWriteConnection.readWrite { transaction in
- FriendRequestProtocol.acceptFriendRequest(from: ourDevice, using: transaction)
- }
-
- expectation.fulfillAfter(2)
- wait(for: [ expectation ], timeout: 2)
- messageSender.sendMessageWasCalledBlock = nil
- }
- }
-
- func test_acceptFriendRequestShouldNotDoAnythingIfRequestHasBeenSent() {
- // Case: We sent Bob a friend request.
- // We can't accept because we don't have keys to communicate with Bob.
- let bob = LokiTestUtilities.generateHexEncodedPublicKey()
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.setFriendRequestStatus(.requestSent, for: bob, transaction: transaction)
- }
-
- storage.dbReadWriteConnection.readWrite { transaction in
- FriendRequestProtocol.acceptFriendRequest(from: bob, using: transaction)
- XCTAssertTrue(self.isFriendRequestStatus(.requestSent, for: bob, transaction: transaction))
- }
- }
-
- func test_acceptFriendRequestShouldWorkWithMultiDevice() {
- // Case: Bob sent a friend request from his slave device.
- // Accepting the friend request should set it to friends.
- // We should also send out a friend request to Bob's other devices if possible.
- let master = LokiTestUtilities.generateHexEncodedPublicKey()
- let slave = LokiTestUtilities.generateHexEncodedPublicKey()
- let otherSlave = LokiTestUtilities.generateHexEncodedPublicKey()
-
- guard let masterDevice = LokiTestUtilities.getDevice(for: master) else { return XCTFail() }
- guard let slaveDevice = LokiTestUtilities.getDevice(for: slave) else { return XCTFail() }
- guard let otherSlaveDevice = LokiTestUtilities.getDevice(for: otherSlave) else { return XCTFail() }
-
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.addDeviceLink(DeviceLink(between: masterDevice, and: slaveDevice), in: transaction)
- self.storage.addDeviceLink(DeviceLink(between: masterDevice, and: otherSlaveDevice), in: transaction)
- self.storage.setFriendRequestStatus(.none, for: master, transaction: transaction)
- self.storage.setFriendRequestStatus(.requestReceived, for: slave, transaction: transaction)
- self.storage.setFriendRequestStatus(.requestSent, for: otherSlave, transaction: transaction)
- }
-
- storage.dbReadWriteConnection.readWrite { transaction in
- FriendRequestProtocol.acceptFriendRequest(from: master, using: transaction)
- }
-
- eventually {
- self.storage.dbReadWriteConnection.readWrite { transaction in
- // TODO: Re-enable this case when we split friend request logic from OWSMessageSender
- // XCTAssertTrue(self.isFriendRequestStatus([ .requestSending, .requestSent ], for: master, transaction: transaction))
- XCTAssertTrue(self.isFriendRequestStatus(.friends, for: slave, transaction: transaction))
- XCTAssertTrue(self.isFriendRequestStatus(.requestSent, for: otherSlave, transaction: transaction))
- }
- }
- }
-
- func test_acceptFriendRequestShouldNotChangeStatusIfDevicesAreNotLinked() {
- let alice = LokiTestUtilities.generateHexEncodedPublicKey()
- let bob = LokiTestUtilities.generateHexEncodedPublicKey()
-
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.setFriendRequestStatus(.requestReceived, for: alice, transaction: transaction)
- self.storage.setFriendRequestStatus(.requestReceived, for: bob, transaction: transaction)
- }
-
- storage.dbReadWriteConnection.readWrite { transaction in
- FriendRequestProtocol.acceptFriendRequest(from: alice, using: transaction)
- XCTAssertTrue(self.isFriendRequestStatus(.friends, for: alice, transaction: transaction))
- XCTAssertTrue(self.isFriendRequestStatus(.requestReceived, for: bob, transaction: transaction))
- }
- }
-
- // MARK: - declineFriendRequest
- func test_declineFriendRequestShouldChangeStatusFromReceivedToNone() {
- let bob = LokiTestUtilities.generateHexEncodedPublicKey()
-
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.setFriendRequestStatus(.requestReceived, for: bob, transaction: transaction)
- }
-
- storage.dbReadWriteConnection.readWrite { transaction in
- FriendRequestProtocol.declineFriendRequest(from: bob, using: transaction)
- XCTAssertTrue(self.isFriendRequestStatus(.none, for: bob, transaction: transaction))
- }
- }
-
- func test_declineFriendRequestShouldNotChangeStatusToNoneFromOtherStatuses() {
- let statuses: [LKFriendRequestStatus] = [ .none, .requestSending, .requestSent, .requestExpired, .friends ]
- let bob = LokiTestUtilities.generateHexEncodedPublicKey()
-
- for status in statuses {
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.setFriendRequestStatus(status, for: bob, transaction: transaction)
- }
-
- storage.dbReadWriteConnection.readWrite { transaction in
- FriendRequestProtocol.declineFriendRequest(from: bob, using: transaction)
- XCTAssertTrue(self.isFriendRequestStatus(status, for: bob, transaction: transaction))
- }
- }
- }
-
- func test_declineFriendRequestShouldDeletePreKeyBundleIfNeeded() {
- let shouldExpectDeletedPreKeyBundle: (LKFriendRequestStatus) -> Bool = { status in
- return status == .requestReceived
- }
-
- let statuses: [LKFriendRequestStatus] = [ .none, .requestSending, .requestSent, .requestReceived, .requestExpired, .friends ]
- for status in statuses {
- let bob = LokiTestUtilities.generateHexEncodedPublicKey()
- let bundle = storage.generatePreKeyBundle(forContact: bob)
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.setPreKeyBundle(bundle, forContact: bob, transaction: transaction)
- self.storage.setFriendRequestStatus(status, for: bob, transaction: transaction)
- }
-
- storage.dbReadWriteConnection.readWrite { transaction in
- FriendRequestProtocol.declineFriendRequest(from: bob, using: transaction)
- }
-
- let storedBundle = storage.getPreKeyBundle(forContact: bob)
- if (shouldExpectDeletedPreKeyBundle(status)) {
- XCTAssertNil(storedBundle, "Expected PreKeyBundle to be deleted for friend request status \(status.rawValue).")
- } else {
- XCTAssertNotNil(storedBundle, "Expected PreKeyBundle to not be deleted for friend request status \(status.rawValue).")
- }
- }
- }
-
- func test_declineFriendRequestShouldWorkWithMultipleLinkedDevices() {
- // Case: Bob sends 2 friend requests to Alice.
- // When Alice declines, it should change the statuses from requestReceived to none so friend request logic can be re-triggered.
- let master = LokiTestUtilities.generateHexEncodedPublicKey()
- let slave = LokiTestUtilities.generateHexEncodedPublicKey()
- let otherSlave = LokiTestUtilities.generateHexEncodedPublicKey()
-
- guard let masterDevice = LokiTestUtilities.getDevice(for: master) else { return XCTFail() }
- guard let slaveDevice = LokiTestUtilities.getDevice(for: slave) else { return XCTFail() }
- guard let otherSlaveDevice = LokiTestUtilities.getDevice(for: otherSlave) else { return XCTFail() }
-
- storage.dbReadWriteConnection.readWrite { transaction in
- self.storage.addDeviceLink(DeviceLink(between: masterDevice, and: slaveDevice), in: transaction)
- self.storage.addDeviceLink(DeviceLink(between: masterDevice, and: otherSlaveDevice), in: transaction)
- self.storage.setFriendRequestStatus(.requestSent, for: master, transaction: transaction)
- self.storage.setFriendRequestStatus(.requestReceived, for: slave, transaction: transaction)
- self.storage.setFriendRequestStatus(.requestReceived, for: otherSlave, transaction: transaction)
- }
-
- storage.dbReadWriteConnection.readWrite { transaction in
- FriendRequestProtocol.declineFriendRequest(from: master, using: transaction)
- XCTAssertTrue(self.isFriendRequestStatus(.requestSent, for: master, transaction: transaction))
- XCTAssertTrue(self.isFriendRequestStatus(.none, for: slave, transaction: transaction))
- XCTAssertTrue(self.isFriendRequestStatus(.none, for: otherSlave, transaction: transaction))
- }
- }
-
- // MARK: - shouldUpdateFriendRequestStatus
- func test_shouldUpdateFriendRequestStatusReturnsTheCorrectValue() {
- let thread = LokiTestUtilities.createContactThread(for: LokiTestUtilities.generateHexEncodedPublicKey())
-
- let message = TSOutgoingMessage(in: thread, messageBody: nil, attachmentId: nil)
- let friendRequest = FriendRequestMessage(timestamp: 1, thread: thread, body: "")
- let sessionRequest = SessionRequestMessage(thread: thread)
- guard let deviceLinkRequest = DeviceLinkMessage(in: thread, masterHexEncodedPublicKey: "", slaveHexEncodedPublicKey: "", masterSignature: nil, slaveSignature: Data(capacity: 0)),
- let deviceLinkAuthorisation = DeviceLinkMessage(in: thread, masterHexEncodedPublicKey: "", slaveHexEncodedPublicKey: "", masterSignature: Data(capacity: 0), slaveSignature: Data(capacity: 0)) else { return XCTFail() }
-
- XCTAssertTrue(FriendRequestProtocol.shouldUpdateFriendRequestStatus(from: friendRequest))
- XCTAssertTrue(FriendRequestProtocol.shouldUpdateFriendRequestStatus(from: deviceLinkRequest))
- XCTAssertFalse(FriendRequestProtocol.shouldUpdateFriendRequestStatus(from: message))
- XCTAssertFalse(FriendRequestProtocol.shouldUpdateFriendRequestStatus(from: sessionRequest))
- XCTAssertFalse(FriendRequestProtocol.shouldUpdateFriendRequestStatus(from: deviceLinkAuthorisation))
- }
-
- func test_shouldUpdateFriendRequestStatusReturnsFalseForGroupThreads() {
- let allGroupTypes: [GroupType] = [ .closedGroup, .openGroup, .rssFeed ]
- for groupType in allGroupTypes {
- guard let groupThread = LokiTestUtilities.createGroupThread(groupType: groupType) else { return XCTFail() }
- let friendRequest = FriendRequestMessage(timestamp: 1, thread: groupThread, body: "")
- XCTAssertFalse(FriendRequestProtocol.shouldUpdateFriendRequestStatus(from: friendRequest))
- }
- }
-
- func test_shouldUpdateFriendRequestStatusReturnsFalseForCurrentDevice() {
- let thread = LokiTestUtilities.createContactThread(for: LokiTestUtilities.getCurrentUserHexEncodedPublicKey())
- let friendRequest = FriendRequestMessage(timestamp: 1, thread: thread, body: "")
- XCTAssertFalse(FriendRequestProtocol.shouldUpdateFriendRequestStatus(from: friendRequest))
- }
-}
diff --git a/Loki/MultiDeviceProtocolTests.swift b/Loki/MultiDeviceProtocolTests.swift
index d3e714b8a..8ed82c1b2 100644
--- a/Loki/MultiDeviceProtocolTests.swift
+++ b/Loki/MultiDeviceProtocolTests.swift
@@ -1,3 +1,4 @@
+/*
import PromiseKit
@testable import SignalServiceKit
import XCTest
@@ -59,3 +60,4 @@ class MultiDeviceProtocolTests : XCTestCase {
}
}
}
+ */
diff --git a/Loki/SyncMessagesProtocolTests.swift b/Loki/SyncMessagesProtocolTests.swift
index eccb928a3..aa12ceea8 100644
--- a/Loki/SyncMessagesProtocolTests.swift
+++ b/Loki/SyncMessagesProtocolTests.swift
@@ -1,3 +1,4 @@
+/*
import PromiseKit
@testable import SignalServiceKit
import XCTest
@@ -52,3 +53,4 @@ class SyncMessagesProtocolTests : XCTestCase {
// TODO: Test the case where Bob has multiple devices
}
}
+ */
diff --git a/Signal/Migrating Translations from Android.md b/Signal/Migrating Translations from Android.md
index 3791f83a4..4d9cea24c 100644
--- a/Signal/Migrating Translations from Android.md
+++ b/Signal/Migrating Translations from Android.md
@@ -1,3 +1,5 @@
+TODO: Make a script that does this
+
* Replace → “ = “
* Replace → “;
diff --git a/Signal/src/AppDelegate.m b/Signal/src/AppDelegate.m
index 20727a832..ee4598057 100644
--- a/Signal/src/AppDelegate.m
+++ b/Signal/src/AppDelegate.m
@@ -515,9 +515,6 @@ static NSTimeInterval launchStartedAt;
// Mark all "attempting out" messages as "unsent", i.e. any messages that were not successfully
// sent before the app exited should be marked as failures.
[[[OWSFailedMessagesJob alloc] initWithPrimaryStorage:self.primaryStorage] run];
- // Mark all "incomplete" calls as missed, e.g. any incoming or outgoing calls that were not
- // connected, failed or hung up before the app existed should be marked as missed.
-// [[[OWSIncompleteCallsJob alloc] initWithPrimaryStorage:self.primaryStorage] run];
[[[OWSFailedAttachmentDownloadsJob alloc] initWithPrimaryStorage:self.primaryStorage] run];
});
} else {
@@ -526,8 +523,6 @@ static NSTimeInterval launchStartedAt;
// Unregistered user should have no unread messages. e.g. if you delete your account.
[AppEnvironment.shared.notificationPresenter clearAllNotifications];
-// [self.socketManager requestSocketOpen];
-
UITapGestureRecognizer *gesture =
[[UITapGestureRecognizer alloc] initWithTarget:[Pastelog class] action:@selector(submitLogs)];
gesture.numberOfTapsRequired = 8;
@@ -540,9 +535,6 @@ static NSTimeInterval launchStartedAt;
// At this point, potentially lengthy DB locking migrations could be running.
// Avoid blocking app launch by putting all further possible DB access in async block
dispatch_async(dispatch_get_main_queue(), ^{
-// [self.socketManager requestSocketOpen];
-// [Environment.shared.contactsManager fetchSystemContactsOnceIfAlreadyAuthorized];
-
NSString *userPublicKey = self.tsAccountManager.localNumber;
[self startPollerIfNeeded];
diff --git a/Signal/src/Jobs/MessageFetcherJob.swift b/Signal/src/Jobs/MessageFetcherJob.swift
index 56aa0588b..1b4f0b9fc 100644
--- a/Signal/src/Jobs/MessageFetcherJob.swift
+++ b/Signal/src/Jobs/MessageFetcherJob.swift
@@ -36,18 +36,6 @@ public class MessageFetcherJob: NSObject {
@discardableResult
public func run() -> Promise {
- Logger.debug("")
-
- // Loki: Original code
- // ========
-// guard signalService.isCensorshipCircumventionActive else {
-// Logger.debug("delegating message fetching to SocketManager since we're using normal transport.")
-// TSSocketManager.shared.requestSocketOpen()
-// return Promise.value(())
-// }
- // ========
-
- Logger.info("Fetching messages via REST.")
let promise = fetchUndeliveredMessages().then { promises -> Promise in
let promises = promises.map { promise -> Promise in
return promise.then { envelopes -> Promise in
@@ -68,35 +56,6 @@ public class MessageFetcherJob: NSObject {
}
promise.retainUntilComplete()
return promise
-
- /* Loki: Original code
- * ========
- let promise = self.fetchUndeliveredMessages().then { (envelopes: [SSKProtoEnvelope], more: Bool) -> Promise in
- for envelope in envelopes {
- Logger.info("received envelope.")
- do {
- let envelopeData = try envelope.serializedData()
- self.messageReceiver.handleReceivedEnvelopeData(envelopeData)
- } catch {
- owsFailDebug("failed to serialize envelope")
- }
- self.acknowledgeDelivery(envelope: envelope)
- }
-
- if more {
- Logger.info("fetching more messages.")
- return self.run()
- } else {
- // All finished
- return Promise.value(())
- }
- }
-
- promise.retainUntilComplete()
-
- return promise
- * ========
- */
}
@objc
@@ -199,14 +158,9 @@ public class MessageFetcherJob: NSObject {
}
private func fetchUndeliveredMessages() -> Promise>> {
- // In some cases like deleting an account
- // the backgroud fetch was not stopped
- // so the identityKeyPair can be nil
- let userPublickKey = getUserHexEncodedPublicKey()
- if !userPublickKey.isEmpty {
- return SnodeAPI.getMessages(for: userPublickKey)
- }
- return Promise.value(Set())
+ let userPublickKey = getUserHexEncodedPublicKey() // Can be missing in rare cases
+ guard !userPublickKey.isEmpty else { return Promise.value(Set()) }
+ return SnodeAPI.getMessages(for: userPublickKey)
}
private func acknowledgeDelivery(envelope: SSKProtoEnvelope) {