Skip to content

Commit 6fa086c

Browse files
committed
test: project-scan — ClickHouse env var detection and DATABASE_URL scheme parsing
Add 4 tests for the ClickHouse env var detection added in PR #574 but never tested. Update clearWarehouseEnvVars() helper to also clear CLICKHOUSE_* vars for test isolation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> https://claude.ai/code/session_014pS7RRkb53MH36pc6qhSBT
1 parent 0d34855 commit 6fa086c

1 file changed

Lines changed: 58 additions & 0 deletions

File tree

packages/opencode/test/tool/project-scan.test.ts

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,8 @@ describe("detectEnvVars", () => {
312312
"PGHOST", "PGPORT", "PGDATABASE", "PGUSER", "PGPASSWORD", "DATABASE_URL",
313313
"MYSQL_HOST", "MYSQL_TCP_PORT", "MYSQL_DATABASE", "MYSQL_USER", "MYSQL_PASSWORD",
314314
"REDSHIFT_HOST", "REDSHIFT_PORT", "REDSHIFT_DATABASE", "REDSHIFT_USER", "REDSHIFT_PASSWORD",
315+
"CLICKHOUSE_HOST", "CLICKHOUSE_URL", "CLICKHOUSE_PORT", "CLICKHOUSE_DB",
316+
"CLICKHOUSE_DATABASE", "CLICKHOUSE_USER", "CLICKHOUSE_USERNAME", "CLICKHOUSE_PASSWORD",
315317
]
316318
for (const v of vars) {
317319
delete process.env[v]
@@ -502,6 +504,62 @@ describe("detectEnvVars", () => {
502504
expect(rs!.config.user).toBe("admin")
503505
})
504506

507+
test("detects ClickHouse via CLICKHOUSE_HOST", async () => {
508+
clearWarehouseEnvVars()
509+
process.env.CLICKHOUSE_HOST = "clickhouse.example.com"
510+
process.env.CLICKHOUSE_PORT = "8443"
511+
process.env.CLICKHOUSE_DATABASE = "analytics"
512+
process.env.CLICKHOUSE_USER = "default"
513+
process.env.CLICKHOUSE_PASSWORD = "secret"
514+
515+
const result = await detectEnvVars()
516+
const ch = result.find((r) => r.type === "clickhouse")
517+
expect(ch).toBeDefined()
518+
expect(ch!.name).toBe("env_clickhouse")
519+
expect(ch!.source).toBe("env-var")
520+
expect(ch!.signal).toBe("CLICKHOUSE_HOST")
521+
expect(ch!.config.host).toBe("clickhouse.example.com")
522+
expect(ch!.config.port).toBe("8443")
523+
expect(ch!.config.database).toBe("analytics")
524+
expect(ch!.config.user).toBe("default")
525+
expect(ch!.config.password).toBe("***")
526+
})
527+
528+
test("detects ClickHouse via CLICKHOUSE_URL", async () => {
529+
clearWarehouseEnvVars()
530+
process.env.CLICKHOUSE_URL = "https://clickhouse.example.com:8443"
531+
532+
const result = await detectEnvVars()
533+
const ch = result.find((r) => r.type === "clickhouse")
534+
expect(ch).toBeDefined()
535+
expect(ch!.signal).toBe("CLICKHOUSE_URL")
536+
expect(ch!.config.connection_string).toBe("***")
537+
})
538+
539+
test("detects ClickHouse via DATABASE_URL with clickhouse scheme", async () => {
540+
clearWarehouseEnvVars()
541+
process.env.DATABASE_URL = "clickhouse://default:pass@clickhouse.example.com:8443/analytics"
542+
543+
const result = await detectEnvVars()
544+
const ch = result.find((r) => r.type === "clickhouse")
545+
expect(ch).toBeDefined()
546+
expect(ch!.signal).toBe("DATABASE_URL")
547+
expect(ch!.config.connection_string).toBe("***")
548+
})
549+
550+
test("detects ClickHouse via DATABASE_URL with clickhouse+http and clickhouse+https schemes", async () => {
551+
for (const scheme of ["clickhouse+http", "clickhouse+https"]) {
552+
clearWarehouseEnvVars()
553+
process.env.DATABASE_URL = `${scheme}://default:pass@clickhouse.example.com:8443/analytics`
554+
555+
const result = await detectEnvVars()
556+
const ch = result.find((r) => r.type === "clickhouse")
557+
expect(ch).toBeDefined()
558+
expect(ch!.signal).toBe("DATABASE_URL")
559+
expect(ch!.type).toBe("clickhouse")
560+
}
561+
})
562+
505563
test("detects multiple warehouses simultaneously", async () => {
506564
clearWarehouseEnvVars()
507565
process.env.SNOWFLAKE_ACCOUNT = "sf_account"

0 commit comments

Comments
 (0)