"""Configure py.test."""
import json
from unittest.mock import patch

import pytest

from .const import VALID_ACCESS_TOKEN, VALID_ACCOUNT_ID

from tests.common import load_fixture


@pytest.fixture(name="laundrify_setup_entry")
def laundrify_setup_entry_fixture():
    """Mock laundrify setup entry function."""
    with patch(
        "homeassistant.components.laundrify.async_setup_entry", return_value=True
    ) as mock_setup_entry:
        yield mock_setup_entry


@pytest.fixture(name="laundrify_exchange_code")
def laundrify_exchange_code_fixture():
    """Mock laundrify exchange_auth_code function."""
    with patch(
        "laundrify_aio.LaundrifyAPI.exchange_auth_code",
        return_value=VALID_ACCESS_TOKEN,
    ) as exchange_code_mock:
        yield exchange_code_mock


@pytest.fixture(name="laundrify_validate_token")
def laundrify_validate_token_fixture():
    """Mock laundrify validate_token function."""
    with patch(
        "laundrify_aio.LaundrifyAPI.validate_token",
        return_value=True,
    ) as validate_token_mock:
        yield validate_token_mock


@pytest.fixture(name="laundrify_api_mock", autouse=True)
def laundrify_api_fixture(laundrify_exchange_code, laundrify_validate_token):
    """Mock valid laundrify API responses."""
    with patch(
        "laundrify_aio.LaundrifyAPI.get_account_id",
        return_value=VALID_ACCOUNT_ID,
    ), patch(
        "laundrify_aio.LaundrifyAPI.get_machines",
        return_value=json.loads(load_fixture("laundrify/machines.json")),
    ) as get_machines_mock:
        yield get_machines_mock