feat: Moved cli client tests to XCTest to work in docker
Some checks failed
CI / Run Tests (push) Has been cancelled
Some checks failed
CI / Run Tests (push) Has been cancelled
This commit is contained in:
@@ -4,96 +4,139 @@ import Foundation
|
||||
import Logging
|
||||
import Models
|
||||
import MQTTNIO
|
||||
import Testing
|
||||
import XCTest
|
||||
|
||||
@Test
|
||||
func checkTesting() {
|
||||
#expect(Bool(true))
|
||||
}
|
||||
final class CliClientTests: XCTestCase {
|
||||
|
||||
@Test(
|
||||
arguments: [
|
||||
(MQTTClient.Version.v3_1_1, ["3", "3.1", "3.1.1", "00367894"]),
|
||||
(MQTTClient.Version.v5_0, ["5", "5.1", "5.1.1", "00000500012"]),
|
||||
(nil, ["0", "0.1", "0.1.1", "0000000001267894", "blob"])
|
||||
]
|
||||
)
|
||||
func checkParseMQTTVersion(
|
||||
version: MQTTClient.Version?,
|
||||
strings: [String]
|
||||
) {
|
||||
withDependencies {
|
||||
$0.cliClient = .liveValue
|
||||
} operation: {
|
||||
@Dependency(\.cliClient) var cliClient
|
||||
for string in strings {
|
||||
#expect(cliClient.parseMqttClientVersion(string) == version)
|
||||
#expect(cliClient.parseMqttClientVersion("v\(string)") == version)
|
||||
override func invokeTest() {
|
||||
withDependencies {
|
||||
$0.cliClient = .liveValue
|
||||
$0.environment = .liveValue
|
||||
$0.environment.processInfo = { [:] }
|
||||
} operation: {
|
||||
super.invokeTest()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test(
|
||||
arguments: [
|
||||
(Logger.Level.debug, EnvVars(appEnv: .staging, logLevel: nil)),
|
||||
(Logger.Level.debug, EnvVars(appEnv: .development, logLevel: nil)),
|
||||
(Logger.Level.info, EnvVars(appEnv: .production, logLevel: nil)),
|
||||
(Logger.Level.trace, EnvVars(appEnv: .testing, logLevel: nil)),
|
||||
(Logger.Level.info, EnvVars(appEnv: .staging, logLevel: .info)),
|
||||
(Logger.Level.trace, EnvVars(appEnv: .development, logLevel: .trace)),
|
||||
(Logger.Level.warning, EnvVars(appEnv: .production, logLevel: .warning)),
|
||||
(Logger.Level.debug, EnvVars(appEnv: .testing, logLevel: .debug))
|
||||
]
|
||||
)
|
||||
func logLevelFromEnvVars(expectedLevel: Logger.Level, environment: EnvVars) {
|
||||
withDependencies {
|
||||
$0.cliClient = .liveValue
|
||||
} operation: {
|
||||
func testParsingMQTTVersion() {
|
||||
@Dependency(\.cliClient) var cliClient
|
||||
#expect(cliClient.logLevel(environment) == expectedLevel)
|
||||
}
|
||||
}
|
||||
|
||||
@Test(
|
||||
arguments: [
|
||||
(
|
||||
CliClient.EnvVarsRequest(envFilePath: nil, logger: nil, version: nil),
|
||||
EnvVars()
|
||||
),
|
||||
(
|
||||
CliClient.EnvVarsRequest(envFilePath: nil, logger: nil, version: "3"),
|
||||
EnvVars(version: "3")
|
||||
),
|
||||
(
|
||||
CliClient.EnvVarsRequest(
|
||||
envFilePath: "Tests/CliClientTests/test.env",
|
||||
logger: nil,
|
||||
version: nil
|
||||
let arguments = [
|
||||
(MQTTClient.Version.v3_1_1, ["3", "3.1", "3.1.1", "00367894"]),
|
||||
(MQTTClient.Version.v5_0, ["5", "5.1", "5.1.1", "00000500012"]),
|
||||
(nil, ["0", "0.1", "0.1.1", "0000000001267894", "blob"])
|
||||
]
|
||||
|
||||
for (version, strings) in arguments {
|
||||
for string in strings {
|
||||
XCTAssertEqual(cliClient.parseMqttClientVersion(string), version)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func testLogLevelFromEnvironment() {
|
||||
@Dependency(\.cliClient) var cliClient
|
||||
|
||||
let arguments = [
|
||||
(Logger.Level.debug, EnvVars(appEnv: .staging, logLevel: nil)),
|
||||
(Logger.Level.debug, EnvVars(appEnv: .development, logLevel: nil)),
|
||||
(Logger.Level.info, EnvVars(appEnv: .production, logLevel: nil)),
|
||||
(Logger.Level.trace, EnvVars(appEnv: .testing, logLevel: nil)),
|
||||
(Logger.Level.info, EnvVars(appEnv: .staging, logLevel: .info)),
|
||||
(Logger.Level.trace, EnvVars(appEnv: .development, logLevel: .trace)),
|
||||
(Logger.Level.warning, EnvVars(appEnv: .production, logLevel: .warning)),
|
||||
(Logger.Level.debug, EnvVars(appEnv: .testing, logLevel: .debug))
|
||||
]
|
||||
|
||||
for (expected, envVars) in arguments {
|
||||
XCTAssertEqual(expected, cliClient.logLevel(envVars))
|
||||
}
|
||||
}
|
||||
|
||||
func testMakeEnvVars() async throws {
|
||||
@Dependency(\.cliClient) var cliClient
|
||||
@Dependency(\.environment) var environment
|
||||
|
||||
let arguments = [
|
||||
(
|
||||
CliClient.EnvVarsRequest(envFilePath: nil, logger: nil, version: nil),
|
||||
EnvVars()
|
||||
),
|
||||
EnvVars(
|
||||
appEnv: .testing,
|
||||
host: "test.mqtt",
|
||||
port: "1234",
|
||||
identifier: "testing-mqtt",
|
||||
userName: "test-user",
|
||||
password: "super-secret",
|
||||
logLevel: .debug,
|
||||
version: "5.0"
|
||||
(
|
||||
CliClient.EnvVarsRequest(envFilePath: nil, logger: nil, version: "3"),
|
||||
EnvVars(version: "3")
|
||||
),
|
||||
(
|
||||
CliClient.EnvVarsRequest(
|
||||
envFilePath: "test.env", // Needs to be a bundled resource.
|
||||
logger: nil,
|
||||
version: nil
|
||||
),
|
||||
EnvVars.test
|
||||
),
|
||||
(
|
||||
CliClient.EnvVarsRequest(
|
||||
envFilePath: "test-env.json", // Needs to be a bundled resource.
|
||||
logger: nil,
|
||||
version: nil
|
||||
),
|
||||
EnvVars.test
|
||||
)
|
||||
)
|
||||
]
|
||||
)
|
||||
func checkMakeEnvVars(
|
||||
request: CliClient.EnvVarsRequest,
|
||||
expectedEnvVars: EnvVars
|
||||
) async throws {
|
||||
try await withDependencies {
|
||||
$0.cliClient = .liveValue
|
||||
$0.environment = .liveValue
|
||||
$0.environment.processInfo = { [:] }
|
||||
} operation: {
|
||||
@Dependency(\.cliClient) var cliClient
|
||||
let result = try await cliClient.makeEnvVars(request)
|
||||
#expect(result == expectedEnvVars)
|
||||
]
|
||||
|
||||
for (request, expectedEnvVars) in arguments {
|
||||
var request = request
|
||||
if let file = request.envFilePath {
|
||||
request = .init(
|
||||
envFilePath: cleanFilePath(file),
|
||||
logger: request.logger,
|
||||
version: request.mqttClientVersion
|
||||
)
|
||||
}
|
||||
let result = try await cliClient.makeEnvVars(request)
|
||||
XCTAssertEqual(result, expectedEnvVars)
|
||||
}
|
||||
}
|
||||
|
||||
func testFileType() {
|
||||
let arguments = [
|
||||
(EnvironmentDependency.FileType.dotEnv(path: "test.env"), "test.env"),
|
||||
(EnvironmentDependency.FileType.json(path: "test.json"), "test.json"),
|
||||
(nil, "test"),
|
||||
(nil, "")
|
||||
]
|
||||
|
||||
for (expected, file) in arguments {
|
||||
XCTAssertEqual(EnvironmentDependency.FileType(path: file), expected)
|
||||
}
|
||||
}
|
||||
|
||||
func testEnvironmentLiveValueProcessInfo() {
|
||||
let environment = EnvironmentDependency.liveValue
|
||||
XCTAssertEqual(environment.processInfo(), ProcessInfo.processInfo.environment)
|
||||
}
|
||||
}
|
||||
|
||||
// - MARK: Helper
|
||||
|
||||
private func cleanFilePath(_ path: String) -> String {
|
||||
let split = path.split(separator: ".")
|
||||
let fileName = split.first!
|
||||
let ext = split.last!
|
||||
let url = Bundle.module.url(forResource: String(fileName), withExtension: String(ext))!.absoluteString
|
||||
let cleaned = url.split(separator: "file://").last!
|
||||
return String(cleaned)
|
||||
}
|
||||
|
||||
extension EnvVars {
|
||||
static let test = EnvVars(
|
||||
appEnv: .testing,
|
||||
host: "test.mqtt",
|
||||
port: "1234",
|
||||
identifier: "testing-mqtt",
|
||||
userName: "test-user",
|
||||
password: "super-secret",
|
||||
logLevel: .debug,
|
||||
version: "5.0"
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user