66import pytest
77
88import fabric_cli .core .fab_constant as constant
9+ from fabric_cli .core .fab_context import Context
910from fabric_cli .errors import ErrorMessages
1011from tests .test_commands .commands_parser import CLIExecutor
1112from tests .test_commands .data .static_test_data import StaticTestData
@@ -172,11 +173,16 @@ def test_config_clear_cache_success(
172173 # endregion
173174
174175
175- DEPRECATION_WARNING = (
176- "The 'mode' setting is deprecated and will be removed in a future release. "
176+ DEPRECATION_PREFIX = "The 'mode' setting is deprecated. "
177+ DEPRECATION_COMMANDLINE_SUFFIX = (
177178 "Run 'fab' without arguments to enter REPL mode, "
178179 "or use 'fab <command>' for command-line mode."
179180)
181+ DEPRECATION_INTERACTIVE_SUFFIX = (
182+ "Run 'exit' to leave the REPL, then use 'fab <command>' for command-line mode."
183+ )
184+ DEPRECATION_WARNING_COMMANDLINE = DEPRECATION_PREFIX + DEPRECATION_COMMANDLINE_SUFFIX
185+ DEPRECATION_WARNING_INTERACTIVE = DEPRECATION_PREFIX + DEPRECATION_INTERACTIVE_SUFFIX
180186
181187
182188class TestConfigModeDeprecated :
@@ -193,7 +199,7 @@ def test_config_set_mode_interactive_warns_and_launches_repl_success(
193199 """'config set mode interactive' must warn and launch REPL."""
194200 cli_executor .exec_command (f"config set mode { constant .FAB_MODE_INTERACTIVE } " )
195201
196- mock_print_warning .assert_called_once_with (DEPRECATION_WARNING )
202+ mock_print_warning .assert_called_once_with (DEPRECATION_WARNING_INTERACTIVE )
197203 mock_repl .assert_called_once ()
198204
199205 @pytest .mark .parametrize ("mode_value" , [
@@ -206,7 +212,20 @@ def test_config_set_mode_non_interactive_warns_without_repl_success(
206212 """'config set mode command_line' (or bogus) must warn but not launch REPL."""
207213 cli_executor .exec_command (f"config set mode { mode_value } " )
208214
209- mock_print_warning .assert_called_once_with (DEPRECATION_WARNING )
215+ mock_print_warning .assert_called_once_with (DEPRECATION_WARNING_INTERACTIVE )
216+ mock_repl .assert_not_called ()
217+
218+ def test_config_set_mode_in_commandline_warns_with_fab_hint_success (
219+ self , mock_print_warning , mock_repl , cli_executor : CLIExecutor
220+ ):
221+ """'config set mode command_line' in command-line mode must show fab hint."""
222+ Context ().set_runtime_mode (constant .FAB_MODE_COMMANDLINE )
223+ try :
224+ cli_executor .exec_command (f"config set mode { constant .FAB_MODE_COMMANDLINE } " )
225+ finally :
226+ Context ().set_runtime_mode (constant .FAB_MODE_INTERACTIVE )
227+
228+ mock_print_warning .assert_called_once_with (DEPRECATION_WARNING_COMMANDLINE )
210229 mock_repl .assert_not_called ()
211230
212231 def test_config_set_non_mode_key_still_works_success (
@@ -222,7 +241,20 @@ def test_config_get_mode_warns_and_returns_runtime_mode_success(
222241 """'config get mode' must warn and return the runtime mode."""
223242 cli_executor .exec_command ("config get mode" )
224243
225- mock_print_warning .assert_any_call (DEPRECATION_WARNING )
244+ mock_print_warning .assert_any_call (DEPRECATION_WARNING_INTERACTIVE )
245+ mock_questionary_print .assert_called ()
246+
247+ def test_config_get_mode_in_commandline_warns_with_fab_hint_success (
248+ self , mock_questionary_print , mock_print_warning , cli_executor : CLIExecutor
249+ ):
250+ """'config get mode' in command-line mode must show fab hint."""
251+ Context ().set_runtime_mode (constant .FAB_MODE_COMMANDLINE )
252+ try :
253+ cli_executor .exec_command ("config get mode" )
254+ finally :
255+ Context ().set_runtime_mode (constant .FAB_MODE_INTERACTIVE )
256+
257+ mock_print_warning .assert_any_call (DEPRECATION_WARNING_COMMANDLINE )
226258 mock_questionary_print .assert_called ()
227259
228260 def test_config_get_non_mode_key_still_works_success (
0 commit comments