@@ -727,3 +727,85 @@ def test_backtest_calls_lean_runner_with_paths_to_mount() -> None:
727727 False ,
728728 {},
729729 {"some-config" : "/path/to/file.json" })
730+
731+
732+ def test_backtest_with_parameters () -> None :
733+ create_fake_lean_cli_directory ()
734+
735+ # Run backtest with --parameter option
736+ result = CliRunner ().invoke (lean , [
737+ "backtest" , "Python Project" ,
738+ "--parameter" , "integer" , "123" ,
739+ "--parameter" , "float" , "456.789" ,
740+ "--parameter" , "string" , "hello world" ,
741+ "--parameter" , "negative" , "-42.5"
742+ ])
743+
744+ assert result .exit_code == 0
745+
746+ container .lean_runner .run_lean .assert_called_once ()
747+ args , _ = container .lean_runner .run_lean .call_args
748+
749+ lean_config = args [0 ]
750+ parameters = lean_config ["parameters" ]
751+
752+ # --parameter values should be parsed correctly
753+ assert parameters ["integer" ] == "123"
754+ assert parameters ["float" ] == "456.789"
755+ assert parameters ["string" ] == "hello world"
756+ assert parameters ["negative" ] == "-42.5"
757+
758+
759+ def test_backtest_parameters_override_config_json () -> None :
760+ create_fake_lean_cli_directory ()
761+
762+ # Add parameters in config.json
763+ project_config_path = Path .cwd () / "Python Project" / "config.json"
764+ current_content = project_config_path .read_text (encoding = "utf-8" )
765+ config_dict = json .loads (current_content )
766+ config_dict ["parameters" ] = {
767+ "param1" : 789 ,
768+ "param2" : 789.12
769+ }
770+ project_config_path .write_text (json .dumps (config_dict , indent = 4 ))
771+
772+ # Run backtest without --parameter -> uses config.json parameters
773+ result = CliRunner ().invoke (lean , [
774+ "backtest" , "Python Project" ,
775+ ])
776+
777+ assert result .exit_code == 0
778+ assert container .lean_runner .run_lean .call_count == 1
779+
780+ args , _ = container .lean_runner .run_lean .call_args
781+
782+ lean_config = args [0 ]
783+ parameters = lean_config ["parameters" ]
784+
785+ # parameters from config.json should be used
786+ assert parameters ["param1" ] == 789
787+ assert parameters ["param2" ] == 789.12
788+
789+ # Run backtest with --parameter -> should override config.json
790+ result = CliRunner ().invoke (lean , [
791+ "backtest" , "Python Project" ,
792+ "--parameter" , "integer" , "123" ,
793+ "--parameter" , "float" , "456.789" ,
794+ "--parameter" , "string" , "hello world" ,
795+ "--parameter" , "negative" , "-42.5"
796+ ])
797+
798+ assert result .exit_code == 0
799+ assert container .lean_runner .run_lean .call_count == 2
800+
801+ args , _ = container .lean_runner .run_lean .call_args
802+ lean_config = args [0 ]
803+ parameters = lean_config ["parameters" ]
804+
805+ # Only CLI --parameter values should remain
806+ assert "param1" not in parameters
807+ assert "param2" not in parameters
808+ assert parameters ["integer" ] == "123"
809+ assert parameters ["float" ] == "456.789"
810+ assert parameters ["string" ] == "hello world"
811+ assert parameters ["negative" ] == "-42.5"
0 commit comments