"""Unit tests for bulk_ingest_template.get_bulk_ingest_template.""" from unittest.mock import patch from collaborator.logic.bulk_ingest_template import get_bulk_ingest_template MODULE_SF_PRODUCT = "collaborator.models.snowflake.product_persister.ProductPersister" def _run_template(track_rows): with patch(f"{MODULE_SF_PRODUCT}.get_tracks_for_template", return_value=track_rows): return get_bulk_ingest_template(vendor_id=24601) # --------------------------------------------------------------------------- # Empty catalog # --------------------------------------------------------------------------- def test_empty_catalog_returns_empty_list(): """Returns an empty list when the vendor has no tracks.""" result = _run_template(track_rows=[]) assert result == [] # --------------------------------------------------------------------------- # One row per track, split fields always empty # --------------------------------------------------------------------------- def test_track_produces_one_row(): """Each track produces exactly one row with split fields set to None.""" track_rows = [(10, "UPC001", "Album Title", "123456", "My Song", "USABC1234567")] result = _run_template(track_rows=track_rows) assert len(result) == 1 row = result[0] assert row.vendor_id == 24601 assert row.product_id == 10 assert row.tuid == "123456" def test_multiple_tracks_each_produce_one_row(): """Multiple tracks each produce one row.""" track_rows = [ (10, "UPC001", "Album A", "111", "Track One", "ISRC001"), (20, "UPC002", "Album B", "222", "Track Two", "ISRC002"), ] result = _run_template(track_rows=track_rows) assert len(result) == 2 assert {r.tuid for r in result} == {"111", "222"} # --------------------------------------------------------------------------- # Track name and ISRC from Snowflake # --------------------------------------------------------------------------- def test_track_name_and_isrc_populated(): """track_name and track_isrc are populated from Snowflake data.""" track_rows = [(10, "UPC001", "Album Title", "123456", "My Song", "USABC1234567")] result = _run_template(track_rows=track_rows) assert result[0].track_name == "My Song" assert result[0].track_isrc == "USABC1234567" def test_missing_track_info_defaults_to_none(): """If Snowflake has no track_name or isrc, track fields default to None.""" track_rows = [(10, "UPC001", "Album Title", "123456", None, None)] result = _run_template(track_rows=track_rows) assert result[0].track_name is None assert result[0].track_isrc is None def test_partial_track_info(): """Tracks with Snowflake data get populated; others default to None.""" track_rows = [ (10, "UPC001", "Album A", "111", "Track One", "ISRC001"), (20, "UPC002", "Album B", "222", None, None), ] result = _run_template(track_rows=track_rows) row_a = next(r for r in result if r.tuid == "111") assert row_a.track_name == "Track One" assert row_a.track_isrc == "ISRC001" row_b = next(r for r in result if r.tuid == "222") assert row_b.track_name is None assert row_b.track_isrc is None