@@ -982,6 +982,48 @@ def run_query(self, query, new_line=True):
982982 and MockMyCli .connect_args ["database" ] == "alias_dsn_database"
983983 )
984984
985+ monkeypatch .setenv ("MYCLI_TEST_DSN_USER" , "env_dsn_user" )
986+ monkeypatch .setenv ("MYCLI_TEST_DSN_PASSWORD" , "env_dsn_passwd" )
987+ monkeypatch .setenv ("MYCLI_TEST_DSN_HOST" , "env_dsn_host" )
988+ monkeypatch .setenv ("MYCLI_TEST_DSN_PORT" , "9" )
989+ monkeypatch .setenv ("MYCLI_TEST_DSN_DATABASE" , "env_dsn_database" )
990+ MockMyCli .config = {
991+ "main" : {},
992+ "alias_dsn" : {
993+ "env_test" : "mysql://$MYCLI_TEST_DSN_USER:${MYCLI_TEST_DSN_PASSWORD}@$MYCLI_TEST_DSN_HOST:${MYCLI_TEST_DSN_PORT}/${MYCLI_TEST_DSN_DATABASE}"
994+ },
995+ "connection" : {
996+ "default_keepalive_ticks" : 0 ,
997+ },
998+ }
999+ MockMyCli .connect_args = None
1000+
1001+ # When a DSN alias uses environment variables, expand those before parsing
1002+ # the URI.
1003+ result = runner .invoke (click_entrypoint , args = ["--dsn" , "env_test" ])
1004+ assert result .exit_code == 0 , result .output + " " + str (result .exception )
1005+ assert (
1006+ MockMyCli .connect_args ["user" ] == "env_dsn_user"
1007+ and MockMyCli .connect_args ["passwd" ] == "env_dsn_passwd"
1008+ and MockMyCli .connect_args ["host" ] == "env_dsn_host"
1009+ and MockMyCli .connect_args ["port" ] == 9
1010+ and MockMyCli .connect_args ["database" ] == "env_dsn_database"
1011+ )
1012+
1013+ MockMyCli .connect_args = None
1014+
1015+ # The same expansion applies when the alias is supplied as the positional
1016+ # database argument.
1017+ result = runner .invoke (click_entrypoint , args = ["env_test" ])
1018+ assert result .exit_code == 0 , result .output + " " + str (result .exception )
1019+ assert (
1020+ MockMyCli .connect_args ["user" ] == "env_dsn_user"
1021+ and MockMyCli .connect_args ["passwd" ] == "env_dsn_passwd"
1022+ and MockMyCli .connect_args ["host" ] == "env_dsn_host"
1023+ and MockMyCli .connect_args ["port" ] == 9
1024+ and MockMyCli .connect_args ["database" ] == "env_dsn_database"
1025+ )
1026+
9851027 MockMyCli .config = {
9861028 "main" : {},
9871029 "alias_dsn" : {"test" : "mysql://alias_dsn_user:alias_dsn_passwd@alias_dsn_host:4/alias_dsn_database" },
0 commit comments