from decimal import Decimal from playlist.queries.constants import DEFAULT_STREAMING_AGGREGATION_VALUES from playlist.queries.formatting import ( _format_placement_row, format_placements_with_gsr_split, format_placements_with_total_count, format_row, ) from tests.unit.fixtures.queries import PLACEMENT_DB_RESPONSE def test_format_placement_row_empty(): assert _format_placement_row(DEFAULT_STREAMING_AGGREGATION_VALUES) == { "available_storefronts": None, "streams_all_time": 0, "streams_last_365_days": 0, "streams_last_183_days": 0, "streams_last_90_days": 0, "streams_last_28_days": 0, "streams_last_14_days": 0, "streams_last_7_days": 0, "streams_last_1_day": 0, "completion_rate_all_time": 0, "completion_rate_last_365_days": 0, "completion_rate_last_183_days": 0, "completion_rate_last_28_days": 0, "completion_rate_last_7_days": 0, "total_count": 0, } def test_format_placement_row(): assert _format_placement_row( { "streams_all_time": 100, "streams_last_365_days": 100, "streams_last_183_days": 100, "streams_last_90_days": 100, "streams_last_28_days": 100, "streams_last_14_days": 100, "streams_last_7_days": 100, "streams_last_1_day": 100, "completion_rate_all_time": 0.5, "completion_rate_last_365_days": Decimal(0.2), "completion_rate_last_183_days": Decimal(0), "completion_rate_last_28_days": Decimal(0.2), "completion_rate_last_7_days": 0.02, "total_count": 0, } ) == { "available_storefronts": None, "streams_all_time": 100, "streams_last_365_days": 100, "streams_last_183_days": 100, "streams_last_90_days": 100, "streams_last_28_days": 100, "streams_last_14_days": 100, "streams_last_7_days": 100, "streams_last_1_day": 100, "completion_rate_all_time": 0.5, "completion_rate_last_365_days": 0.2, "completion_rate_last_183_days": 0, "completion_rate_last_28_days": 0.2, "completion_rate_last_7_days": 0.02, "total_count": 0, } def test_format_placement_row_available_storefronts_json_string(): assert _format_placement_row( { "available_storefronts": '["US", "CA", "MX"]', "streams_all_time": 1, "streams_last_365_days": 1, "streams_last_183_days": 1, "streams_last_90_days": 1, "streams_last_28_days": 1, "streams_last_14_days": 1, "streams_last_7_days": 1, "streams_last_1_day": 1, "completion_rate_all_time": 0, "completion_rate_last_365_days": 0, "completion_rate_last_183_days": 0, "completion_rate_last_28_days": 0, "completion_rate_last_7_days": 0, "total_count": 1, } )["available_storefronts"] == ["US", "CA", "MX"] def test_format_placement_row_available_storefronts_list_passthrough(): assert _format_placement_row( { "available_storefronts": ["GB", "DE"], "streams_all_time": 1, "streams_last_365_days": 1, "streams_last_183_days": 1, "streams_last_90_days": 1, "streams_last_28_days": 1, "streams_last_14_days": 1, "streams_last_7_days": 1, "streams_last_1_day": 1, "completion_rate_all_time": 0, "completion_rate_last_365_days": 0, "completion_rate_last_183_days": 0, "completion_rate_last_28_days": 0, "completion_rate_last_7_days": 0, "total_count": 1, } )["available_storefronts"] == ["GB", "DE"] def test_format_decimal(): assert format_row({"a": Decimal(0.5)}) == {"a": 0.5} def test_format_placements_with_total_count(): placement = {**PLACEMENT_DB_RESPONSE[0]} placement.pop("store_id", None) formatted_placement, total_count = format_placements_with_total_count([placement]) assert "store_id" not in formatted_placement[0] def test_format_placements_with_gsr_split_all_have_gsr(): """Test when all placements have real GSRs in Neo4j""" records = [ { **PLACEMENT_DB_RESPONSE[0], "gsr_id": "uuid-123", "chartmetric_track_name": "Track 1", "chartmetric_artist_name": "Artist 1", "chartmetric_artwork_url": "https://example.com/image1.jpg", } ] placements, placeholders, total = format_placements_with_gsr_split(records) assert len(placements) == 1 assert len(placeholders) == 0 assert "chartmetric_track_name" not in placements[0] assert "gsr_id" not in placements[0] def test_format_placements_with_gsr_split_all_placeholders(): """Test when all placements are missing GSRs (use Chartmetric)""" records = [ { **PLACEMENT_DB_RESPONSE[0], "gsr_id": None, "chartmetric_track_name": "On My Way", "chartmetric_artist_name": "Alex Alexander", "chartmetric_artwork_url": "https://i.scdn.co/image/test.jpg", } ] placements, placeholders, total = format_placements_with_gsr_split(records) assert len(placements) == 0 assert len(placeholders) == 1 assert placeholders[0]["track_name"] == "On My Way" assert placeholders[0]["artist_name"] == "Alex Alexander" assert placeholders[0]["artwork_url"] == "https://i.scdn.co/image/test.jpg" assert "gsr_id" not in placeholders[0] def test_format_placements_with_gsr_split_mixed(): """Test with mix of real GSRs and placeholders""" records = [ { **PLACEMENT_DB_RESPONSE[0], "isrc": "REAL123", "gsr_id": "uuid-real", "chartmetric_track_name": None, "chartmetric_artist_name": None, "chartmetric_artwork_url": None, }, { **PLACEMENT_DB_RESPONSE[0], "isrc": "PLACEHOLDER456", "gsr_id": None, "chartmetric_track_name": "Placeholder Track", "chartmetric_artist_name": "Placeholder Artist", "chartmetric_artwork_url": "https://example.com/placeholder.jpg", }, ] placements, placeholders, total = format_placements_with_gsr_split(records) assert len(placements) == 1 assert len(placeholders) == 1 assert placements[0]["isrc"] == "REAL123" assert placeholders[0]["isrc"] == "PLACEHOLDER456" assert placeholders[0]["track_name"] == "Placeholder Track"