"""Test configuration.""" from random import randint from unittest.mock import MagicMock import fakeredis from neo4j.graph import Graph, Node from owslogger import flask_logger import pytest from users import app from users.connectors import redis # Ensure unit tests never connect to a real Redis server. redis.client = fakeredis.FakeStrictRedis() @pytest.fixture def context(): """Return flask app context, including a mock logger. Returns: AppContext: flask app context, including a mock logger. """ # Import 'application' here because in ows-users it does a bunch of # auth-related imports and breaks this fixture. import application class MockLog: """Mock Logging Class.""" def error(self, *args, **kwargs): pass def info(self, *args, **kwargs): pass def warning(self, *args, **kwargs): pass def warn(self, *args, **kwargs): pass context_instance = application.app.app_context() context_instance.g.ows = flask_logger.Ows() context_instance.g.ows.log = MockLog() context_instance.g.log = MockLog() return context_instance @pytest.fixture def app_context(): """Create an api test app fixture.""" with app.app.app_context(): yield @pytest.fixture def fixture_client(): """Create an api test client fixture.""" app.app.testing = False client = app.app.test_client() yield client @pytest.fixture def user_data(): """Return user data.""" return { 'items': [ { 'user_id': 123, 'contact_first_name': 'Alfred', 'contact_last_name': 'Hithcock', 'contact_email': 'ahitchcock@theorchard.com', 'subaccount': 'Subaccount', 'permissions': 'Administrator', 'is_active': 1, 'date_deleted': '', } ], 'pagination': {'type': 'standard', 'count': 1, 'page_offset': 0, 'page_limit': 50}, } @pytest.fixture def model_user_data(): """Return user data model.""" return { 'items': [ { 'user_id': 123, 'contact_first_name': 'first name', 'contact_last_name': 'last name', 'contact_email': 'email', 'subaccount': 'El Subaccount', 'permissions': 'Catalog,Administrator', 'is_active': 0, 'date_deleted': None, } ], 'pagination': {'type': 'standard', 'count': 1, 'page_offset': None, 'page_limit': None}, } @pytest.fixture def make_graph_node(): """Node generating factory as fixture to create Node objects.""" graph = Graph() def _make_node(node_id, labels=(), data={}): data['id'] = node_id obj = Node(graph, node_id, randint(0, 1000), n_labels=labels, properties=data) return obj return _make_node def get_session_mock(return_data=[]): """GET get a mock for db_session() which returns return_data list.""" session_mock = MagicMock() result_mock = MagicMock() result_mock.__iter__.return_value = return_data result_mock.single.return_value = return_data and return_data[0] or None session_mock.run.return_value = result_mock return session_mock