diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerSetLogLevel.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerSetLogLevel.swift new file mode 100644 index 0000000000000000000000000000000000000000..21e39bd78035438955587c816602956313389fa4 --- /dev/null +++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerSetLogLevel.swift @@ -0,0 +1,22 @@ +import XCTestDynamicOverlay +import XXClient + +public struct MessengerSetLogLevel { + public var run: (LogLevel) throws -> Bool + + public func callAsFunction(_ logLevel: LogLevel) throws -> Bool { + try run(logLevel) + } +} + +extension MessengerSetLogLevel { + public static func live(_ env: MessengerEnvironment) -> MessengerSetLogLevel { + MessengerSetLogLevel(run: env.setLogLevel.run) + } +} + +extension MessengerSetLogLevel { + public static let unimplemented = MessengerSetLogLevel( + run: XCTUnimplemented("\(Self.self)") + ) +} diff --git a/Sources/XXMessengerClient/Messenger/Messenger.swift b/Sources/XXMessengerClient/Messenger/Messenger.swift index 692d81fd9bdb7ee8cb540b9a4f1a844e7541966d..168cd84af606b70c37549b8a524e26f306dca8ec 100644 --- a/Sources/XXMessengerClient/Messenger/Messenger.swift +++ b/Sources/XXMessengerClient/Messenger/Messenger.swift @@ -38,6 +38,7 @@ public struct Messenger { public var resumeBackup: MessengerResumeBackup public var backupParams: MessengerBackupParams public var stopBackup: MessengerStopBackup + public var setLogLevel: MessengerSetLogLevel } extension Messenger { @@ -79,7 +80,8 @@ extension Messenger { startBackup: .live(env), resumeBackup: .live(env), backupParams: .live(env), - stopBackup: .live(env) + stopBackup: .live(env), + setLogLevel: .live(env) ) } } @@ -122,6 +124,7 @@ extension Messenger { startBackup: .unimplemented, resumeBackup: .unimplemented, backupParams: .unimplemented, - stopBackup: .unimplemented + stopBackup: .unimplemented, + setLogLevel: .unimplemented ) } diff --git a/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift b/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift index f019df1618b0985f70936fdeb97e4558060a46eb..bb26093a24d97792904b9a8f5ca974d0c9853d66 100644 --- a/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift +++ b/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift @@ -31,6 +31,7 @@ public struct MessengerEnvironment { public var registerForNotifications: RegisterForNotifications public var resumeBackup: ResumeBackup public var searchUD: SearchUD + public var setLogLevel: SetLogLevel public var sleep: (TimeInterval) -> Void public var storageDir: String public var ud: Stored<UserDiscovery?> @@ -76,6 +77,7 @@ extension MessengerEnvironment { registerForNotifications: .live, resumeBackup: .live, searchUD: .live, + setLogLevel: .live, sleep: { Thread.sleep(forTimeInterval: $0) }, storageDir: MessengerEnvironment.defaultStorageDir, ud: .inMemory(), @@ -116,6 +118,7 @@ extension MessengerEnvironment { registerForNotifications: .unimplemented, resumeBackup: .unimplemented, searchUD: .unimplemented, + setLogLevel: .unimplemented, sleep: XCTUnimplemented("\(Self.self).sleep"), storageDir: "unimplemented", ud: .unimplemented(), diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerSetLogLevelTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerSetLogLevelTests.swift new file mode 100644 index 0000000000000000000000000000000000000000..d6d44d05465f52cc6c9cb7b0a949397d22560b42 --- /dev/null +++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerSetLogLevelTests.swift @@ -0,0 +1,44 @@ +import CustomDump +import XCTest +import XXClient +@testable import XXMessengerClient + +final class MessengerSetLogLevelTests: XCTestCase { + func testSetLogLevel() throws { + var didSetLogLevel: [LogLevel] = [] + var env: MessengerEnvironment = .unimplemented + env.setLogLevel.run = { level in + didSetLogLevel.append(level) + return true + } + let setLogLevel: MessengerSetLogLevel = .live(env) + + let result = try setLogLevel(.debug) + + XCTAssertNoDifference(didSetLogLevel, [.debug]) + XCTAssertNoDifference(result, true) + } + + func testSetLogLevelReturnsFalse() throws { + var env: MessengerEnvironment = .unimplemented + env.setLogLevel.run = { _ in return false } + let setLogLevel: MessengerSetLogLevel = .live(env) + + let result = try setLogLevel(.debug) + + XCTAssertNoDifference(result, false) + } + + func testSetLogLevelFailure() { + struct Failure: Error, Equatable {} + let failure = Failure() + + var env: MessengerEnvironment = .unimplemented + env.setLogLevel.run = { _ in throw failure } + let setLogLevel: MessengerSetLogLevel = .live(env) + + XCTAssertThrowsError(try setLogLevel(.debug)) { error in + XCTAssertNoDifference(error as NSError, failure as NSError) + } + } +}