mirror of
https://github.com/esphome/esphome.git
synced 2025-09-02 03:12:20 +01:00
103 lines
4.0 KiB
Python
103 lines
4.0 KiB
Python
"""Tests for the web_server OTA platform."""
|
|
|
|
from collections.abc import Callable
|
|
|
|
|
|
def test_web_server_ota_generated(generate_main: Callable[[str], str]) -> None:
|
|
"""Test that web_server OTA platform generates correct code."""
|
|
main_cpp = generate_main("tests/component_tests/ota/test_web_server_ota.yaml")
|
|
|
|
# Check that the web server OTA component is included
|
|
assert "WebServerOTAComponent" in main_cpp
|
|
assert "web_server::WebServerOTAComponent" in main_cpp
|
|
|
|
# Check that global web server base is referenced
|
|
assert "global_web_server_base" in main_cpp
|
|
|
|
# Check component is registered
|
|
assert "App.register_component(web_server_webserverotacomponent_id)" in main_cpp
|
|
|
|
|
|
def test_web_server_ota_with_callbacks(generate_main: Callable[[str], str]) -> None:
|
|
"""Test web_server OTA with state callbacks."""
|
|
main_cpp = generate_main(
|
|
"tests/component_tests/ota/test_web_server_ota_callbacks.yaml"
|
|
)
|
|
|
|
# Check that web server OTA component is present
|
|
assert "WebServerOTAComponent" in main_cpp
|
|
|
|
# Check that callbacks are configured
|
|
# The actual callback code is in the component implementation, not main.cpp
|
|
# But we can check that logger.log statements are present from the callbacks
|
|
assert "logger.log" in main_cpp
|
|
assert "OTA started" in main_cpp
|
|
assert "OTA completed" in main_cpp
|
|
assert "OTA error" in main_cpp
|
|
|
|
|
|
def test_web_server_ota_idf_multipart(generate_main: Callable[[str], str]) -> None:
|
|
"""Test that ESP-IDF builds include multipart parser dependency."""
|
|
main_cpp = generate_main("tests/component_tests/ota/test_web_server_ota_idf.yaml")
|
|
|
|
# Check that web server OTA component is present
|
|
assert "WebServerOTAComponent" in main_cpp
|
|
|
|
# For ESP-IDF builds, the framework type is esp-idf
|
|
# The multipart parser dependency is added by web_server_idf
|
|
assert "web_server::WebServerOTAComponent" in main_cpp
|
|
|
|
|
|
def test_web_server_ota_without_web_server_fails(
|
|
generate_main: Callable[[str], str],
|
|
) -> None:
|
|
"""Test that web_server OTA requires web_server component."""
|
|
# This should fail during validation since web_server_base is required
|
|
# but we can't test validation failures with generate_main
|
|
# Instead, verify that both components are needed in valid config
|
|
main_cpp = generate_main("tests/component_tests/ota/test_web_server_ota.yaml")
|
|
|
|
# Both web server and OTA components should be present
|
|
assert "WebServer" in main_cpp
|
|
assert "WebServerOTAComponent" in main_cpp
|
|
|
|
|
|
def test_multiple_ota_platforms(generate_main: Callable[[str], str]) -> None:
|
|
"""Test multiple OTA platforms can coexist."""
|
|
main_cpp = generate_main("tests/component_tests/ota/test_web_server_ota_multi.yaml")
|
|
|
|
# Check all OTA platforms are included
|
|
assert "WebServerOTAComponent" in main_cpp
|
|
assert "ESPHomeOTAComponent" in main_cpp
|
|
assert "OtaHttpRequestComponent" in main_cpp
|
|
|
|
# Check components are from correct namespaces
|
|
assert "web_server::WebServerOTAComponent" in main_cpp
|
|
assert "esphome::ESPHomeOTAComponent" in main_cpp
|
|
assert "http_request::OtaHttpRequestComponent" in main_cpp
|
|
|
|
|
|
def test_web_server_ota_arduino_with_auth(generate_main: Callable[[str], str]) -> None:
|
|
"""Test web_server OTA with Arduino framework and authentication."""
|
|
main_cpp = generate_main(
|
|
"tests/component_tests/ota/test_web_server_ota_arduino.yaml"
|
|
)
|
|
|
|
# Check web server OTA component is present
|
|
assert "WebServerOTAComponent" in main_cpp
|
|
|
|
# Check authentication is set up for web server
|
|
assert "set_auth_username" in main_cpp
|
|
assert "set_auth_password" in main_cpp
|
|
|
|
|
|
def test_web_server_ota_esp8266(generate_main: Callable[[str], str]) -> None:
|
|
"""Test web_server OTA on ESP8266 platform."""
|
|
main_cpp = generate_main(
|
|
"tests/component_tests/ota/test_web_server_ota_esp8266.yaml"
|
|
)
|
|
|
|
# Check web server OTA component is present
|
|
assert "WebServerOTAComponent" in main_cpp
|
|
assert "web_server::WebServerOTAComponent" in main_cpp
|