| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- from datetime import date, datetime, time, timezone
- import pytest
- from custom_components.room_cal_ha.models import ApiStatusData, ReservationData
- # ---------------------------------------------------------------------------
- # ReservationData — serialization
- # ---------------------------------------------------------------------------
- def test_to_dict_serializes_dates_and_times():
- res = ReservationData(
- guest_name="Alice",
- check_in_date=date(2026, 7, 1),
- check_in_time=time(14, 0),
- check_out_date=date(2026, 7, 5),
- check_out_time=time(12, 0),
- wifi_key="abc",
- door_code="1234",
- )
- d = res.to_dict()
- assert d["guest_name"] == "Alice"
- assert d["check_in_date"] == "2026-07-01"
- assert d["check_in_time"] == "14:00:00"
- assert d["check_out_date"] == "2026-07-05"
- assert d["check_out_time"] == "12:00:00"
- assert d["wifi_key"] == "abc"
- assert d["door_code"] == "1234"
- def test_to_dict_none_fields_stay_none():
- res = ReservationData(guest_name=None, check_in_date=None, wifi_key=None)
- d = res.to_dict()
- assert d["guest_name"] is None
- assert d["check_in_date"] is None
- assert d["wifi_key"] is None
- def test_from_dict_deserializes_iso_strings():
- d = {
- "guest_name": "Bob",
- "check_in_date": "2026-08-01",
- "check_in_time": "15:00:00",
- "check_out_date": "2026-08-04",
- "check_out_time": "11:00:00",
- "wifi_ssid": "Net",
- "wifi_key": "xyz",
- "door_code": "9876",
- }
- res = ReservationData.from_dict(d)
- assert res.guest_name == "Bob"
- assert res.check_in_date == date(2026, 8, 1)
- assert res.check_in_time == time(15, 0)
- assert res.check_out_date == date(2026, 8, 4)
- assert res.check_out_time == time(11, 0)
- assert res.wifi_key == "xyz"
- assert res.door_code == "9876"
- def test_from_dict_none_fields():
- d = {
- "guest_name": None,
- "check_in_date": None,
- "check_in_time": None,
- "check_out_date": None,
- "check_out_time": None,
- "wifi_ssid": None,
- "wifi_key": None,
- "door_code": None,
- }
- res = ReservationData.from_dict(d)
- assert res.guest_name is None
- assert res.check_in_date is None
- assert res.check_in_time is None
- def test_round_trip():
- original = ReservationData(
- guest_name="Carol",
- check_in_date=date(2026, 9, 10),
- check_in_time=time(14, 30),
- check_out_date=date(2026, 9, 14),
- check_out_time=time(11, 0),
- wifi_ssid="HomeNet",
- wifi_key="pw",
- door_code="0000",
- )
- assert ReservationData.from_dict(original.to_dict()) == original
- # ---------------------------------------------------------------------------
- # ReservationData — apply_partial
- # ---------------------------------------------------------------------------
- SAMPLE = ReservationData(
- guest_name="Alice",
- check_in_date=date(2026, 7, 1),
- check_in_time=time(14, 0),
- check_out_date=date(2026, 7, 5),
- check_out_time=time(12, 0),
- wifi_ssid="4114",
- wifi_key="stone",
- door_code="0472",
- )
- def test_apply_partial_overlays_specified_fields():
- updated = SAMPLE.apply_partial({"wifi_ssid": "GuestNet", "door_code": "9999"})
- assert updated.wifi_ssid == "GuestNet"
- assert updated.door_code == "9999"
- def test_apply_partial_leaves_other_fields_unchanged():
- updated = SAMPLE.apply_partial({"door_code": "1111"})
- assert updated.guest_name == "Alice"
- assert updated.check_in_date == date(2026, 7, 1)
- assert updated.wifi_key == "stone"
- def test_apply_partial_can_clear_a_field_with_none():
- updated = SAMPLE.apply_partial({"guest_name": None})
- assert updated.guest_name is None
- def test_apply_partial_ignores_unknown_keys():
- updated = SAMPLE.apply_partial({"nonexistent_field": "x"})
- assert updated == SAMPLE
- def test_apply_partial_empty_dict_returns_equivalent():
- updated = SAMPLE.apply_partial({})
- assert updated == SAMPLE
- # ---------------------------------------------------------------------------
- # ReservationData — defaults
- # ---------------------------------------------------------------------------
- def test_default_values():
- res = ReservationData()
- assert res.guest_name == "<No Guest>"
- assert res.check_in_time == time(14, 0)
- assert res.check_out_time == time(12, 0)
- assert res.wifi_ssid == "4114"
- assert res.check_in_date is None
- assert res.check_out_date is None
- assert res.wifi_key is None
- assert res.door_code is None
- # ---------------------------------------------------------------------------
- # ApiStatusData — defaults
- # ---------------------------------------------------------------------------
- def test_api_status_defaults():
- s = ApiStatusData()
- assert s.status == "unknown"
- assert s.checks == {}
- assert s.checked_at is None
- assert s.stale is False
- def test_api_status_with_data():
- ts = datetime(2026, 6, 22, 10, 0, tzinfo=timezone.utc)
- s = ApiStatusData(
- status="ok",
- checks={"caldav_connection": {"ok": True}},
- checked_at=ts,
- stale=False,
- )
- assert s.status == "ok"
- assert s.checks["caldav_connection"]["ok"] is True
- assert s.checked_at == ts
|