diff --git a/myskoda/models/common.py b/myskoda/models/common.py index 548baafa..6e466362 100644 --- a/myskoda/models/common.py +++ b/myskoda/models/common.py @@ -29,8 +29,9 @@ class OpenState(StrEnum): class DoorLockedState(StrEnum): LOCKED = "YES" - UNLOCKED = "NO" + OPENED = "OPENED" TRUNK_OPENED = "TRUNK_OPENED" + UNLOCKED = "NO" class ChargerLockedState(StrEnum): diff --git a/tests/fixtures/superb/vehicle-status-doors-closed.json b/tests/fixtures/superb/vehicle-status-doors-closed.json new file mode 100644 index 00000000..57e83f8a --- /dev/null +++ b/tests/fixtures/superb/vehicle-status-doors-closed.json @@ -0,0 +1,29 @@ +{ + "overall": { + "doorsLocked": "YES", + "locked": "YES", + "doors": "CLOSED", + "windows": "CLOSED", + "lights": "OFF" + }, + "detail": { + "sunroof": "CLOSED", + "trunk": "CLOSED", + "bonnet": "CLOSED" + }, + "renders": { + "lightMode": { + "oneX": "https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/render?carType=LIMOUSINE&vehicleState=1-1-1-1-0-0-0-0-2&lastModifiedAt=1723053261&dimension=1x&theme=LIGHT", + "oneAndHalfX": "https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/render?carType=LIMOUSINE&vehicleState=1-1-1-1-0-0-0-0-2&lastModifiedAt=1723053261&dimension=1-5x&theme=LIGHT", + "twoX": "https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/render?carType=LIMOUSINE&vehicleState=1-1-1-1-0-0-0-0-2&lastModifiedAt=1723053261&dimension=2x&theme=LIGHT", + "threeX": "https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/render?carType=LIMOUSINE&vehicleState=1-1-1-1-0-0-0-0-2&lastModifiedAt=1723053261&dimension=3x&theme=LIGHT" + }, + "darkMode": { + "oneX": "https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/render?carType=LIMOUSINE&vehicleState=1-1-1-1-0-0-0-0-2&lastModifiedAt=1723053261&dimension=1x&theme=DARK", + "oneAndHalfX": "https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/render?carType=LIMOUSINE&vehicleState=1-1-1-1-0-0-0-0-2&lastModifiedAt=1723053261&dimension=1-5x&theme=DARK", + "twoX": "https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/render?carType=LIMOUSINE&vehicleState=1-1-1-1-0-0-0-0-2&lastModifiedAt=1723053261&dimension=2x&theme=DARK", + "threeX": "https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/render?carType=LIMOUSINE&vehicleState=1-1-1-1-0-0-0-0-2&lastModifiedAt=1723053261&dimension=3x&theme=DARK" + } + }, + "carCapturedTimestamp": "2024-09-22T14:55:30Z" +} \ No newline at end of file diff --git a/tests/fixtures/superb/vehicle-status-left-back-door-trunk-bonnet-opened.json b/tests/fixtures/superb/vehicle-status-left-back-door-trunk-bonnet-opened.json new file mode 100644 index 00000000..e82aec40 --- /dev/null +++ b/tests/fixtures/superb/vehicle-status-left-back-door-trunk-bonnet-opened.json @@ -0,0 +1,29 @@ +{ + "overall": { + "doorsLocked": "OPENED", + "locked": "NO", + "doors": "OPEN", + "windows": "CLOSED", + "lights": "OFF" + }, + "detail": { + "sunroof": "CLOSED", + "trunk": "OPEN", + "bonnet": "OPEN" + }, + "renders": { + "lightMode": { + "oneX": "https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/render?carType=LIMOUSINE&vehicleState=1-1-3-1-0-0-1-1-2&lastModifiedAt=1723053261&dimension=1x&theme=LIGHT", + "oneAndHalfX": "https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/render?carType=LIMOUSINE&vehicleState=1-1-3-1-0-0-1-1-2&lastModifiedAt=1723053261&dimension=1-5x&theme=LIGHT", + "twoX": "https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/render?carType=LIMOUSINE&vehicleState=1-1-3-1-0-0-1-1-2&lastModifiedAt=1723053261&dimension=2x&theme=LIGHT", + "threeX": "https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/render?carType=LIMOUSINE&vehicleState=1-1-3-1-0-0-1-1-2&lastModifiedAt=1723053261&dimension=3x&theme=LIGHT" + }, + "darkMode": { + "oneX": "https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/render?carType=LIMOUSINE&vehicleState=1-1-3-1-0-0-1-1-2&lastModifiedAt=1723053261&dimension=1x&theme=DARK", + "oneAndHalfX": "https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/render?carType=LIMOUSINE&vehicleState=1-1-3-1-0-0-1-1-2&lastModifiedAt=1723053261&dimension=1-5x&theme=DARK", + "twoX": "https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/render?carType=LIMOUSINE&vehicleState=1-1-3-1-0-0-1-1-2&lastModifiedAt=1723053261&dimension=2x&theme=DARK", + "threeX": "https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/render?carType=LIMOUSINE&vehicleState=1-1-3-1-0-0-1-1-2&lastModifiedAt=1723053261&dimension=3x&theme=DARK" + } + }, + "carCapturedTimestamp": "2024-09-23T16:43:24Z" +} \ No newline at end of file diff --git a/tests/fixtures/superb/vehicle-status-right-front-door-opened.json b/tests/fixtures/superb/vehicle-status-right-front-door-opened.json new file mode 100644 index 00000000..cde06743 --- /dev/null +++ b/tests/fixtures/superb/vehicle-status-right-front-door-opened.json @@ -0,0 +1,29 @@ +{ + "overall": { + "doorsLocked": "OPENED", + "locked": "NO", + "doors": "OPEN", + "windows": "CLOSED", + "lights": "OFF" + }, + "detail": { + "sunroof": "CLOSED", + "trunk": "CLOSED", + "bonnet": "CLOSED" + }, + "renders": { + "lightMode": { + "oneX": "https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/render?carType=LIMOUSINE&vehicleState=1-3-1-1-0-0-0-0-2&lastModifiedAt=1723053261&dimension=1x&theme=LIGHT", + "oneAndHalfX": "https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/render?carType=LIMOUSINE&vehicleState=1-3-1-1-0-0-0-0-2&lastModifiedAt=1723053261&dimension=1-5x&theme=LIGHT", + "twoX": "https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/render?carType=LIMOUSINE&vehicleState=1-3-1-1-0-0-0-0-2&lastModifiedAt=1723053261&dimension=2x&theme=LIGHT", + "threeX": "https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/render?carType=LIMOUSINE&vehicleState=1-3-1-1-0-0-0-0-2&lastModifiedAt=1723053261&dimension=3x&theme=LIGHT" + }, + "darkMode": { + "oneX": "https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/render?carType=LIMOUSINE&vehicleState=1-3-1-1-0-0-0-0-2&lastModifiedAt=1723053261&dimension=1x&theme=DARK", + "oneAndHalfX": "https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/render?carType=LIMOUSINE&vehicleState=1-3-1-1-0-0-0-0-2&lastModifiedAt=1723053261&dimension=1-5x&theme=DARK", + "twoX": "https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/render?carType=LIMOUSINE&vehicleState=1-3-1-1-0-0-0-0-2&lastModifiedAt=1723053261&dimension=2x&theme=DARK", + "threeX": "https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/render?carType=LIMOUSINE&vehicleState=1-3-1-1-0-0-0-0-2&lastModifiedAt=1723053261&dimension=3x&theme=DARK" + } + }, + "carCapturedTimestamp": "2024-09-23T16:31:49Z" +} \ No newline at end of file diff --git a/tests/test_rest_api.py b/tests/test_rest_api.py index 91c7d517..722c8861 100644 --- a/tests/test_rest_api.py +++ b/tests/test_rest_api.py @@ -53,3 +53,44 @@ async def test_get_info(vehicle_infos: list[str]) -> None: "&connectivityGenerations=MOD4", headers=ANY, ) + + +@pytest.fixture(name="vehicle_statuses") +def load_vehicle_status() -> list[str]: + """Load vehicle-status fixture.""" + vehicle_statuses = [] + for path in [ + "superb/vehicle-status-doors-closed.json", + "superb/vehicle-status-right-front-door-opened.json", + "superb/vehicle-status-left-back-door-trunk-bonnet-opened.json", + ]: + with FIXTURES_DIR.joinpath(path).open() as file: + vehicle_statuses.append(file.read()) + return vehicle_statuses + + +@pytest.mark.asyncio +async def test_get_status(vehicle_statuses: list[str]) -> None: + """Example unit test for RestAPI.get_status(). Needs more work.""" + for vehicle_status in vehicle_statuses: + vehicle_status_json = json.loads(vehicle_status) + response_mock = AsyncMock() + response_mock.text.return_value = vehicle_status + session_mock = MagicMock() + session_mock.get.return_value.__aenter__.return_value = response_mock + + authorization = Authorization(session_mock) + api = RestApi(session_mock, authorization) + api.authorization.get_access_token = AsyncMock() + target_vin = "TMBJM0CKV1N12345" + get_status_result = await api.get_status(target_vin) + + assert get_status_result.overall.lights == vehicle_status_json["overall"]["lights"] + assert get_status_result.overall.doors == vehicle_status_json["overall"]["doors"] + assert get_status_result.detail.bonnet == vehicle_status_json["detail"]["bonnet"] + assert get_status_result.detail.trunk == vehicle_status_json["detail"]["trunk"] + + session_mock.get.assert_called_with( + f"https://mysmob.api.connect.skoda-auto.cz/api/v2/vehicle-status/{target_vin}", + headers=ANY, + )