Skip to content

Commit fc1d490

Browse files
committed
Fix QueryPerformanceTests
1 parent 069baef commit fc1d490

File tree

1 file changed

+42
-17
lines changed

1 file changed

+42
-17
lines changed

Tests/AppTests/QueryPerformanceTests.swift

Lines changed: 42 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,31 +20,29 @@ import Testing
2020
import Vapor
2121

2222

23-
extension AllTests {
24-
@Suite(
25-
.serialized,
26-
.tags(.performance),
27-
.disabled(if: !runQueryPerformanceTests())
28-
)
29-
struct QueryPerformanceTests { }
30-
}
31-
32-
33-
extension AllTests.QueryPerformanceTests {
23+
@Suite(
24+
.serialized,
25+
.tags(.performance),
26+
.disabled(if: !runQueryPerformanceTests())
27+
)
28+
struct QueryPerformanceTests {
3429
// Set this to true when running locally to convert warnings to test failures for easier updating of values.
3530
static let failOnWarning = false
3631

3732
func withStagingApp(_ test: (Application) async throws -> Void) async throws {
3833
// Update db settings for CI runs in
3934
// https://github.com/SwiftPackageIndex/SwiftPackageIndex-Server/settings/secrets/actions
4035
// or in `.env.staging` for local runs.
41-
let app = try await Application.make(.staging)
36+
let environment = Environment.staging
37+
38+
let host = try await DotEnvFile.databaseHost(for: environment)
39+
try #require(host.hasPrefix("spi-dev-db"))
40+
try #require(host.hasSuffix("postgres.database.azure.com"))
41+
42+
let app = try await Application.make(environment)
4243
app.logger.logLevel = Environment.get("LOG_LEVEL")
4344
.flatMap(Logger.Level.init(rawValue:)) ?? .warning
44-
let host = try await configure(app)
45-
46-
try #require(host.hasPrefix("spi-dev-db"), "was: \(host)")
47-
try #require(host.hasSuffix("postgres.database.azure.com"), "was: \(host)")
45+
try await configure(app)
4846

4947
return try await run {
5048
try await test(app)
@@ -225,7 +223,7 @@ extension SQLQueryBuilder {
225223
}
226224

227225

228-
private extension AllTests.QueryPerformanceTests {
226+
private extension QueryPerformanceTests {
229227

230228
func assertQueryPerformance(_ query: SQLQueryBuilder,
231229
expectedCost: Double,
@@ -291,3 +289,30 @@ private extension AllTests.QueryPerformanceTests {
291289
}
292290

293291
}
292+
293+
294+
private struct TestError: Error {
295+
var description: String
296+
init(_ description: String) {
297+
self.description = description
298+
}
299+
}
300+
301+
302+
private extension [DotEnvFile.Line] {
303+
subscript(key: String) -> String? {
304+
first(where: { $0.key == key })?.value
305+
}
306+
}
307+
308+
309+
private extension DotEnvFile {
310+
static func databaseHost(for environment: Environment) async throws -> String {
311+
let envFile = try await DotEnvFile.read(path: ".env.\(environment.name)",
312+
fileio: .init(threadPool: .singleton))
313+
guard let host = envFile.lines["DATABASE_HOST"] else {
314+
throw TestError("DATABASE_HOST not found in settings file .env.\(environment.name)")
315+
}
316+
return host
317+
}
318+
}

0 commit comments

Comments
 (0)