"""Fixtures for lambda testing.""" from unittest.mock import patch from unittest.mock import MagicMock import boto3 import pytest from connectors import neo4j from constants import neo4j_errors from tests.consts import config @pytest.fixture def invoke_lambda(): """Invoke the lambda function.""" client = boto3.client('lambda', region_name=config.AWS_REGION) return client.invoke( FunctionName=config.LAMBDA_NAME, InvocationType='RequestResponse', LogType='None', Payload=b'', ) @pytest.fixture def query_result_with_write_node(): """Neo4j results with write node present.""" return { 'servers': [ {'addresses': ['localhost:7687'], 'role': 'WRITE'}, {'addresses': ['localhost:7689', 'localhost:7688'], 'role': 'READ'}, {'addresses': ['localhost:7689', 'localhost:7687', 'localhost:7688'], 'role': 'ROUTE'} ] } @pytest.fixture def query_result_no_write_node(): """Neo4j results without write node.""" return { 'servers': [ {'addresses': ['localhost:7687'], 'role': 'READ'}, {'addresses': ['localhost:7689', 'localhost:7688'], 'role': 'READ'}, {'addresses': ['localhost:7689', 'localhost:7687', 'localhost:7688'], 'role': 'ROUTE'} ] } @pytest.fixture def query_result_verification_no_write_node(query_result_no_write_node): """Neo4j verification result without write node.""" return { 'query_result': query_result_no_write_node, 'error': neo4j_errors.WRITE_NODE_NOT_AVAILABLE } @pytest.fixture def mock_neo4j_driver(): """Mock Neo4J driver object.""" with patch.object(neo4j, 'get_driver') as driver: yield driver @pytest.fixture def mock_neo4j_session(mock_neo4j_driver): """Mock Neo4J session object.""" session_context = MagicMock() mock_neo4j_driver.return_value.session.return_value = session_context return session_context @pytest.fixture() def mock_driver_and_session(): """Mock neo4j driver and session.""" neo4j_driver = MagicMock() session_context = MagicMock() neo4j_driver.session.return_value = session_context return neo4j_driver, session_context