from playlist.queries.constants import ( DEFAULT_DISTRIBUTORS, DEFAULT_PAGE_SIZE, PRIVATE_PLACEMENT_TABLE_WITHOUT_COUNTRY, RECENT_PLACEMENTS_BY_TRACK_PLAYLIST_DISTRIBUTOR_ONLY_FRESHEST_TABLE, RECENT_PLACEMENTS_BY_TRACK_PLAYLIST_DISTRIBUTOR_TABLE, RECENT_PLACEMENTS_FILENAME, RECENT_PLACEMENTS_TABLE_NAME_ONLY_FRESHEST, RECENT_PLACEMENTS_WITH_STOREFRONT_FILENAME, ) from playlist.queries.fetch_queries import RecentPlacementsQuery def test_default_args(): q = RecentPlacementsQuery() params = q.query_params assert params["offset"] == 0 assert params["limit"] == DEFAULT_PAGE_SIZE assert params["distributors"] == DEFAULT_DISTRIBUTORS assert ( params["recent_placements_table_name"] == "v_playlists_placements_by_track_playlist_distributor_public_only_freshest" ) assert ( params["private_placement_table_name"] == PRIVATE_PLACEMENT_TABLE_WITHOUT_COUNTRY ) def test_valid_filters(): filter_label_ids = ["a", "b", "c"] filter_subaccount_ids = ["d", "e", "f"] store_ids = ["1", "286"] playlist_types = ["ALGORITHMIC", "EDITORIAL"] min_followers = 100 global_participant_ids = ["e49ea9f9-0a74-4623-b3c6-ff819c7c0a4d"] sort_key = "last_added_on_date" sort_direction = "DESC" curator_countries = ["DE", "US"] storefront_enabled = True filter_by_top_10_apple_music_markets = True q = RecentPlacementsQuery( { "filter_label_ids": filter_label_ids, "filter_subaccount_ids": filter_subaccount_ids, "store_ids": store_ids, "playlist_types": playlist_types, "min_followers": min_followers, "global_participant_ids": global_participant_ids, "sort_key": sort_key, "sort_direction": sort_direction, "curator_countries": curator_countries, "storefront_enabled": storefront_enabled, "filter_by_top_10_apple_music_markets": filter_by_top_10_apple_music_markets, } ) params = q.query_params assert params["filter_label_ids"] == filter_label_ids assert params["filter_subaccount_ids"] == filter_subaccount_ids assert params["store_ids"] == store_ids assert params["playlist_types"] == playlist_types assert params["min_followers"] == min_followers assert params["global_participant_ids"] == global_participant_ids assert params["sort_key"] == sort_key assert params["sort_direction"] == sort_direction assert params["curator_countries"] == curator_countries assert params["storefront_enabled"] == storefront_enabled assert ( params["filter_by_top_10_apple_music_markets"] == filter_by_top_10_apple_music_markets ) def test_invalid_filters(): filter_label_ids = ["a", "b", "c"] filter_subaccount_ids = ["d", "e", "f"] store_ids = ["1", "286"] playlist_types = ["ALGORITHMIC", "EDITORIAL"] min_followers = 100 a = 1 q = RecentPlacementsQuery( { "filter_label_ids": filter_label_ids, "filter_subaccount_ids": filter_subaccount_ids, "store_ids": store_ids, "playlist_types": playlist_types, "min_followers": min_followers, "a": a, } ) params = q.query_params assert params["filter_label_ids"] == filter_label_ids assert params["filter_subaccount_ids"] == filter_subaccount_ids assert params["store_ids"] == store_ids assert params["playlist_types"] == playlist_types assert params["min_followers"] == min_followers assert "a" not in params def test_table_names_and_filename_when_storefront_enabled_is_true_in_params(): q = RecentPlacementsQuery( { "store_ids": ["1", "286"], "storefront_enabled": True, } ) assert q.table_params == { "recent_placements_table_name": RECENT_PLACEMENTS_BY_TRACK_PLAYLIST_DISTRIBUTOR_ONLY_FRESHEST_TABLE, "private_placement_table_name": PRIVATE_PLACEMENT_TABLE_WITHOUT_COUNTRY, } assert q.filename == RECENT_PLACEMENTS_WITH_STOREFRONT_FILENAME def test_table_names_and_filename_when_global_participant_ids_and_storefront_enabled_is_true_in_params(): q = RecentPlacementsQuery( { "global_participant_ids": ["e49ea9f9-0a74-4623-b3c6-ff819c7c0a4d"], "store_ids": ["1", "286"], "storefront_enabled": True, } ) assert q.table_params == { "recent_placements_table_name": RECENT_PLACEMENTS_BY_TRACK_PLAYLIST_DISTRIBUTOR_TABLE, "private_placement_table_name": PRIVATE_PLACEMENT_TABLE_WITHOUT_COUNTRY, } assert q.filename == RECENT_PLACEMENTS_WITH_STOREFRONT_FILENAME def test_table_names_and_filename_when_storefront_enabled_is_false_in_params(): q = RecentPlacementsQuery( { "store_ids": ["1", "286"], "storefront_enabled": False, } ) assert q.table_params == { "recent_placements_table_name": RECENT_PLACEMENTS_TABLE_NAME_ONLY_FRESHEST, "private_placement_table_name": PRIVATE_PLACEMENT_TABLE_WITHOUT_COUNTRY, } assert q.filename == RECENT_PLACEMENTS_FILENAME def test_storefront_sql_renders_correctly(): """Test that storefront SQL template renders without errors and has correct COUNT syntax.""" q = RecentPlacementsQuery( { "store_ids": ["1", "286"], "storefront_enabled": True, "sort_key": "last_added_on_date", "sort_direction": "DESC", } ) # Verify the query can be rendered (this will use the template) sql, _ = q.prepare_query() # Verify the SQL contains the fixed COUNT syntax (no parentheses around the args) # Should be: count(distinct nvl(storefront, ''), store_playlist_id, isrc) # Should NOT be: count(distinct (nvl(storefront, ''), store_playlist_id, isrc)) assert "count(distinct nvl(storefront, ''), store_playlist_id, isrc)" in sql.lower() assert ( "count(distinct (nvl(storefront, ''), store_playlist_id, isrc))" not in sql.lower() )