From dea884d857a97874d53968aa01e7a6c6c207e736 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Mon, 29 Aug 2022 11:22:39 +0100 Subject: [PATCH] Add MessengerDestroy functor --- .../Messenger/Functors/MessengerDestroy.swift | 26 ++++++++++++ .../Messenger/Messenger.swift | 7 +++- .../Functors/MessengerDestroyTests.swift | 42 +++++++++++++++++++ 3 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 Sources/XXMessengerClient/Messenger/Functors/MessengerDestroy.swift create mode 100644 Tests/XXMessengerClientTests/Messenger/Functors/MessengerDestroyTests.swift diff --git a/Sources/XXMessengerClient/Messenger/Functors/MessengerDestroy.swift b/Sources/XXMessengerClient/Messenger/Functors/MessengerDestroy.swift new file mode 100644 index 00000000..e584cf1a --- /dev/null +++ b/Sources/XXMessengerClient/Messenger/Functors/MessengerDestroy.swift @@ -0,0 +1,26 @@ +import XCTestDynamicOverlay + +public struct MessengerDestroy { + public var run: () throws -> Void + + public func callAsFunction() throws -> Void { + try run() + } +} + +extension MessengerDestroy { + public static func live(_ env: MessengerEnvironment) -> MessengerDestroy { + MessengerDestroy { + try env.fileManager.removeDirectory(env.storageDir) + env.ud.set(nil) + env.e2e.set(nil) + env.cMix.set(nil) + } + } +} + +extension MessengerDestroy { + public static let unimplemented = MessengerDestroy( + run: XCTUnimplemented("\(Self.self)") + ) +} diff --git a/Sources/XXMessengerClient/Messenger/Messenger.swift b/Sources/XXMessengerClient/Messenger/Messenger.swift index c9563fe8..652eda39 100644 --- a/Sources/XXMessengerClient/Messenger/Messenger.swift +++ b/Sources/XXMessengerClient/Messenger/Messenger.swift @@ -18,6 +18,7 @@ public struct Messenger { public var logIn: MessengerLogIn public var waitForNetwork: MessengerWaitForNetwork public var waitForNodes: MessengerWaitForNodes + public var destroy: MessengerDestroy } extension Messenger { @@ -39,7 +40,8 @@ extension Messenger { isLoggedIn: .live(env), logIn: .live(env), waitForNetwork: .live(env), - waitForNodes: .live(env) + waitForNodes: .live(env), + destroy: .live(env) ) } } @@ -62,6 +64,7 @@ extension Messenger { isLoggedIn: .unimplemented, logIn: .unimplemented, waitForNetwork: .unimplemented, - waitForNodes: .unimplemented + waitForNodes: .unimplemented, + destroy: .unimplemented ) } diff --git a/Tests/XXMessengerClientTests/Messenger/Functors/MessengerDestroyTests.swift b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerDestroyTests.swift new file mode 100644 index 00000000..810214ca --- /dev/null +++ b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerDestroyTests.swift @@ -0,0 +1,42 @@ +import CustomDump +import XCTest +import XXClient +@testable import XXMessengerClient + +final class MessengerDestroyTests: XCTestCase { + func testDestroy() throws { + let storageDir = "test-storage-dir" + var didRemoveDirectory: [String] = [] + var didSetUD: [UserDiscovery?] = [] + var didSetE2E: [E2E?] = [] + var didSetCMix: [CMix?] = [] + + var env: MessengerEnvironment = .unimplemented + env.storageDir = storageDir + env.fileManager.removeDirectory = { didRemoveDirectory.append($0) } + env.ud.set = { didSetUD.append($0) } + env.e2e.set = { didSetE2E.append($0) } + env.cMix.set = { didSetCMix.append($0) } + let destroy: MessengerDestroy = .live(env) + + try destroy() + + XCTAssertNoDifference(didRemoveDirectory, [storageDir]) + XCTAssertNoDifference(didSetUD.map { $0 == nil }, [true]) + XCTAssertNoDifference(didSetE2E.map { $0 == nil }, [true]) + XCTAssertNoDifference(didSetCMix.map { $0 == nil }, [true]) + } + + func testRemoveDirectoryFailure() { + struct Error: Swift.Error, Equatable {} + let error = Error() + + var env: MessengerEnvironment = .unimplemented + env.fileManager.removeDirectory = { _ in throw error } + let destroy: MessengerDestroy = .live(env) + + XCTAssertThrowsError(try destroy()) { err in + XCTAssertEqual(err as? Error, error) + } + } +} -- GitLab