"""Fixtures for tests in the impress core application"""

from unittest import mock

from django.core.cache import cache

import pytest

USER = "user"
TEAM = "team"
VIA = [USER, TEAM]


@pytest.fixture(autouse=True)
def clear_cache():
    """Fixture to clear the cache before each test."""
    cache.clear()


@pytest.fixture
def mock_user_teams():
    """Mock for the "teams" property on the User model."""
    with mock.patch(
        "core.models.User.teams", new_callable=mock.PropertyMock
    ) as mock_teams:
        yield mock_teams


@pytest.fixture(name="indexer_settings")
def indexer_settings_fixture(settings):
    """
    Setup valid settings for the document indexer. Clear the indexer cache.
    """

    # pylint: disable-next=import-outside-toplevel
    from core.services.search_indexers import (  # noqa: PLC0415
        get_document_indexer,
    )

    get_document_indexer.cache_clear()

    settings.SEARCH_INDEXER_CLASS = "core.services.search_indexers.SearchIndexer"
    settings.SEARCH_INDEXER_SECRET = "ThisIsAKeyForTest"
    settings.SEARCH_INDEXER_URL = "http://localhost:8081/api/v1.0/documents/index/"
    settings.SEARCH_INDEXER_QUERY_URL = (
        "http://localhost:8081/api/v1.0/documents/search/"
    )
    settings.SEARCH_INDEXER_COUNTDOWN = 1

    yield settings

    # clear cache to prevent issues with other tests
    get_document_indexer.cache_clear()
