113 lines
3.0 KiB
Python
113 lines
3.0 KiB
Python
"""Fixtures for the Nord Pool integration."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from collections.abc import AsyncGenerator
|
|
import json
|
|
from typing import Any
|
|
|
|
from pynordpool import API, NordPoolClient
|
|
import pytest
|
|
|
|
from homeassistant.components.nordpool.const import DOMAIN
|
|
from homeassistant.config_entries import SOURCE_USER
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from . import ENTRY_CONFIG
|
|
|
|
from tests.common import MockConfigEntry, load_fixture
|
|
from tests.test_util.aiohttp import AiohttpClientMocker
|
|
|
|
|
|
@pytest.fixture
|
|
async def load_int(hass: HomeAssistant, get_client: NordPoolClient) -> MockConfigEntry:
|
|
"""Set up the Nord Pool integration in Home Assistant."""
|
|
config_entry = MockConfigEntry(
|
|
domain=DOMAIN,
|
|
source=SOURCE_USER,
|
|
data=ENTRY_CONFIG,
|
|
)
|
|
|
|
config_entry.add_to_hass(hass)
|
|
|
|
await hass.config_entries.async_setup(config_entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
return config_entry
|
|
|
|
|
|
@pytest.fixture(name="get_client")
|
|
async def get_data_from_library(
|
|
hass: HomeAssistant,
|
|
aioclient_mock: AiohttpClientMocker,
|
|
load_json: list[dict[str, Any]],
|
|
) -> AsyncGenerator[NordPoolClient]:
|
|
"""Retrieve data from Nord Pool library."""
|
|
aioclient_mock.request(
|
|
"GET",
|
|
url=API + "/DayAheadPrices",
|
|
params={
|
|
"date": "2024-11-05",
|
|
"market": "DayAhead",
|
|
"deliveryArea": "SE3,SE4",
|
|
"currency": "SEK",
|
|
},
|
|
json=load_json[0],
|
|
)
|
|
aioclient_mock.request(
|
|
"GET",
|
|
url=API + "/DayAheadPrices",
|
|
params={
|
|
"date": "2024-11-05",
|
|
"market": "DayAhead",
|
|
"deliveryArea": "SE3",
|
|
"currency": "EUR",
|
|
},
|
|
json=load_json[0],
|
|
)
|
|
aioclient_mock.request(
|
|
"GET",
|
|
url=API + "/DayAheadPrices",
|
|
params={
|
|
"date": "2024-11-04",
|
|
"market": "DayAhead",
|
|
"deliveryArea": "SE3,SE4",
|
|
"currency": "SEK",
|
|
},
|
|
json=load_json[1],
|
|
)
|
|
aioclient_mock.request(
|
|
"GET",
|
|
url=API + "/DayAheadPrices",
|
|
params={
|
|
"date": "2024-11-06",
|
|
"market": "DayAhead",
|
|
"deliveryArea": "SE3,SE4",
|
|
"currency": "SEK",
|
|
},
|
|
json=load_json[2],
|
|
)
|
|
client = NordPoolClient(aioclient_mock.create_session(hass.loop))
|
|
yield client
|
|
await client._session.close()
|
|
|
|
|
|
@pytest.fixture(name="load_json")
|
|
def load_json_from_fixture(load_data: list[str, str, str]) -> list[dict[str, Any]]:
|
|
"""Load fixture with json data and return."""
|
|
return [
|
|
json.loads(load_data[0]),
|
|
json.loads(load_data[1]),
|
|
json.loads(load_data[2]),
|
|
]
|
|
|
|
|
|
@pytest.fixture(name="load_data", scope="package")
|
|
def load_data_from_fixture() -> list[str, str, str]:
|
|
"""Load fixture with fixture data and return."""
|
|
return [
|
|
load_fixture("delivery_period_today.json", DOMAIN),
|
|
load_fixture("delivery_period_yesterday.json", DOMAIN),
|
|
load_fixture("delivery_period_tomorrow.json", DOMAIN),
|
|
]
|