from playlist.queries.constants import ALLOWED_ORDER_BY_KEYS from playlist.queries.fetch_queries import PlacementMetricsByCountryQuery from tests.unit.utils import raises_validation_error store_id = "1" store_playlist_id = "pl.df3f10ca27b1479087de2cd3f9f6716b" isrc = "QZK6M1903348" def test_default_args(): q = PlacementMetricsByCountryQuery( {"store_id": store_id, "store_playlist_id": store_playlist_id, "isrc": isrc} ) params = q.query_params assert params["isrc"] == isrc assert params["store_id"] == store_id assert params["store_playlist_id"] == store_playlist_id def test_invalid_keys_are_deleted(): q = PlacementMetricsByCountryQuery( { "store_id": store_id, "store_playlist_id": store_playlist_id, "isrc": isrc, "a": 1, "b": 2, } ) assert "a" not in q.query_params assert "b" not in q.query_params assert "isrc" in q.query_params def test_invalid_with_incorrect_value_sort_key(): with raises_validation_error( {"sort_key": [f"Must be one of: {', '.join(ALLOWED_ORDER_BY_KEYS)}."]} ): PlacementMetricsByCountryQuery( { "store_id": store_id, "store_playlist_id": store_playlist_id, "isrc": isrc, "sort_key": "asdbsd", } ) def test_missing_params(): with raises_validation_error({"isrc": ["Missing data for required field."]}): PlacementMetricsByCountryQuery( { "store_id": store_id, "store_playlist_id": store_playlist_id, } ) with raises_validation_error({"store_id": ["Missing data for required field."]}): PlacementMetricsByCountryQuery( {"store_playlist_id": store_playlist_id, "isrc": isrc} ) with raises_validation_error( {"store_playlist_id": ["Missing data for required field."]} ): PlacementMetricsByCountryQuery({"store_id": store_id, "isrc": isrc})