Skip to content
Snippets Groups Projects
MessengerDestroyTests.swift 5.96 KiB
Newer Older
import CustomDump
import XCTest
import XXClient
@testable import XXMessengerClient

final class MessengerDestroyTests: XCTestCase {
  func testDestroy() throws {
    let storageDir = "test-storage-dir"
    var hasRunningProcesses: [Bool] = [true, true, false]
    var didStopNetworkFollower = 0
    var didSleep: [TimeInterval] = []
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    var didRemoveItem: [String] = []
    var didSetFileTransfer: [FileTransfer?] = []
    var didSetBackup: [Backup?] = []
    var didSetUD: [UserDiscovery?] = []
    var didSetE2E: [E2E?] = []
    var didSetCMix: [CMix?] = []
    var didRemovePassword = 0
    var didSetIsListeningForMessages: [Bool] = []
    var didSetServiceList: [MessageServiceList?] = []

    var env: MessengerEnvironment = .unimplemented
    env.cMix.get = {
      var cMix: CMix = .unimplemented
      cMix.networkFollowerStatus.run = { .running }
      cMix.stopNetworkFollower.run = { didStopNetworkFollower += 1 }
      cMix.hasRunningProcesses.run = { hasRunningProcesses.removeFirst() }
      return cMix
    }
    env.sleep = { didSleep.append($0) }
    env.storageDir = storageDir
    env.fileTransfer.set = { didSetFileTransfer.append($0) }
    env.backup.set = { didSetBackup.append($0) }
    env.ud.set = { didSetUD.append($0) }
    env.e2e.set = { didSetE2E.append($0) }
    env.cMix.set = { didSetCMix.append($0) }
    env.isListeningForMessages.set = { didSetIsListeningForMessages.append($0) }
    env.serviceList.set = { didSetServiceList.append($0) }
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    env.fileManager.removeItem = { didRemoveItem.append($0) }
    env.passwordStorage.remove = { didRemovePassword += 1 }
    let destroy: MessengerDestroy = .live(env)

    try destroy()

    XCTAssertNoDifference(didStopNetworkFollower, 1)
    XCTAssertNoDifference(didSleep, [1, 1])
    XCTAssertNoDifference(didSetFileTransfer.map { $0 == nil }, [true])
    XCTAssertNoDifference(didSetBackup.map { $0 == nil }, [true])
    XCTAssertNoDifference(didSetUD.map { $0 == nil }, [true])
    XCTAssertNoDifference(didSetE2E.map { $0 == nil }, [true])
    XCTAssertNoDifference(didSetCMix.map { $0 == nil }, [true])
    XCTAssertNoDifference(didSetIsListeningForMessages, [false])
    XCTAssertNoDifference(didSetServiceList.map { $0 == nil }, [true])
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    XCTAssertNoDifference(didRemoveItem, [storageDir])
    XCTAssertNoDifference(didRemovePassword, 1)
  func testStopNetworkFollowerFailure() {
    struct Error: Swift.Error, Equatable {}
    let error = Error()
    var env: MessengerEnvironment = .unimplemented
    env.cMix.get = {
      var cMix: CMix = .unimplemented
      cMix.networkFollowerStatus.run = { .running }
      cMix.stopNetworkFollower.run = { throw error }
      return cMix
    }
    let destroy: MessengerDestroy = .live(env)

    XCTAssertThrowsError(try destroy()) { err in
      XCTAssertEqual(err as? Error, error)
    }
  }

  func testRemoveDirectoryFailure() {
    struct Error: Swift.Error, Equatable {}
    let error = Error()
    var didSetFileTransfer: [FileTransfer?] = []
    var didSetBackup: [Backup?] = []
    var didSetUD: [UserDiscovery?] = []
    var didSetE2E: [E2E?] = []
    var didSetCMix: [CMix?] = []
    var didSetIsListeningForMessages: [Bool] = []
    var didSetServiceList: [MessageServiceList?] = []

    var env: MessengerEnvironment = .unimplemented
    env.cMix.get = { nil }
    env.fileTransfer.set = { didSetFileTransfer.append($0) }
    env.backup.set = { didSetBackup.append($0) }
    env.ud.set = { didSetUD.append($0) }
    env.e2e.set = { didSetE2E.append($0) }
    env.cMix.set = { didSetCMix.append($0) }
    env.isListeningForMessages.set = { didSetIsListeningForMessages.append($0) }
    env.serviceList.set = { didSetServiceList.append($0) }
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    env.fileManager.removeItem = { _ in throw error }
    let destroy: MessengerDestroy = .live(env)

    XCTAssertThrowsError(try destroy()) { err in
      XCTAssertEqual(err as? Error, error)
    }
    XCTAssertNoDifference(didSetFileTransfer.map { $0 == nil }, [true])
    XCTAssertNoDifference(didSetBackup.map { $0 == nil }, [true])
    XCTAssertNoDifference(didSetUD.map { $0 == nil }, [true])
    XCTAssertNoDifference(didSetE2E.map { $0 == nil }, [true])
    XCTAssertNoDifference(didSetCMix.map { $0 == nil }, [true])
    XCTAssertNoDifference(didSetIsListeningForMessages, [false])
    XCTAssertNoDifference(didSetServiceList.map { $0 == nil }, [true])

  func testRemovePasswordFailure() {
    struct Error: Swift.Error, Equatable {}
    let error = Error()
    let storageDir = "test-storage-dir"
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    var didRemoveItem: [String] = []
    var didSetFileTransfer: [FileTransfer?] = []
    var didSetBackup: [Backup?] = []
    var didSetUD: [UserDiscovery?] = []
    var didSetE2E: [E2E?] = []
    var didSetCMix: [CMix?] = []
    var didSetIsListeningForMessages: [Bool] = []
    var didSetServiceList: [MessageServiceList?] = []

    var env: MessengerEnvironment = .unimplemented
    env.cMix.get = { nil }
    env.fileTransfer.set = { didSetFileTransfer.append($0) }
    env.backup.set = { didSetBackup.append($0) }
    env.ud.set = { didSetUD.append($0) }
    env.e2e.set = { didSetE2E.append($0) }
    env.cMix.set = { didSetCMix.append($0) }
    env.isListeningForMessages.set = { didSetIsListeningForMessages.append($0) }
    env.serviceList.set = { didSetServiceList.append($0) }
    env.storageDir = storageDir
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    env.fileManager.removeItem = { didRemoveItem.append($0) }
    env.passwordStorage.remove = { throw error }
    let destroy: MessengerDestroy = .live(env)

    XCTAssertThrowsError(try destroy()) { err in
      XCTAssertEqual(err as? Error, error)
    }
    XCTAssertNoDifference(didSetFileTransfer.map { $0 == nil }, [true])
    XCTAssertNoDifference(didSetBackup.map { $0 == nil }, [true])
    XCTAssertNoDifference(didSetUD.map { $0 == nil }, [true])
    XCTAssertNoDifference(didSetE2E.map { $0 == nil }, [true])
    XCTAssertNoDifference(didSetCMix.map { $0 == nil }, [true])
    XCTAssertNoDifference(didSetIsListeningForMessages, [false])
    XCTAssertNoDifference(didSetServiceList.map { $0 == nil }, [true])
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    XCTAssertNoDifference(didRemoveItem, [storageDir])