From aab7177f07101462ee6286b62d4bf1c03ebfb4a8 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 10 May 2026 23:58:16 -0500 Subject: [PATCH] [cli] Add write_cpp-failure test for --prebuilt-dir pkg-install prep Symmetric with test_upload_program_prebuilt_dir_pkg_install_failure_aborts_upload: covers the early-return path when write_cpp fails (codegen error, disk full, validation regression) before pkg install runs. Closes the coverage matrix for _ensure_platform_packages_for_prebuilt_upload's two failure points. Issue: esphome/device-builder#572 --- tests/unit_tests/test_main.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tests/unit_tests/test_main.py b/tests/unit_tests/test_main.py index a0470b423c..e1e7d6dd67 100644 --- a/tests/unit_tests/test_main.py +++ b/tests/unit_tests/test_main.py @@ -1665,6 +1665,36 @@ def test_upload_program_prebuilt_dir_skips_install_when_tool_present( mock_pkg_install.assert_not_called() +def test_upload_program_prebuilt_dir_write_cpp_failure_aborts_upload( + mock_get_port_type: Mock, + mock_check_permissions: Mock, + tmp_path: Path, +) -> None: + """Codegen failure (write_cpp returning non-zero) must short-circuit + before pkg install runs; pkg install against a broken platformio.ini + would just fail less informatively. Symmetric with the pkg-install + failure test below.""" + setup_core(platform=PLATFORM_BK72XX, tmp_path=tmp_path) + mock_get_port_type.return_value = "SERIAL" + + prebuilt = tmp_path / "prebuilt" + prebuilt.mkdir() + args = MockArgs(prebuilt_dir=str(prebuilt)) + + with ( + patch("esphome.__main__.get_ltchiptool_path", return_value=None), + patch("esphome.__main__.write_cpp", return_value=3), + patch("esphome.platformio_api.run_pkg_install") as mock_pkg_install, + patch("esphome.__main__.upload_using_ltchiptool") as mock_upload, + ): + exit_code, host = upload_program({}, args, ["/dev/ttyUSB0"]) + + assert exit_code == 3 + assert host is None + mock_pkg_install.assert_not_called() + mock_upload.assert_not_called() + + def test_upload_program_prebuilt_dir_pkg_install_failure_aborts_upload( mock_get_port_type: Mock, mock_check_permissions: Mock,