示例#1
0
def test_cloud_optimize_passes_given_config_to_cloud_runner() -> None:
    create_fake_lean_cli_directory()

    project = create_api_project(1, "My Project")
    optimization = create_api_optimization()

    api_client = mock.Mock()
    api_client.projects.get_all.return_value = [project]
    api_client.optimizations.estimate.return_value = QCOptimizationEstimate(
        estimateId="x", time=10, balance=1000)
    api_client.organizations.get.return_value = create_api_organization()
    container.api_client.override(providers.Object(api_client))

    cloud_runner = mock.Mock()
    cloud_runner.run_optimization.return_value = optimization
    container.cloud_runner.override(providers.Object(cloud_runner))

    result = CliRunner().invoke(
        lean, ["cloud", "optimize", "My Project", "--name", "My Name"])

    assert result.exit_code == 0

    optimizer_config_manager = container.optimizer_config_manager()
    cloud_runner.run_optimization.assert_called_once_with(
        project, mock.ANY, "My Name",
        optimizer_config_manager.configure_strategy(cloud=True),
        optimizer_config_manager.configure_target(),
        optimizer_config_manager.configure_parameters([]),
        optimizer_config_manager.configure_constraints(),
        optimizer_config_manager.configure_node()[0].name,
        optimizer_config_manager.configure_node()[1])
示例#2
0
def test_cloud_optimize_does_not_display_backtest_results_when_none_meet_constraints(
) -> None:
    create_fake_lean_cli_directory()

    project = create_api_project(1, "My Project")
    optimization = create_api_optimization()
    optimization.backtests["1"] = create_api_optimization_backtest(
        1, True, False, True)
    optimization.backtests["2"] = create_api_optimization_backtest(
        2, True, False, False)

    api_client = mock.Mock()
    api_client.projects.get_all.return_value = [project]
    api_client.optimizations.estimate.return_value = QCOptimizationEstimate(
        estimateId="x", time=10, balance=1000)
    api_client.organizations.get.return_value = create_api_organization()
    container.api_client.override(providers.Object(api_client))

    cloud_runner = mock.Mock()
    cloud_runner.run_optimization.return_value = optimization
    container.cloud_runner.override(providers.Object(cloud_runner))

    result = CliRunner().invoke(lean, ["cloud", "optimize", "My Project"])

    assert result.exit_code == 0

    assert "id: 1" not in result.output
    assert "id: 2" not in result.output
示例#3
0
def test_cloud_backtest_logs_statistics() -> None:
    create_fake_lean_cli_directory()

    project = create_api_project(1, "My Project")
    backtest = create_api_backtest()

    backtest.statistics = {"stat1": "1.0", "stat2": "-1.0", "stat3": "0.0"}

    backtest.runtimeStatistics = {
        "stat3": "1.0",
        "stat4": "-1.0",
        "stat5": "0.0"
    }

    api_client = mock.Mock()
    api_client.projects.get_all.return_value = [project]
    container.api_client.override(providers.Object(api_client))

    cloud_runner = mock.Mock()
    cloud_runner.run_backtest.return_value = backtest
    container.cloud_runner.override(providers.Object(cloud_runner))

    result = CliRunner().invoke(lean, ["cloud", "backtest", "My Project"])

    assert result.exit_code == 0

    for i in range(1, 6):
        assert f"stat{i}" in result.output
示例#4
0
def test_cloud_optimize_runs_optimization_by_project_id() -> None:
    create_fake_lean_cli_directory()

    project = create_api_project(1, "My Project")
    optimization = create_api_optimization()

    api_client = mock.Mock()
    api_client.projects.get_all.return_value = [project]
    api_client.optimizations.estimate.return_value = QCOptimizationEstimate(
        estimateId="x", time=10, balance=1000)
    api_client.organizations.get.return_value = create_api_organization()
    container.api_client.override(providers.Object(api_client))

    cloud_runner = mock.Mock()
    cloud_runner.run_optimization.return_value = optimization
    container.cloud_runner.override(providers.Object(cloud_runner))

    result = CliRunner().invoke(lean, ["cloud", "optimize", "1"])

    assert result.exit_code == 0

    cloud_runner.run_optimization.assert_called_once()
    args, kwargs = cloud_runner.run_optimization.call_args

    assert args[0] == project
示例#5
0
def test_cloud_optimize_pushes_nothing_when_project_does_not_exist_locally(
) -> None:
    create_fake_lean_cli_directory()

    project = create_api_project(1, "My Project")
    optimization = create_api_optimization()

    api_client = mock.Mock()
    api_client.projects.get_all.return_value = [project]
    api_client.optimizations.estimate.return_value = QCOptimizationEstimate(
        estimateId="x", time=10, balance=1000)
    api_client.organizations.get.return_value = create_api_organization()
    container.api_client.override(providers.Object(api_client))

    cloud_runner = mock.Mock()
    cloud_runner.run_optimization.return_value = optimization
    container.cloud_runner.override(providers.Object(cloud_runner))

    push_manager = mock.Mock()
    container.push_manager.override(providers.Object(push_manager))

    result = CliRunner().invoke(lean,
                                ["cloud", "optimize", "My Project", "--push"])

    assert result.exit_code == 0

    push_manager.push_projects.assert_not_called()
示例#6
0
def test_cloud_optimize_displays_optimal_backtest_results(
        optimizer_config_manager_mock: mock.Mock, target: str,
        extremum: OptimizationExtremum) -> None:
    create_fake_lean_cli_directory()

    project = create_api_project(1, "My Project")
    optimization = create_api_optimization()
    optimization.backtests["1"] = create_api_optimization_backtest(
        1, True, True, True)
    optimization.backtests["2"] = create_api_optimization_backtest(
        2, True, True, False)

    api_client = mock.Mock()
    api_client.projects.get_all.return_value = [project]
    api_client.optimizations.estimate.return_value = QCOptimizationEstimate(
        estimateId="x", time=10, balance=1000)
    container.api_client.override(providers.Object(api_client))

    cloud_runner = mock.Mock()
    cloud_runner.run_optimization.return_value = optimization
    container.cloud_runner.override(providers.Object(cloud_runner))

    optimizer_config_manager_mock.configure_target.return_value = OptimizationTarget(
        target=f"TotalPerformance.PortfolioStatistics.{target}",
        extremum=extremum,
    )

    result = CliRunner().invoke(lean, ["cloud", "optimize", "My Project"])

    assert result.exit_code == 0

    if extremum == OptimizationExtremum.Maximum:
        assert "id: 1" in result.output
    else:
        assert "id: 2" in result.output
示例#7
0
def test_cloud_pull_pulls_project_by_name() -> None:
    create_fake_lean_cli_directory()

    cloud_projects = [create_api_project(1, "Project 1"),
                      create_api_project(2, "Project 2"),
                      create_api_project(3, "Project 3"),
                      create_api_project(4, "Boot Camp/Project 4"),
                      create_api_project(5, "Boot Camp/Project 5")]

    api_client = mock.Mock()
    api_client.projects.get_all.return_value = cloud_projects
    container.api_client.override(providers.Object(api_client))

    pull_manager = mock.Mock()
    container.pull_manager.override(providers.Object(pull_manager))

    result = CliRunner().invoke(lean, ["cloud", "pull", "--project", "Project 1"])

    assert result.exit_code == 0

    pull_manager.pull_projects.assert_called_once_with([cloud_projects[0]])
示例#8
0
def test_cloud_pull_aborts_when_project_input_matches_no_cloud_projects() -> None:
    create_fake_lean_cli_directory()

    cloud_projects = [create_api_project(1, "Project 1"),
                      create_api_project(2, "Project 2"),
                      create_api_project(3, "Project 3"),
                      create_api_project(4, "Boot Camp/Project 4"),
                      create_api_project(5, "Boot Camp/Project 5")]

    api_client = mock.Mock()
    api_client.projects.get_all.return_value = cloud_projects
    container.api_client.override(providers.Object(api_client))

    pull_manager = mock.Mock()
    container.pull_manager.override(providers.Object(pull_manager))

    result = CliRunner().invoke(lean, ["cloud", "pull", "--project", "Project 4"])

    assert result.exit_code != 0

    pull_manager.pull_projects.assert_not_called()
示例#9
0
def test_cloud_backtest_aborts_when_input_matches_no_cloud_project() -> None:
    create_fake_lean_cli_directory()

    project = create_api_project(1, "My Project")
    backtest = create_api_backtest()

    api_client = mock.Mock()
    api_client.projects.get_all.return_value = [project]
    container.api_client.override(providers.Object(api_client))

    cloud_runner = mock.Mock()
    cloud_runner.run_backtest.return_value = backtest
    container.cloud_runner.override(providers.Object(cloud_runner))

    result = CliRunner().invoke(lean, ["cloud", "backtest", "Fake Project"])

    assert result.exit_code != 0

    cloud_runner.run_backtest.assert_not_called()
示例#10
0
def test_cloud_backtest_runs_project_by_name() -> None:
    create_fake_lean_cli_directory()

    project = create_api_project(1, "My Project")
    backtest = create_api_backtest()

    api_client = mock.Mock()
    api_client.projects.get_all.return_value = [project]
    container.api_client.override(providers.Object(api_client))

    cloud_runner = mock.Mock()
    cloud_runner.run_backtest.return_value = backtest
    container.cloud_runner.override(providers.Object(cloud_runner))

    result = CliRunner().invoke(lean, ["cloud", "backtest", "My Project"])

    assert result.exit_code == 0

    cloud_runner.run_backtest.assert_called_once_with(project, mock.ANY)
示例#11
0
def test_cloud_backtest_opens_browser_when_open_option_given(open) -> None:
    create_fake_lean_cli_directory()

    project = create_api_project(1, "My Project")
    backtest = create_api_backtest()

    api_client = mock.Mock()
    api_client.projects.get_all.return_value = [project]
    container.api_client.override(providers.Object(api_client))

    cloud_runner = mock.Mock()
    cloud_runner.run_backtest.return_value = backtest
    container.cloud_runner.override(providers.Object(cloud_runner))

    result = CliRunner().invoke(lean,
                                ["cloud", "backtest", "My Project", "--open"])

    assert result.exit_code == 0

    open.assert_called_once_with(backtest.get_url())
示例#12
0
def test_cloud_optimize_aborts_when_input_matches_no_cloud_project() -> None:
    create_fake_lean_cli_directory()

    project = create_api_project(1, "My Project")
    optimization = create_api_optimization()

    api_client = mock.Mock()
    api_client.projects.get_all.return_value = [project]
    api_client.optimizations.estimate.return_value = QCOptimizationEstimate(
        estimateId="x", time=10, balance=1000)
    container.api_client.override(providers.Object(api_client))

    cloud_runner = mock.Mock()
    cloud_runner.run_optimization.return_value = optimization
    container.cloud_runner.override(providers.Object(cloud_runner))

    result = CliRunner().invoke(lean, ["cloud", "optimize", "Fake Project"])

    assert result.exit_code != 0

    cloud_runner.run_optimization.assert_not_called()
示例#13
0
def test_cloud_backtest_aborts_when_backtest_fails() -> None:
    create_fake_lean_cli_directory()

    project = create_api_project(1, "My Project")

    def run_backtest(*args, **kwargs):
        raise RuntimeError("Oops")

    api_client = mock.Mock()
    api_client.projects.get_all.return_value = [project]
    container.api_client.override(providers.Object(api_client))

    cloud_runner = mock.Mock()
    cloud_runner.run_backtest.side_effect = run_backtest
    container.cloud_runner.override(providers.Object(cloud_runner))

    result = CliRunner().invoke(lean, ["cloud", "backtest", "My Project"])

    assert result.exit_code != 0

    cloud_runner.run_backtest.assert_called_once()
示例#14
0
def test_cloud_backtest_does_not_open_browser_when_init_error_happens(
        open) -> None:
    create_fake_lean_cli_directory()

    project = create_api_project(1, "My Project")
    backtest = create_api_backtest()
    backtest.error = "During the algorithm initialization, the following exception has occurred:\nOops"

    api_client = mock.Mock()
    api_client.projects.get_all.return_value = [project]
    container.api_client.override(providers.Object(api_client))

    cloud_runner = mock.Mock()
    cloud_runner.run_backtest.return_value = backtest
    container.cloud_runner.override(providers.Object(cloud_runner))

    result = CliRunner().invoke(lean,
                                ["cloud", "backtest", "My Project", "--open"])

    assert result.exit_code == 0

    open.assert_not_called()
示例#15
0
def test_cloud_backtest_uses_given_name() -> None:
    create_fake_lean_cli_directory()

    project = create_api_project(1, "My Project")
    backtest = create_api_backtest()

    api_client = mock.Mock()
    api_client.projects.get_all.return_value = [project]
    container.api_client.override(providers.Object(api_client))

    cloud_runner = mock.Mock()
    cloud_runner.run_backtest.return_value = backtest
    container.cloud_runner.override(providers.Object(cloud_runner))

    result = CliRunner().invoke(
        lean, ["cloud", "backtest", "My Project", "--name", "My Name"])

    assert result.exit_code == 0

    cloud_runner.run_backtest.assert_called_once()
    args, kwargs = cloud_runner.run_backtest.call_args

    assert args[1] == "My Name"
示例#16
0
def test_cloud_optimize_aborts_when_optimization_fails() -> None:
    create_fake_lean_cli_directory()

    project = create_api_project(1, "My Project")

    def run_optimization(*args, **kwargs):
        raise RuntimeError("Oops")

    api_client = mock.Mock()
    api_client.projects.get_all.return_value = [project]
    api_client.optimizations.estimate.return_value = QCOptimizationEstimate(
        estimateId="x", time=10, balance=1000)
    container.api_client.override(providers.Object(api_client))

    cloud_runner = mock.Mock()
    cloud_runner.run_optimization.side_effect = run_optimization
    container.cloud_runner.override(providers.Object(cloud_runner))

    result = CliRunner().invoke(lean, ["cloud", "optimize", "My Project"])

    assert result.exit_code != 0

    cloud_runner.run_optimization.assert_called_once()
示例#17
0
def test_cloud_backtest_pushes_nothing_when_project_does_not_exist_locally(
) -> None:
    create_fake_lean_cli_directory()

    project = create_api_project(1, "My Project")
    backtest = create_api_backtest()

    api_client = mock.Mock()
    api_client.projects.get_all.return_value = [project]
    container.api_client.override(providers.Object(api_client))

    cloud_runner = mock.Mock()
    cloud_runner.run_backtest.return_value = backtest
    container.cloud_runner.override(providers.Object(cloud_runner))

    push_manager = mock.Mock()
    container.push_manager.override(providers.Object(push_manager))

    result = CliRunner().invoke(lean,
                                ["cloud", "backtest", "My Project", "--push"])

    assert result.exit_code == 0

    push_manager.push_projects.assert_not_called()