feat(devices): wifi tcp registry, device API/UI, tests; bump led-tool
Made-with: Cursor
This commit is contained in:
@@ -124,6 +124,7 @@ def server(monkeypatch, tmp_path_factory):
|
||||
import models.scene as models_scene # noqa: E402
|
||||
import models.pattern as models_pattern # noqa: E402
|
||||
import models.squence as models_sequence # noqa: E402
|
||||
import models.device as models_device # noqa: E402
|
||||
|
||||
for cls in (
|
||||
models_preset.Preset,
|
||||
@@ -134,6 +135,7 @@ def server(monkeypatch, tmp_path_factory):
|
||||
models_scene.Scene,
|
||||
models_pattern.Pattern,
|
||||
models_sequence.Sequence,
|
||||
models_device.Device,
|
||||
):
|
||||
if hasattr(cls, "_instance"):
|
||||
delattr(cls, "_instance")
|
||||
@@ -167,6 +169,7 @@ def server(monkeypatch, tmp_path_factory):
|
||||
"controllers.scene",
|
||||
"controllers.pattern",
|
||||
"controllers.settings",
|
||||
"controllers.device",
|
||||
):
|
||||
sys.modules.pop(mod_name, None)
|
||||
|
||||
@@ -180,6 +183,7 @@ def server(monkeypatch, tmp_path_factory):
|
||||
import controllers.scene as scene_ctl # noqa: E402
|
||||
import controllers.pattern as pattern_ctl # noqa: E402
|
||||
import controllers.settings as settings_ctl # noqa: E402
|
||||
import controllers.device as device_ctl # noqa: E402
|
||||
|
||||
# Configure transport sender used by /presets/send.
|
||||
from models.transport import set_sender # noqa: E402
|
||||
@@ -206,6 +210,7 @@ def server(monkeypatch, tmp_path_factory):
|
||||
app.mount(scene_ctl.controller, "/scenes")
|
||||
app.mount(pattern_ctl.controller, "/patterns")
|
||||
app.mount(settings_ctl.controller, "/settings")
|
||||
app.mount(device_ctl.controller, "/devices")
|
||||
|
||||
@app.route("/")
|
||||
def index(request):
|
||||
@@ -562,6 +567,106 @@ def test_groups_sequences_scenes_palettes_patterns_endpoints(server):
|
||||
resp = c.delete(f"{base_url}/palettes/{palette_id}")
|
||||
assert resp.status_code == 200
|
||||
|
||||
# Devices (LED driver registry).
|
||||
resp = c.get(f"{base_url}/devices")
|
||||
assert resp.status_code == 200
|
||||
assert resp.json() == {}
|
||||
|
||||
resp = c.post(f"{base_url}/devices", json={})
|
||||
assert resp.status_code == 400
|
||||
|
||||
resp = c.post(
|
||||
f"{base_url}/devices",
|
||||
json={"name": "pytest-dev", "address": "aa:bb:cc:dd:ee:ff"},
|
||||
)
|
||||
assert resp.status_code == 201
|
||||
dev_map = resp.json()
|
||||
dev_id = next(iter(dev_map.keys()))
|
||||
assert dev_id == "aabbccddeeff"
|
||||
assert dev_map[dev_id]["name"] == "pytest-dev"
|
||||
assert dev_map[dev_id]["id"] == dev_id
|
||||
assert dev_map[dev_id]["type"] == "led"
|
||||
assert dev_map[dev_id]["transport"] == "espnow"
|
||||
assert dev_map[dev_id]["address"] == "aabbccddeeff"
|
||||
|
||||
resp = c.get(f"{base_url}/devices/{dev_id}")
|
||||
assert resp.status_code == 200
|
||||
assert resp.json()["name"] == "pytest-dev"
|
||||
assert resp.json()["type"] == "led"
|
||||
|
||||
resp = c.post(
|
||||
f"{base_url}/devices",
|
||||
json={
|
||||
"name": "pytest-wifi",
|
||||
"type": "led",
|
||||
"transport": "wifi",
|
||||
"address": "192.168.50.10",
|
||||
"mac": "102030405060",
|
||||
},
|
||||
)
|
||||
assert resp.status_code == 201
|
||||
wid = "102030405060"
|
||||
assert wid in resp.json()
|
||||
assert resp.json()[wid]["transport"] == "wifi"
|
||||
assert resp.json()[wid]["address"] == "192.168.50.10"
|
||||
|
||||
resp = c.post(
|
||||
f"{base_url}/devices",
|
||||
json={
|
||||
"name": "pytest-wifi",
|
||||
"transport": "wifi",
|
||||
"address": "192.168.50.11",
|
||||
"mac": "102030405061",
|
||||
},
|
||||
)
|
||||
assert resp.status_code == 201
|
||||
wid2 = "102030405061"
|
||||
assert wid2 in resp.json()
|
||||
assert resp.json()[wid2]["name"] == "pytest-wifi"
|
||||
|
||||
resp = c.post(
|
||||
f"{base_url}/devices",
|
||||
json={
|
||||
"name": "pytest-wifi-dupmac",
|
||||
"transport": "wifi",
|
||||
"address": "192.168.50.99",
|
||||
"mac": "102030405060",
|
||||
},
|
||||
)
|
||||
assert resp.status_code == 409
|
||||
|
||||
resp = c.post(
|
||||
f"{base_url}/devices",
|
||||
json={"name": "no-mac-wifi", "transport": "wifi", "address": "192.168.50.12"},
|
||||
)
|
||||
assert resp.status_code == 400
|
||||
|
||||
resp = c.post(
|
||||
f"{base_url}/devices",
|
||||
json={"name": "bad-tr", "transport": "serial"},
|
||||
)
|
||||
assert resp.status_code == 400
|
||||
|
||||
resp = c.put(f"{base_url}/devices/{dev_id}", json={"name": " "})
|
||||
assert resp.status_code == 400
|
||||
|
||||
resp = c.put(f"{base_url}/devices/{dev_id}", json={"name": "renamed"})
|
||||
assert resp.status_code == 200
|
||||
assert resp.json()["name"] == "renamed"
|
||||
|
||||
resp = c.put(f"{base_url}/devices/{wid}", json={"name": "renamed"})
|
||||
assert resp.status_code == 200
|
||||
assert resp.json()["name"] == "renamed"
|
||||
|
||||
resp = c.delete(f"{base_url}/devices/{wid2}")
|
||||
assert resp.status_code == 200
|
||||
|
||||
resp = c.delete(f"{base_url}/devices/{wid}")
|
||||
assert resp.status_code == 200
|
||||
|
||||
resp = c.delete(f"{base_url}/devices/{dev_id}")
|
||||
assert resp.status_code == 200
|
||||
|
||||
# Patterns.
|
||||
resp = c.get(f"{base_url}/patterns/definitions")
|
||||
assert resp.status_code == 200
|
||||
|
||||
Reference in New Issue
Block a user