1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
"""Tests for Kamereon API."""
import aiohttp
import pytest
from aioresponses import aioresponses
from aioresponses.core import RequestCall
from syrupy.assertion import SnapshotAssertion
from yarl import URL
from tests import fixtures
from tests.const import TEST_ACCOUNT_ID
from tests.const import TEST_COUNTRY
from tests.const import TEST_KAMEREON_APIKEY
from tests.const import TEST_KAMEREON_URL
from tests.const import TEST_PERSON_ID
from tests.const import TEST_VIN
from renault_api import kamereon
from renault_api.kamereon import exceptions
@pytest.mark.asyncio
async def test_get_person(
websession: aiohttp.ClientSession, mocked_responses: aioresponses
) -> None:
"""Test get_person."""
fixtures.inject_get_person(mocked_responses)
person = await kamereon.get_person(
websession=websession,
root_url=TEST_KAMEREON_URL,
api_key=TEST_KAMEREON_APIKEY,
gigya_jwt=fixtures.get_jwt(),
country=TEST_COUNTRY,
person_id=TEST_PERSON_ID,
)
assert person.accounts is not None
assert len(person.accounts) == 2
@pytest.mark.asyncio
async def test_get_account_vehicles(
websession: aiohttp.ClientSession, mocked_responses: aioresponses
) -> None:
"""Test get_account_vehicles."""
fixtures.inject_get_vehicles(mocked_responses, "zoe_40.1.json")
await kamereon.get_account_vehicles(
websession=websession,
root_url=TEST_KAMEREON_URL,
api_key=TEST_KAMEREON_APIKEY,
gigya_jwt=fixtures.get_jwt(),
country=TEST_COUNTRY,
account_id=TEST_ACCOUNT_ID,
)
@pytest.mark.asyncio
async def test_get_vehicle_data(
websession: aiohttp.ClientSession, mocked_responses: aioresponses
) -> None:
"""Test get_vehicle_data."""
fixtures.inject_get_battery_status(mocked_responses)
assert await kamereon.get_vehicle_data(
websession=websession,
root_url=TEST_KAMEREON_URL,
api_key=TEST_KAMEREON_APIKEY,
gigya_jwt=fixtures.get_jwt(),
country=TEST_COUNTRY,
account_id=TEST_ACCOUNT_ID,
vin=TEST_VIN,
endpoint="battery-status",
)
@pytest.mark.asyncio
async def test_get_vehicle_data_xml_bad_gateway(
websession: aiohttp.ClientSession, mocked_responses: aioresponses
) -> None:
"""Test get_vehicle_data with invalid xml data."""
fixtures.inject_get_battery_status(mocked_responses, "error/bad_gateway.html")
with pytest.raises(exceptions.KamereonResponseException) as excinfo:
await kamereon.get_vehicle_data(
websession=websession,
root_url=TEST_KAMEREON_URL,
api_key=TEST_KAMEREON_APIKEY,
gigya_jwt=fixtures.get_jwt(),
country=TEST_COUNTRY,
account_id=TEST_ACCOUNT_ID,
vin=TEST_VIN,
endpoint="battery-status",
)
assert excinfo.value.error_code == "Invalid JSON"
assert excinfo.value.error_details
assert excinfo.value.error_details.startswith(
"<html>\n <head>\n <title>502 Bad Gateway</title>"
)
@pytest.mark.asyncio
async def test_set_vehicle_action(
websession: aiohttp.ClientSession,
mocked_responses: aioresponses,
snapshot: SnapshotAssertion,
) -> None:
"""Test set_vehicle_action."""
url = fixtures.inject_set_hvac_start(mocked_responses, "cancel")
assert await kamereon.set_vehicle_action(
websession=websession,
root_url=TEST_KAMEREON_URL,
api_key=TEST_KAMEREON_APIKEY,
gigya_jwt=fixtures.get_jwt(),
country=TEST_COUNTRY,
account_id=TEST_ACCOUNT_ID,
vin=TEST_VIN,
endpoint="hvac-start",
attributes={"action": "cancel"},
)
request: RequestCall = mocked_responses.requests[("POST", URL(url))][0]
assert request.kwargs["json"] == snapshot
|