Skip to content
Snippets Groups Projects
Commit 948c14b0 authored by Dariusz Rybicki's avatar Dariusz Rybicki
Browse files

Merge branch 'fix/messenger-destroy' into 'development'

Update MessengerDestory

See merge request elixxir/elixxir-dapps-sdk-swift!59
parents be589319 637d1b4f
No related branches found
No related tags found
2 merge requests!102Release 1.0.0,!59Update MessengerDestory
......@@ -8,19 +8,23 @@ public struct PasswordStorage {
public init(
save: @escaping (Data) throws -> Void,
load: @escaping () throws -> Data
load: @escaping () throws -> Data,
remove: @escaping () throws -> Void
) {
self.save = save
self.load = load
self.remove = remove
}
public var save: (Data) throws -> Void
public var load: () throws -> Data
public var remove: () throws -> Void
}
extension PasswordStorage {
public static let unimplemented = PasswordStorage(
save: XCTUnimplemented("\(Self.self).save"),
load: XCTUnimplemented("\(Self.self).load")
load: XCTUnimplemented("\(Self.self).load"),
remove: XCTUnimplemented("\(Self.self).remove")
)
}
......@@ -15,16 +15,15 @@ extension MessengerDestroy {
if cMix.networkFollowerStatus() == .running {
try cMix.stopNetworkFollower()
}
var hasRunningProcesses = cMix.hasRunningProcesses()
while hasRunningProcesses {
while cMix.hasRunningProcesses() {
env.sleep(1)
hasRunningProcesses = cMix.hasRunningProcesses()
}
}
env.ud.set(nil)
env.e2e.set(nil)
env.cMix.set(nil)
try env.fileManager.removeDirectory(env.storageDir)
try env.passwordStorage.remove()
}
}
}
......
......@@ -3,18 +3,20 @@ import XXClient
extension PasswordStorage {
public static let keychain: PasswordStorage = {
let keychain = KeychainAccess.Keychain(
service: "xx.network.client.messenger"
)
let keychain = KeychainAccess.Keychain(service: "xx.network.client.messenger")
let key = "password"
return PasswordStorage(
save: { password in
keychain[data: "password"] = password
keychain[data: key] = password
},
load: {
guard let password = keychain[data: "password"] else {
guard let password = keychain[data: key] else {
throw MissingPasswordError()
}
return password
},
remove: {
try keychain.remove(key)
}
)
}()
......
......@@ -13,6 +13,7 @@ final class MessengerDestroyTests: XCTestCase {
var didSetUD: [UserDiscovery?] = []
var didSetE2E: [E2E?] = []
var didSetCMix: [CMix?] = []
var didRemovePassword = 0
var env: MessengerEnvironment = .unimplemented
env.cMix.get = {
......@@ -28,6 +29,7 @@ final class MessengerDestroyTests: XCTestCase {
env.e2e.set = { didSetE2E.append($0) }
env.cMix.set = { didSetCMix.append($0) }
env.fileManager.removeDirectory = { didRemoveDirectory.append($0) }
env.passwordStorage.remove = { didRemovePassword += 1 }
let destroy: MessengerDestroy = .live(env)
try destroy()
......@@ -38,11 +40,13 @@ final class MessengerDestroyTests: XCTestCase {
XCTAssertNoDifference(didSetE2E.map { $0 == nil }, [true])
XCTAssertNoDifference(didSetCMix.map { $0 == nil }, [true])
XCTAssertNoDifference(didRemoveDirectory, [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
......@@ -79,4 +83,32 @@ final class MessengerDestroyTests: XCTestCase {
XCTAssertNoDifference(didSetE2E.map { $0 == nil }, [true])
XCTAssertNoDifference(didSetCMix.map { $0 == nil }, [true])
}
func testRemovePasswordFailure() {
struct Error: Swift.Error, Equatable {}
let error = Error()
let storageDir = "test-storage-dir"
var didRemoveDirectory: [String] = []
var didSetUD: [UserDiscovery?] = []
var didSetE2E: [E2E?] = []
var didSetCMix: [CMix?] = []
var env: MessengerEnvironment = .unimplemented
env.cMix.get = { nil }
env.ud.set = { didSetUD.append($0) }
env.e2e.set = { didSetE2E.append($0) }
env.cMix.set = { didSetCMix.append($0) }
env.storageDir = storageDir
env.fileManager.removeDirectory = { didRemoveDirectory.append($0) }
env.passwordStorage.remove = { throw error }
let destroy: MessengerDestroy = .live(env)
XCTAssertThrowsError(try destroy()) { err in
XCTAssertEqual(err as? Error, error)
}
XCTAssertNoDifference(didSetUD.map { $0 == nil }, [true])
XCTAssertNoDifference(didSetE2E.map { $0 == nil }, [true])
XCTAssertNoDifference(didSetCMix.map { $0 == nil }, [true])
XCTAssertNoDifference(didRemoveDirectory, [storageDir])
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment