refactor: rename project to LedGrab, split HA integration into separate repo
Lint & Test / test (push) Successful in 1m56s
Lint & Test / test (push) Successful in 1m56s
- Rename Python package: wled_controller -> ledgrab - Rename env var prefix: WLED_ -> LEDGRAB_ (with auto-migration for old vars) - Rename localStorage key: wled_api_key -> ledgrab_api_key (with migration) - Rename HA integration domain: wled_screen_controller -> ledgrab - Update all imports, build scripts, Docker, installer, config, docs - Remove HA integration (moved to ledgrab-haos-integration repo) - Remove hacs.json (belongs in HA repo now) - Add startup warning for users with old WLED_ env vars - All tests pass (715/715), ruff clean, tsc clean, frontend builds
This commit is contained in:
@@ -4,7 +4,7 @@ import pytest
|
||||
import respx
|
||||
from httpx import Response
|
||||
|
||||
from wled_controller.core.devices.wled_client import WLEDClient, WLEDInfo
|
||||
from ledgrab.core.devices.wled_client import WLEDClient, WLEDInfo
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -30,15 +30,7 @@ def mock_wled_info():
|
||||
@pytest.fixture
|
||||
def mock_wled_cfg():
|
||||
"""Provide mock WLED config response (needed by get_info)."""
|
||||
return {
|
||||
"hw": {
|
||||
"led": {
|
||||
"ins": [
|
||||
{"start": 0, "len": 150, "order": 1, "pin": [2], "type": 22}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
return {"hw": {"led": {"ins": [{"start": 0, "len": 150, "order": 1, "pin": [2], "type": 22}]}}}
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -57,15 +49,9 @@ def _mock_connect_endpoints(wled_url, mock_wled_info, mock_wled_cfg, mock_wled_s
|
||||
connect() calls get_info() which hits /json/info + /json/cfg,
|
||||
then snapshot_device_state() which hits /json/state.
|
||||
"""
|
||||
respx.get(f"{wled_url}/json/info").mock(
|
||||
return_value=Response(200, json=mock_wled_info)
|
||||
)
|
||||
respx.get(f"{wled_url}/json/cfg").mock(
|
||||
return_value=Response(200, json=mock_wled_cfg)
|
||||
)
|
||||
respx.get(f"{wled_url}/json/state").mock(
|
||||
return_value=Response(200, json=mock_wled_state)
|
||||
)
|
||||
respx.get(f"{wled_url}/json/info").mock(return_value=Response(200, json=mock_wled_info))
|
||||
respx.get(f"{wled_url}/json/cfg").mock(return_value=Response(200, json=mock_wled_cfg))
|
||||
respx.get(f"{wled_url}/json/state").mock(return_value=Response(200, json=mock_wled_state))
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -133,9 +119,7 @@ async def test_get_state(wled_url, mock_wled_info, mock_wled_cfg, mock_wled_stat
|
||||
async def test_send_pixels(wled_url, mock_wled_info, mock_wled_cfg, mock_wled_state):
|
||||
"""Test sending pixel data."""
|
||||
_mock_connect_endpoints(wled_url, mock_wled_info, mock_wled_cfg, mock_wled_state)
|
||||
respx.post(f"{wled_url}/json/state").mock(
|
||||
return_value=Response(200, json={"success": True})
|
||||
)
|
||||
respx.post(f"{wled_url}/json/state").mock(return_value=Response(200, json={"success": True}))
|
||||
|
||||
async with WLEDClient(wled_url) as client:
|
||||
pixels = [
|
||||
@@ -173,9 +157,7 @@ async def test_send_pixels_invalid_values(wled_url, mock_wled_info, mock_wled_cf
|
||||
async def test_set_power(wled_url, mock_wled_info, mock_wled_cfg, mock_wled_state):
|
||||
"""Test turning device on/off."""
|
||||
_mock_connect_endpoints(wled_url, mock_wled_info, mock_wled_cfg, mock_wled_state)
|
||||
respx.post(f"{wled_url}/json/state").mock(
|
||||
return_value=Response(200, json={"success": True})
|
||||
)
|
||||
respx.post(f"{wled_url}/json/state").mock(return_value=Response(200, json={"success": True}))
|
||||
|
||||
async with WLEDClient(wled_url) as client:
|
||||
# Turn on
|
||||
@@ -192,9 +174,7 @@ async def test_set_power(wled_url, mock_wled_info, mock_wled_cfg, mock_wled_stat
|
||||
async def test_set_brightness(wled_url, mock_wled_info, mock_wled_cfg, mock_wled_state):
|
||||
"""Test setting brightness."""
|
||||
_mock_connect_endpoints(wled_url, mock_wled_info, mock_wled_cfg, mock_wled_state)
|
||||
respx.post(f"{wled_url}/json/state").mock(
|
||||
return_value=Response(200, json={"success": True})
|
||||
)
|
||||
respx.post(f"{wled_url}/json/state").mock(return_value=Response(200, json={"success": True}))
|
||||
|
||||
async with WLEDClient(wled_url) as client:
|
||||
success = await client.set_brightness(128)
|
||||
@@ -231,12 +211,8 @@ async def test_retry_logic(wled_url, mock_wled_info, mock_wled_cfg, mock_wled_st
|
||||
return Response(200, json=mock_wled_info)
|
||||
|
||||
respx.get(f"{wled_url}/json/info").mock(side_effect=mock_info_response)
|
||||
respx.get(f"{wled_url}/json/cfg").mock(
|
||||
return_value=Response(200, json=mock_wled_cfg)
|
||||
)
|
||||
respx.get(f"{wled_url}/json/state").mock(
|
||||
return_value=Response(200, json=mock_wled_state)
|
||||
)
|
||||
respx.get(f"{wled_url}/json/cfg").mock(return_value=Response(200, json=mock_wled_cfg))
|
||||
respx.get(f"{wled_url}/json/state").mock(return_value=Response(200, json=mock_wled_state))
|
||||
|
||||
client = WLEDClient(wled_url, retry_attempts=3, retry_delay=0.1)
|
||||
success = await client.connect()
|
||||
|
||||
Reference in New Issue
Block a user