"""Tests for CatalogTransfer model.""" from unittest.mock import MagicMock import pytest from product_digital.models import catalog_transfer CATALOG_TRANSFER_DATA = { 'release_id': 12345, 'original_distributor': 'Some Other Distributor', 'same_isrc_upc': 'Y', } @pytest.fixture def mock_session(): """Return a mock SQLAlchemy session.""" return MagicMock() @pytest.fixture def mock_catalog_transfer(): """Return a mock CatalogTransfer instance.""" obj = MagicMock(spec=catalog_transfer.CatalogTransfer) obj.release_id = CATALOG_TRANSFER_DATA['release_id'] obj.original_distributor = CATALOG_TRANSFER_DATA['original_distributor'] obj.same_isrc_upc = CATALOG_TRANSFER_DATA['same_isrc_upc'] obj.to_dict.return_value = { 'release_id': obj.release_id, 'original_distributor': obj.original_distributor, 'same_isrc_upc': obj.same_isrc_upc, } return obj def test_get_catalog_transfer_found(mock_session, mock_catalog_transfer): """Test successful retrieval of a catalog transfer record.""" mock_session.query.return_value.filter_by.return_value.first.return_value = ( mock_catalog_transfer) result = catalog_transfer.get_catalog_transfer( CATALOG_TRANSFER_DATA['release_id'], session=mock_session) assert result.status == 200 assert result.message['release_id'] == CATALOG_TRANSFER_DATA['release_id'] assert result.message['original_distributor'] == ( CATALOG_TRANSFER_DATA['original_distributor']) assert result.message['same_isrc_upc'] == CATALOG_TRANSFER_DATA['same_isrc_upc'] def test_get_catalog_transfer_not_found(mock_session): """Test that None is returned when no catalog transfer record exists.""" mock_session.query.return_value.filter_by.return_value.first.return_value = None result = catalog_transfer.get_catalog_transfer( CATALOG_TRANSFER_DATA['release_id'], session=mock_session) assert result is None def test_upsert_catalog_transfer_creates_new_record(mock_session): """Test that a new catalog transfer record is created when none exists.""" mock_session.query.return_value.filter_by.return_value.first.return_value = None mock_session.add = MagicMock() mock_session.commit = MagicMock() result = catalog_transfer.upsert_catalog_transfer( CATALOG_TRANSFER_DATA.copy(), session=mock_session) assert result.status == 200 assert result.message['release_id'] == CATALOG_TRANSFER_DATA['release_id'] mock_session.add.assert_called_once() mock_session.commit.assert_called_once() def test_upsert_catalog_transfer_updates_existing_record(mock_session, mock_catalog_transfer): """Test that upsert updates the existing record instead of creating a new one.""" mock_session.query.return_value.filter_by.return_value.first.return_value = ( mock_catalog_transfer) new_data = CATALOG_TRANSFER_DATA.copy() new_data['original_distributor'] = 'A Different Distributor' result = catalog_transfer.upsert_catalog_transfer(new_data, session=mock_session) assert result.status == 200 mock_catalog_transfer.update.assert_called_once_with(**new_data) mock_session.add.assert_not_called() mock_session.commit.assert_called_once() def test_delete_catalog_transfer_success(mock_session): """Test successful deletion of a catalog transfer record.""" mock_session.query.return_value.filter_by.return_value.delete.return_value = 1 result = catalog_transfer.delete_catalog_transfer( CATALOG_TRANSFER_DATA['release_id'], session=mock_session) assert result.status == 200 mock_session.commit.assert_called_once() def test_delete_catalog_transfer_not_found_is_idempotent(mock_session): """Test that deleting a nonexistent record is a 203 idempotent no-op.""" mock_session.query.return_value.filter_by.return_value.delete.return_value = 0 result = catalog_transfer.delete_catalog_transfer( CATALOG_TRANSFER_DATA['release_id'], session=mock_session) assert result.status == 203 mock_session.commit.assert_called_once()