"""Test ACRID model operations.""" from unittest.mock import call from unittest.mock import patch from sound_recordings.cypher import acrids as cypher from sound_recordings.models import acrids @patch('sound_recordings.models.acrids.by', return_value='unit-test') @patch('sound_recordings.models.acrids.get_session') def test_upsert_success( mock_neo4j_get_session, mock_by, make_graph_node, make_graph_result_summary): """Test sucessful insert.""" mock_neo4j_session = mock_neo4j_get_session.return_value mock_neo4j_results = mock_neo4j_session.run.return_value mock_neo4j_results.single.return_value = { 'a': make_graph_node('asset456', labels=('OrchardAsset')), 'old_ids': [] } mock_neo4j_results.consume.return_value = make_graph_result_summary({ 'nodes-created': 1, 'relationships-created': 2 }) results = acrids.upsert('acr123', 'asset456') assert mock_neo4j_session.run.called assert mock_neo4j_session.run.call_args_list == [ call( cypher.UPSERT, acr_id='acr123', asset_id='asset456', by='unit-test' ) ] assert results == (True, [], 1, 2) @patch('sound_recordings.models.acrids.by', return_value='unit-test') @patch('sound_recordings.models.acrids.get_session') def test_upsert_no_results( mock_neo4j_get_session, mock_by, make_graph_node, make_graph_result_summary): """Test asset not found or not attached to track.""" mock_neo4j_session = mock_neo4j_get_session.return_value mock_neo4j_results = mock_neo4j_session.run.return_value mock_neo4j_results.single.return_value = None mock_neo4j_results.consume.return_value = make_graph_result_summary({ 'nodes-created': 0, 'relationships-created': 0 }) results = acrids.upsert('acr123', 'asset456') assert results == (False, [], 0, 0) @patch('sound_recordings.models.acrids.by', return_value='unit-test') @patch('sound_recordings.models.acrids.get_session') def test_upsert_with_old_acrids( mock_neo4j_get_session, mock_by, make_graph_node, make_graph_result_summary): """Test asset already has different acrid.""" mock_neo4j_session = mock_neo4j_get_session.return_value mock_neo4j_results = mock_neo4j_session.run.return_value mock_neo4j_results.single.return_value = { 'a': make_graph_node('asset456', labels=('OrchardAsset')), 'old_ids': ['acr456'] } mock_neo4j_results.consume.return_value = make_graph_result_summary({ 'nodes-created': 0, 'relationships-created': 1 }) results = acrids.upsert('acr123', 'asset456') assert results == (True, ['acr456'], 0, 1)