Add Pico HTTP fallback client
This commit is contained in:
@@ -0,0 +1,16 @@
|
|||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
|
class HttpClient:
|
||||||
|
def __init__(self, requests_module, base_url="http://192.168.4.1"):
|
||||||
|
self.requests = requests_module
|
||||||
|
self.base_url = base_url.rstrip("/")
|
||||||
|
|
||||||
|
def get_status(self):
|
||||||
|
response = self.requests.get(f"{self.base_url}/status")
|
||||||
|
return response.json()
|
||||||
|
|
||||||
|
def set_relay(self, relay, enabled):
|
||||||
|
state = "on" if enabled else "off"
|
||||||
|
response = self.requests.get(f"{self.base_url}/relay/{relay}/{state}")
|
||||||
|
return response.json()
|
||||||
|
|||||||
@@ -228,3 +228,66 @@ def test_communication_service_records_errors():
|
|||||||
service.poll()
|
service.poll()
|
||||||
|
|
||||||
assert state.last_error["message"] == "invalid_json"
|
assert state.last_error["message"] == "invalid_json"
|
||||||
|
|
||||||
|
|
||||||
|
class FakeResponse:
|
||||||
|
def __init__(self, payload):
|
||||||
|
self.payload = payload
|
||||||
|
|
||||||
|
def json(self):
|
||||||
|
return self.payload
|
||||||
|
|
||||||
|
|
||||||
|
class FakeRequests:
|
||||||
|
def __init__(self):
|
||||||
|
self.urls = []
|
||||||
|
self.responses = []
|
||||||
|
|
||||||
|
def get(self, url):
|
||||||
|
self.urls.append(url)
|
||||||
|
|
||||||
|
if self.responses:
|
||||||
|
return FakeResponse(self.responses.pop(0))
|
||||||
|
|
||||||
|
return FakeResponse({"ok": True})
|
||||||
|
|
||||||
|
|
||||||
|
def test_http_client_get_status():
|
||||||
|
from comms.http_client import HttpClient
|
||||||
|
|
||||||
|
fake_requests = FakeRequests()
|
||||||
|
fake_requests.responses = [
|
||||||
|
{"type": "status_response", "battery": {"soc": 82}}
|
||||||
|
]
|
||||||
|
|
||||||
|
client = HttpClient(fake_requests)
|
||||||
|
|
||||||
|
payload = client.get_status()
|
||||||
|
|
||||||
|
assert fake_requests.urls == ["http://192.168.4.1/status"]
|
||||||
|
assert payload["type"] == "status_response"
|
||||||
|
assert payload["battery"]["soc"] == 82
|
||||||
|
|
||||||
|
|
||||||
|
def test_http_client_set_relay_on():
|
||||||
|
from comms.http_client import HttpClient
|
||||||
|
|
||||||
|
fake_requests = FakeRequests()
|
||||||
|
client = HttpClient(fake_requests)
|
||||||
|
|
||||||
|
payload = client.set_relay("starlink", True)
|
||||||
|
|
||||||
|
assert fake_requests.urls == ["http://192.168.4.1/relay/starlink/on"]
|
||||||
|
assert payload == {"ok": True}
|
||||||
|
|
||||||
|
|
||||||
|
def test_http_client_set_relay_off():
|
||||||
|
from comms.http_client import HttpClient
|
||||||
|
|
||||||
|
fake_requests = FakeRequests()
|
||||||
|
client = HttpClient(fake_requests)
|
||||||
|
|
||||||
|
payload = client.set_relay("fridge", False)
|
||||||
|
|
||||||
|
assert fake_requests.urls == ["http://192.168.4.1/relay/fridge/off"]
|
||||||
|
assert payload == {"ok": True}
|
||||||
|
|||||||
Reference in New Issue
Block a user