"""Shared conftest for all integration tests."""

import pytest

import reflex.app
from reflex.testing import AppHarness, AppHarnessProd


@pytest.fixture(
    scope="session", params=[AppHarness, AppHarnessProd], ids=["dev", "prod"]
)
def app_harness_env(request):
    """Parametrize the AppHarness class to use for the test, either dev or prod.

    Args:
        request: The pytest fixture request object.

    Returns:
        The AppHarness class to use for the test.
    """
    return request.param


@pytest.fixture(autouse=True)
def raise_console_error(request, mocker):
    """Spy on calls to `console.error` used by the framework.

    Help catch spurious error conditions that might otherwise go unnoticed.

    If a test is marked with `ignore_console_error`, the spy will be ignored
    after the test.

    Args:
        request: The pytest request object.
        mocker: The pytest mocker object.

    Yields:
        control to the test function.
    """
    spy = mocker.spy(reflex.app.console, "error")
    yield
    if "ignore_console_error" not in request.keywords:
        spy.assert_not_called()
