Add device charge-all route, last-charged column, and CSRF fix for quick-assign

This commit is contained in:
2026-06-05 20:08:19 -05:00
parent de986a9305
commit 55ce963d79
4 changed files with 135 additions and 19 deletions
+49
View File
@@ -376,6 +376,29 @@ def test_dashboard_quick_assign_full_device_blocked(client):
assert b"full" in resp.data.lower()
def test_quick_assign_reassign_battery(client):
"""Quick-assign moves a battery that is already installed in another device."""
client.post("/device/add", data={"name": "Box A", "battery_slots": "2", "battery_size": "AA"})
client.post("/device/add", data={"name": "Box B", "battery_slots": "2", "battery_size": "AA"})
client.post("/battery/add", data={"brand": "Eneloop", "count": "1"})
client.post("/battery/1/assign", data={"device_id": "1"}) # install into Box A
resp = client.post("/battery/1/assign", data={"device_id": "2"},
follow_redirects=True)
assert resp.status_code == 200
assert b"Box B" in resp.data
def test_quick_assign_retired_battery_blocked(client):
"""battery_assign POST for a retired battery is blocked."""
client.post("/device/add", data={"name": "Box", "battery_slots": "2", "battery_size": "AA"})
client.post("/battery/add", data={"brand": "Eneloop", "count": "1"})
client.post("/battery/1/retire")
resp = client.post("/battery/1/assign", data={"device_id": "1"},
follow_redirects=True)
assert resp.status_code == 200
assert b"retired" in resp.data.lower()
# ------------------------------------------------------------------ #
# Device — install-one (specific battery)
# ------------------------------------------------------------------ #
@@ -836,3 +859,29 @@ def test_device_install_batch(seeded_client):
assert resp.status_code == 200
assert b"Installed 2" in resp.data
assert b"2 / 2" in resp.data
def test_device_charge_all(seeded_client):
client = seeded_client
# install battery 1 into device 1
client.post("/device/1/install-one", data={"battery_id": "1"})
resp = client.post(
"/device/1/charge-all",
data={"charged_date": "2025-01-01", "increment_cycles": "1"},
follow_redirects=True,
)
assert resp.status_code == 200
assert b"Logged charge for 1 battery" in resp.data
assert b"+cycles" in resp.data
def test_device_charge_all_no_installed(seeded_client):
client = seeded_client
# device 1 has no batteries installed yet
resp = client.post(
"/device/1/charge-all",
data={"charged_date": "2025-01-01"},
follow_redirects=True,
)
assert resp.status_code == 200
assert b"No installed batteries" in resp.data