Skip to content

Commit 0ce7732

Browse files
committed
test: project-scan — ClickHouse env var detection coverage
detectEnvVars() gained ClickHouse support (CLICKHOUSE_HOST, CLICKHOUSE_URL, DATABASE_URL clickhouse:// schemes) in #574 but had zero test coverage, risking silent regressions for ClickHouse users relying on auto-detection. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> https://claude.ai/code/session_01VG1sv78kEKb4PGTmhDwNkN
1 parent 0d34855 commit 0ce7732

1 file changed

Lines changed: 68 additions & 0 deletions

File tree

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

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,9 @@ 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",
316+
"CLICKHOUSE_DB", "CLICKHOUSE_DATABASE", "CLICKHOUSE_USER",
317+
"CLICKHOUSE_USERNAME", "CLICKHOUSE_PASSWORD",
315318
]
316319
for (const v of vars) {
317320
delete process.env[v]
@@ -542,6 +545,71 @@ describe("detectEnvVars", () => {
542545
}
543546
})
544547

548+
test("detects ClickHouse via CLICKHOUSE_HOST", async () => {
549+
clearWarehouseEnvVars()
550+
process.env.CLICKHOUSE_HOST = "clickhouse.example.com"
551+
process.env.CLICKHOUSE_PORT = "8123"
552+
process.env.CLICKHOUSE_DB = "analytics"
553+
process.env.CLICKHOUSE_USER = "default"
554+
process.env.CLICKHOUSE_PASSWORD = "secret"
555+
556+
const result = await detectEnvVars()
557+
const ch = result.find((r) => r.type === "clickhouse")
558+
expect(ch).toBeDefined()
559+
expect(ch!.name).toBe("env_clickhouse")
560+
expect(ch!.source).toBe("env-var")
561+
expect(ch!.signal).toBe("CLICKHOUSE_HOST")
562+
expect(ch!.config.host).toBe("clickhouse.example.com")
563+
expect(ch!.config.port).toBe("8123")
564+
expect(ch!.config.database).toBe("analytics")
565+
expect(ch!.config.user).toBe("default")
566+
expect(ch!.config.password).toBe("***")
567+
})
568+
569+
test("detects ClickHouse via CLICKHOUSE_URL", async () => {
570+
clearWarehouseEnvVars()
571+
process.env.CLICKHOUSE_URL = "https://clickhouse.example.com:8443"
572+
573+
const result = await detectEnvVars()
574+
const ch = result.find((r) => r.type === "clickhouse")
575+
expect(ch).toBeDefined()
576+
expect(ch!.signal).toBe("CLICKHOUSE_URL")
577+
expect(ch!.config.connection_string).toBe("***")
578+
})
579+
580+
test("detects ClickHouse via DATABASE_URL with clickhouse scheme", async () => {
581+
clearWarehouseEnvVars()
582+
process.env.DATABASE_URL = "clickhouse://user:pass@host:8123/db"
583+
584+
const result = await detectEnvVars()
585+
const ch = result.find((r) => r.type === "clickhouse")
586+
expect(ch).toBeDefined()
587+
expect(ch!.signal).toBe("DATABASE_URL")
588+
expect(ch!.config.connection_string).toBe("***")
589+
})
590+
591+
test("detects ClickHouse via DATABASE_URL with clickhouse+https scheme", async () => {
592+
clearWarehouseEnvVars()
593+
process.env.DATABASE_URL = "clickhouse+https://user:pass@host:8443/db"
594+
595+
const result = await detectEnvVars()
596+
const ch = result.find((r) => r.type === "clickhouse")
597+
expect(ch).toBeDefined()
598+
expect(ch!.signal).toBe("DATABASE_URL")
599+
expect(ch!.config.connection_string).toBe("***")
600+
})
601+
602+
test("CLICKHOUSE_HOST takes precedence over DATABASE_URL clickhouse scheme", async () => {
603+
clearWarehouseEnvVars()
604+
process.env.CLICKHOUSE_HOST = "ch-primary.local"
605+
process.env.DATABASE_URL = "clickhouse://user:pass@ch-secondary.local:8123/db"
606+
607+
const result = await detectEnvVars()
608+
const chConns = result.filter((r) => r.type === "clickhouse")
609+
expect(chConns.length).toBe(1)
610+
expect(chConns[0].signal).toBe("CLICKHOUSE_HOST")
611+
})
612+
545613
test("connection names follow env_ prefix convention", async () => {
546614
clearWarehouseEnvVars()
547615
process.env.SNOWFLAKE_ACCOUNT = "acct"

0 commit comments

Comments
 (0)