@@ -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_PORT" , "CLICKHOUSE_DB" , "CLICKHOUSE_DATABASE" ,
316+ "CLICKHOUSE_USER" , "CLICKHOUSE_USERNAME" , "CLICKHOUSE_PASSWORD" , "CLICKHOUSE_URL" ,
315317 ]
316318 for ( const v of vars ) {
317319 delete process . env [ v ]
@@ -554,6 +556,70 @@ describe("detectEnvVars", () => {
554556 expect ( conn . name ) . toBe ( `env_${ conn . type } ` )
555557 }
556558 } )
559+
560+ test ( "detects ClickHouse via CLICKHOUSE_HOST" , async ( ) => {
561+ clearWarehouseEnvVars ( )
562+ process . env . CLICKHOUSE_HOST = "ch.example.com"
563+ process . env . CLICKHOUSE_PORT = "8443"
564+ process . env . CLICKHOUSE_DATABASE = "analytics"
565+ process . env . CLICKHOUSE_USER = "default"
566+
567+ const result = await detectEnvVars ( )
568+ const ch = result . find ( ( r ) => r . type === "clickhouse" )
569+ expect ( ch ) . toBeDefined ( )
570+ expect ( ch ! . name ) . toBe ( "env_clickhouse" )
571+ expect ( ch ! . source ) . toBe ( "env-var" )
572+ expect ( ch ! . signal ) . toBe ( "CLICKHOUSE_HOST" )
573+ expect ( ch ! . config . host ) . toBe ( "ch.example.com" )
574+ expect ( ch ! . config . port ) . toBe ( "8443" )
575+ expect ( ch ! . config . database ) . toBe ( "analytics" )
576+ expect ( ch ! . config . user ) . toBe ( "default" )
577+ } )
578+
579+ test ( "detects ClickHouse via CLICKHOUSE_URL (connection_string redacted)" , async ( ) => {
580+ clearWarehouseEnvVars ( )
581+ process . env . CLICKHOUSE_URL = "clickhouse://default:secret@ch.example.com:9000/analytics"
582+
583+ const result = await detectEnvVars ( )
584+ const ch = result . find ( ( r ) => r . type === "clickhouse" )
585+ expect ( ch ) . toBeDefined ( )
586+ expect ( ch ! . name ) . toBe ( "env_clickhouse" )
587+ expect ( ch ! . signal ) . toBe ( "CLICKHOUSE_URL" )
588+ // connection_string is a sensitive key — detectEnvVars redacts it to "***"
589+ expect ( ch ! . config . connection_string ) . toBe ( "***" )
590+ } )
591+
592+ test ( "detects ClickHouse via DATABASE_URL with clickhouse:// scheme" , async ( ) => {
593+ clearWarehouseEnvVars ( )
594+ process . env . DATABASE_URL = "clickhouse://default:pass@ch.example.com:9000/analytics"
595+
596+ const result = await detectEnvVars ( )
597+ const ch = result . find ( ( r ) => r . type === "clickhouse" )
598+ expect ( ch ) . toBeDefined ( )
599+ expect ( ch ! . name ) . toBe ( "env_clickhouse" )
600+ expect ( ch ! . type ) . toBe ( "clickhouse" )
601+ expect ( ch ! . signal ) . toBe ( "DATABASE_URL" )
602+ } )
603+
604+ test ( "detects ClickHouse via DATABASE_URL with clickhouse+http scheme" , async ( ) => {
605+ clearWarehouseEnvVars ( )
606+ process . env . DATABASE_URL = "clickhouse+http://default:pass@ch.example.com:8123/analytics"
607+
608+ const result = await detectEnvVars ( )
609+ const ch = result . find ( ( r ) => r . type === "clickhouse" )
610+ expect ( ch ) . toBeDefined ( )
611+ expect ( ch ! . type ) . toBe ( "clickhouse" )
612+ } )
613+
614+ test ( "detects ClickHouse via DATABASE_URL with clickhouse+https scheme" , async ( ) => {
615+ clearWarehouseEnvVars ( )
616+ process . env . DATABASE_URL = "clickhouse+https://default:pass@ch.example.com:8443/analytics"
617+
618+ const result = await detectEnvVars ( )
619+ const ch = result . find ( ( r ) => r . type === "clickhouse" )
620+ expect ( ch ) . toBeDefined ( )
621+ expect ( ch ! . type ) . toBe ( "clickhouse" )
622+ } )
557623} )
558624
559625// ---------------------------------------------------------------------------
0 commit comments