"""Conftest.""" from unittest.mock import MagicMock import uuid import application import pytest from python_pdp_sdk.backends.authorization_backend import AuthorizationBackend from territories import api from territories.connectors import sqlite from territories.constants import header @pytest.fixture def header_fixture(): """Return header dict fixture. Returns: dict: header dict """ correlation_id = str(uuid.uuid1()) fixture_header = { header.CORRELATION_ID: correlation_id, header.CONTENT_TYPE: header.APPLICATION_JSON } return fixture_header @pytest.fixture def db_fixture(request): """Create and inserts a standard common db fixture. Args: request (_pytest.python.SubRequest): a sub request for handling getting a fixture from a test function/fixture. """ sqlite.BaseModel.metadata.create_all(sqlite._db_engine) def db_fixture_teardown(): sqlite.BaseModel.metadata.drop_all(sqlite._db_engine) request.addfinalizer(db_fixture_teardown) @pytest.fixture def context(): """Return flask app context, including a mock logger. Returns: AppContext: flask app context, including a mock logger. """ class MockLog: """MockLog class.""" def error(self): pass def info(self): pass def warning(self): pass context = application.app.app_context() context.g.log = MockLog return context @pytest.fixture def fixture_client(): """Create an api test client fixture.""" return api.app.test_client() @pytest.fixture def orch_standard(): """Return the base "Orchard" standard.""" return 'Orch_1_2016' @pytest.fixture def iso_standard(): """Return an ISO standard from the canonical territory data.""" return 'ISO_3166_1_2016' @pytest.fixture def app_context(): """App context fixture.""" with application.app.app_context(): yield @pytest.fixture def mock_authorization_backend() -> AuthorizationBackend: """Return a MagicMock spec'd as AuthorizationBackend. This fixture intentionally does NOT patch any module attribute. The caller is responsible for patching at the usage/import site of the code under test, e.g.:: with patch( "territories.logic..authorization_backend", mock_authorization_backend, ): ... Patching ``territories.api.authorization_backend`` from this fixture would not affect modules that did ``from territories.api import authorization_backend``, since those imports hold their own reference to the original object -- so patching is left to the test author who knows the actual import path of the code being exercised. """ return MagicMock(spec=AuthorizationBackend)