@@ -1118,6 +1118,112 @@ def run_query(self, query, new_line=True):
11181118 assert MockMyCli .connect_args ['character_set' ] == 'utf8mb3'
11191119
11201120
1121+ def test_mysql_dsn_envvar (monkeypatch ):
1122+ class Formatter :
1123+ format_name = None
1124+
1125+ class Logger :
1126+ def debug (self , * args , ** args_dict ):
1127+ pass
1128+
1129+ def warning (self , * args , ** args_dict ):
1130+ pass
1131+
1132+ class MockMyCli :
1133+ config = {
1134+ 'main' : {},
1135+ 'alias_dsn' : {},
1136+ 'connection' : {
1137+ 'default_keepalive_ticks' : 0 ,
1138+ },
1139+ }
1140+
1141+ def __init__ (self , ** _args ):
1142+ self .logger = Logger ()
1143+ self .destructive_warning = False
1144+ self .main_formatter = Formatter ()
1145+ self .redirect_formatter = Formatter ()
1146+ self .ssl_mode = 'auto'
1147+ self .my_cnf = {'client' : {}, 'mysqld' : {}}
1148+ self .default_keepalive_ticks = 0
1149+
1150+ def connect (self , ** args ):
1151+ MockMyCli .connect_args = args
1152+
1153+ def run_query (self , query , new_line = True ):
1154+ pass
1155+
1156+ import mycli .main
1157+
1158+ monkeypatch .setattr (mycli .main , 'MyCli' , MockMyCli )
1159+ monkeypatch .setenv ('MYSQL_DSN' , 'mysql://dsn_user:dsn_passwd@dsn_host:7/dsn_database' )
1160+ runner = CliRunner ()
1161+
1162+ result = runner .invoke (mycli .main .click_entrypoint )
1163+ assert result .exit_code == 0 , result .output + ' ' + str (result .exception )
1164+ assert 'DSN environment variable is deprecated' not in result .output
1165+ assert (
1166+ MockMyCli .connect_args ['user' ] == 'dsn_user'
1167+ and MockMyCli .connect_args ['passwd' ] == 'dsn_passwd'
1168+ and MockMyCli .connect_args ['host' ] == 'dsn_host'
1169+ and MockMyCli .connect_args ['port' ] == 7
1170+ and MockMyCli .connect_args ['database' ] == 'dsn_database'
1171+ )
1172+
1173+
1174+ def test_legacy_dsn_envvar_warns_and_falls_back (monkeypatch ):
1175+ class Formatter :
1176+ format_name = None
1177+
1178+ class Logger :
1179+ def debug (self , * args , ** args_dict ):
1180+ pass
1181+
1182+ def warning (self , * args , ** args_dict ):
1183+ pass
1184+
1185+ class MockMyCli :
1186+ config = {
1187+ 'main' : {},
1188+ 'alias_dsn' : {},
1189+ 'connection' : {
1190+ 'default_keepalive_ticks' : 0 ,
1191+ },
1192+ }
1193+
1194+ def __init__ (self , ** _args ):
1195+ self .logger = Logger ()
1196+ self .destructive_warning = False
1197+ self .main_formatter = Formatter ()
1198+ self .redirect_formatter = Formatter ()
1199+ self .ssl_mode = 'auto'
1200+ self .my_cnf = {'client' : {}, 'mysqld' : {}}
1201+ self .default_keepalive_ticks = 0
1202+
1203+ def connect (self , ** args ):
1204+ MockMyCli .connect_args = args
1205+
1206+ def run_query (self , query , new_line = True ):
1207+ pass
1208+
1209+ import mycli .main
1210+
1211+ monkeypatch .setattr (mycli .main , 'MyCli' , MockMyCli )
1212+ monkeypatch .setenv ('DSN' , 'mysql://dsn_user:dsn_passwd@dsn_host:8/dsn_database' )
1213+ runner = CliRunner ()
1214+
1215+ result = runner .invoke (mycli .main .click_entrypoint )
1216+ assert result .exit_code == 0 , result .output + ' ' + str (result .exception )
1217+ assert 'The DSN environment variable is deprecated' in result .output
1218+ assert (
1219+ MockMyCli .connect_args ['user' ] == 'dsn_user'
1220+ and MockMyCli .connect_args ['passwd' ] == 'dsn_passwd'
1221+ and MockMyCli .connect_args ['host' ] == 'dsn_host'
1222+ and MockMyCli .connect_args ['port' ] == 8
1223+ and MockMyCli .connect_args ['database' ] == 'dsn_database'
1224+ )
1225+
1226+
11211227def test_password_flag_uses_sentinel (monkeypatch ):
11221228 class Formatter :
11231229 format_name = None
0 commit comments