From 6fa086c0decac317f4d3662a990494df7852c95f Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 2 Apr 2026 19:10:14 +0000 Subject: [PATCH] =?UTF-8?q?test:=20project-scan=20=E2=80=94=20ClickHouse?= =?UTF-8?q?=20env=20var=20detection=20and=20DATABASE=5FURL=20scheme=20pars?= =?UTF-8?q?ing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) https://claude.ai/code/session_014pS7RRkb53MH36pc6qhSBT --- .../opencode/test/tool/project-scan.test.ts | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/packages/opencode/test/tool/project-scan.test.ts b/packages/opencode/test/tool/project-scan.test.ts index 31bfd04169..f30cd8f130 100644 --- a/packages/opencode/test/tool/project-scan.test.ts +++ b/packages/opencode/test/tool/project-scan.test.ts @@ -312,6 +312,8 @@ describe("detectEnvVars", () => { "PGHOST", "PGPORT", "PGDATABASE", "PGUSER", "PGPASSWORD", "DATABASE_URL", "MYSQL_HOST", "MYSQL_TCP_PORT", "MYSQL_DATABASE", "MYSQL_USER", "MYSQL_PASSWORD", "REDSHIFT_HOST", "REDSHIFT_PORT", "REDSHIFT_DATABASE", "REDSHIFT_USER", "REDSHIFT_PASSWORD", + "CLICKHOUSE_HOST", "CLICKHOUSE_URL", "CLICKHOUSE_PORT", "CLICKHOUSE_DB", + "CLICKHOUSE_DATABASE", "CLICKHOUSE_USER", "CLICKHOUSE_USERNAME", "CLICKHOUSE_PASSWORD", ] for (const v of vars) { delete process.env[v] @@ -502,6 +504,62 @@ describe("detectEnvVars", () => { expect(rs!.config.user).toBe("admin") }) + test("detects ClickHouse via CLICKHOUSE_HOST", async () => { + clearWarehouseEnvVars() + process.env.CLICKHOUSE_HOST = "clickhouse.example.com" + process.env.CLICKHOUSE_PORT = "8443" + process.env.CLICKHOUSE_DATABASE = "analytics" + process.env.CLICKHOUSE_USER = "default" + process.env.CLICKHOUSE_PASSWORD = "secret" + + const result = await detectEnvVars() + const ch = result.find((r) => r.type === "clickhouse") + expect(ch).toBeDefined() + expect(ch!.name).toBe("env_clickhouse") + expect(ch!.source).toBe("env-var") + expect(ch!.signal).toBe("CLICKHOUSE_HOST") + expect(ch!.config.host).toBe("clickhouse.example.com") + expect(ch!.config.port).toBe("8443") + expect(ch!.config.database).toBe("analytics") + expect(ch!.config.user).toBe("default") + expect(ch!.config.password).toBe("***") + }) + + test("detects ClickHouse via CLICKHOUSE_URL", async () => { + clearWarehouseEnvVars() + process.env.CLICKHOUSE_URL = "https://clickhouse.example.com:8443" + + const result = await detectEnvVars() + const ch = result.find((r) => r.type === "clickhouse") + expect(ch).toBeDefined() + expect(ch!.signal).toBe("CLICKHOUSE_URL") + expect(ch!.config.connection_string).toBe("***") + }) + + test("detects ClickHouse via DATABASE_URL with clickhouse scheme", async () => { + clearWarehouseEnvVars() + process.env.DATABASE_URL = "clickhouse://default:pass@clickhouse.example.com:8443/analytics" + + const result = await detectEnvVars() + const ch = result.find((r) => r.type === "clickhouse") + expect(ch).toBeDefined() + expect(ch!.signal).toBe("DATABASE_URL") + expect(ch!.config.connection_string).toBe("***") + }) + + test("detects ClickHouse via DATABASE_URL with clickhouse+http and clickhouse+https schemes", async () => { + for (const scheme of ["clickhouse+http", "clickhouse+https"]) { + clearWarehouseEnvVars() + process.env.DATABASE_URL = `${scheme}://default:pass@clickhouse.example.com:8443/analytics` + + const result = await detectEnvVars() + const ch = result.find((r) => r.type === "clickhouse") + expect(ch).toBeDefined() + expect(ch!.signal).toBe("DATABASE_URL") + expect(ch!.type).toBe("clickhouse") + } + }) + test("detects multiple warehouses simultaneously", async () => { clearWarehouseEnvVars() process.env.SNOWFLAKE_ACCOUNT = "sf_account"