@@ -300,35 +300,47 @@ def test_all_languages_installed(
300300 )
301301 assert result is True
302302
303- @patch ("odoo_data_flow.lib.preflight.language_installer.run_language_installation" )
304303 @patch ("odoo_data_flow.lib.preflight.Confirm.ask" , return_value = True )
305304 @patch (
306305 "odoo_data_flow.lib.preflight._get_installed_languages" ,
307306 return_value = {"en_US" },
308307 )
309- def test_missing_languages_user_confirms_install_success (
308+ def test_language_check_dict_config_installation_not_supported (
310309 self ,
311310 mock_get_langs : MagicMock ,
312311 mock_confirm : MagicMock ,
313- mock_installer : MagicMock ,
314312 mock_polars_read_csv : MagicMock ,
313+ mock_conf_lib : MagicMock ,
314+ mock_show_error_panel : MagicMock ,
315315 ) -> None :
316- """Tests missing languages where user confirms and install succeeds."""
316+ """Tests that language installation fails gracefully with dict config."""
317+ # Setup data with missing languages
318+ mock_df = MagicMock ()
317319 (
318- mock_polars_read_csv .return_value .get_column .return_value .unique .return_value .drop_nulls .return_value .to_list .return_value
319- ) = ["fr_FR" ]
320- mock_installer .return_value = True
320+ mock_df .get_column .return_value .unique .return_value .drop_nulls .return_value .to_list .return_value
321+ ) = [
322+ "fr_FR" ,
323+ ]
324+ mock_polars_read_csv .return_value = mock_df
321325
326+ # Use dict config (not supported for installation)
327+ config = {"hostname" : "localhost" , "database" : "test_db" }
322328 result = preflight .language_check (
323329 preflight_mode = PreflightMode .NORMAL ,
324330 model = "res.partner" ,
325331 filename = "file.csv" ,
326- config = "" ,
332+ config = config ,
327333 headless = False ,
328334 )
329- assert result is True
335+
336+ # Should fail when installation is attempted with dict config
337+ assert result is False
330338 mock_confirm .assert_called_once ()
331- mock_installer .assert_called_once_with ("" , ["fr_FR" ])
339+ mock_show_error_panel .assert_called_once ()
340+ assert (
341+ "Language installation from a dict config is not supported"
342+ in mock_show_error_panel .call_args [0 ][0 ]
343+ )
332344
333345 @patch ("odoo_data_flow.lib.preflight._get_installed_languages" , return_value = None )
334346 def test_language_check_handles_get_installed_languages_failure (
@@ -481,6 +493,43 @@ def test_language_check_fail_mode_skips_entire_check(
481493 mock_confirm .assert_not_called ()
482494
483495
496+
497+ @patch ("odoo_data_flow.lib.preflight.Confirm.ask" , return_value = True )
498+ def test_language_check_dict_config_installation_not_supported (
499+ self ,
500+ mock_confirm : MagicMock ,
501+ mock_polars_read_csv : MagicMock ,
502+ mock_conf_lib : MagicMock ,
503+ mock_show_error_panel : MagicMock ,
504+ ) -> None :
505+ """Tests that language installation fails gracefully with dict config."""
506+ # Setup data with missing languages
507+ (
508+ mock_polars_read_csv .return_value .get_column .return_value .unique .return_value .drop_nulls .return_value .to_list .return_value
509+ ) = ["fr_FR" ]
510+ mock_conf_lib .return_value .get_model .return_value .search_read .return_value = [
511+ {"code" : "en_US" }
512+ ]
513+
514+ # Use dict config (not supported for installation)
515+ config = {"hostname" : "localhost" , "database" : "test_db" }
516+ result = preflight .language_check (
517+ preflight_mode = PreflightMode .NORMAL ,
518+ model = "res.partner" ,
519+ filename = "file.csv" ,
520+ config = config ,
521+ headless = False ,
522+ )
523+
524+ # Should fail when installation is attempted with dict config
525+ assert result is False
526+ mock_confirm .assert_called_once ()
527+ mock_show_error_panel .assert_called_once ()
528+ assert (
529+ "Language installation from a dict config is not supported"
530+ in mock_show_error_panel .call_args [0 ][0 ]
531+ )
532+
484533class TestDeferralAndStrategyCheck :
485534 """Tests for the deferral_and_strategy_check pre-flight checker."""
486535
0 commit comments