"""Test snowflake models.""" from unittest.mock import patch import pandas as pd import pytest from src.models import snowflake @patch('src.connectors.snowflake.execute_query') def test_fetch_raw_data_success(mock_execute_query): """Test fetch_raw_data returns DataFrame with correct columns.""" raw_rows = [ ('2026-01-01', 'L1', 'Label A', 'Artist A', 'Track A', '111111111', 'ISRC1'), ('2026-01-02', 'L2', 'Label B', 'Artist B', 'Track B', '222222222', 'ISRC2'), ] mock_execute_query.return_value = raw_rows df = snowflake.fetch_raw_data('2026-01-01', '2026-01-31') assert list(df.columns) == [ 'Meta Update Queue Date Added', 'Label ID', 'Label Name', 'Artist Name', 'Track Name', 'Release UPC', 'Track ISRC' ] assert len(df) == 2 @patch('src.connectors.snowflake.execute_query') def test_fetch_raw_data_query_error(mock_execute_query): """Test fetch_raw_data raises exception on query error.""" mock_execute_query.side_effect = Exception('DB error') with pytest.raises(Exception, match='Unexpected error while fetching raw takedown data'): snowflake.fetch_raw_data('2026-01-01', '2026-01-31') @patch('src.connectors.snowflake.execute_query') def test_fetch_isrc_track_data_success(mock_execute_query): """Test fetch_isrc_track_data returns DataFrame with correct columns.""" takedown_df = pd.DataFrame({ 'Release UPC': ['111111111', '222222222'], 'Track ISRC': ['ISRC1', 'ISRC2'] }) isrc_rows = [ ('V1', 'Label A', 'Imp A', '10', 'Artist A', 'Artist A', '111111111', 'Release A', '0', 'TUID1', 'ISRC1', 'Track A'), ] mock_execute_query.return_value = isrc_rows df = snowflake.fetch_isrc_track_data(takedown_df) assert list(df.columns) == [ 'Vendor ID', 'Label Name', 'Imprint Name', 'Artist ID', 'Artist Name', 'Primary Artists', 'Display UPC', 'Release Name', 'Is Deleted', 'TUID', 'ISRC', 'Track Name'] assert len(df) == 1 def test_fetch_isrc_track_data_empty_isrcs(): """Test fetch_isrc_track_data returns empty DataFrame when no ISRCs.""" takedown_df = pd.DataFrame({ 'Release UPC': ['111111111', '222222222'], 'Track ISRC': [None, None] }) df = snowflake.fetch_isrc_track_data(takedown_df) assert df.empty @patch('src.connectors.snowflake.execute_query') def test_fetch_isrc_track_data_query_error(mock_execute_query): """Test fetch_isrc_track_data raises exception on query error.""" mock_execute_query.side_effect = Exception('DB error') takedown_df = pd.DataFrame({ 'Release UPC': ['111111111', '222222222'], 'Track ISRC': ['ISRC1', 'ISRC2'] }) with pytest.raises(Exception, match='Unexpected error while fetching ISRC track data'): snowflake.fetch_isrc_track_data(takedown_df)