"""Tests for PlaylistIdsQuery.""" from playlist.queries.constants import ( HOURLY_PLAYLISTS_TABLE, PLAYLIST_METADATA_TABLE, PRIORITY_PLAYLISTS_TABLE, ) from playlist.queries.playlist.playlist_ids_query import PlaylistIdsQuery class TestPlaylistIdsQuery: """Tests for PlaylistIdsQuery class.""" def test_init_default(self): """Test initialization with default parameters.""" query = PlaylistIdsQuery() assert query.include_hourly is False assert query.include_non_priority is False assert query.store_ids is None def test_init_with_hourly(self): """Test initialization with include_hourly=True.""" query = PlaylistIdsQuery(include_hourly=True) assert query.include_hourly is True assert query.include_non_priority is False def test_init_with_non_priority(self): """Test initialization with include_non_priority=True.""" query = PlaylistIdsQuery(include_non_priority=True) assert query.include_hourly is False assert query.include_non_priority is True def test_init_with_both_flags(self): """Test initialization with both include_hourly and include_non_priority.""" query = PlaylistIdsQuery(include_hourly=True, include_non_priority=True) assert query.include_hourly is True assert query.include_non_priority is True def test_init_with_store_ids(self): """Test initialization with store_ids parameter.""" store_ids = [1, 286] query = PlaylistIdsQuery(store_ids=store_ids) assert query.store_ids == store_ids def test_filename_always_returns_same_file(self): """Test filename property always returns playlist_ids.sql (uses conditional logic).""" query_default = PlaylistIdsQuery() query_hourly = PlaylistIdsQuery(include_hourly=True) query_non_priority = PlaylistIdsQuery(include_non_priority=True) query_both = PlaylistIdsQuery(include_hourly=True, include_non_priority=True) assert query_default.filename == "playlist_ids.sql" assert query_hourly.filename == "playlist_ids.sql" assert query_non_priority.filename == "playlist_ids.sql" assert query_both.filename == "playlist_ids.sql" def test_table_params_defaults(self): """Test table_params with default parameters.""" query = PlaylistIdsQuery() params = query.table_params assert params == { "priority_playlists_table": PRIORITY_PLAYLISTS_TABLE, "hourly_playlists_table": HOURLY_PLAYLISTS_TABLE, "playlist_metadata_table": PLAYLIST_METADATA_TABLE, "include_hourly": False, "include_non_priority": False, } assert "store_ids" not in params def test_table_params_with_hourly(self): """Test table_params includes include_hourly=True.""" query = PlaylistIdsQuery(include_hourly=True) params = query.table_params assert params["include_hourly"] is True assert params["include_non_priority"] is False assert params["priority_playlists_table"] == PRIORITY_PLAYLISTS_TABLE assert params["hourly_playlists_table"] == HOURLY_PLAYLISTS_TABLE assert params["playlist_metadata_table"] == PLAYLIST_METADATA_TABLE def test_table_params_with_non_priority(self): """Test table_params includes include_non_priority=True.""" query = PlaylistIdsQuery(include_non_priority=True) params = query.table_params assert params["include_hourly"] is False assert params["include_non_priority"] is True assert params["priority_playlists_table"] == PRIORITY_PLAYLISTS_TABLE assert params["hourly_playlists_table"] == HOURLY_PLAYLISTS_TABLE assert params["playlist_metadata_table"] == PLAYLIST_METADATA_TABLE def test_table_params_with_both_flags(self): """Test table_params includes both flags when enabled.""" query = PlaylistIdsQuery(include_hourly=True, include_non_priority=True) params = query.table_params assert params["include_hourly"] is True assert params["include_non_priority"] is True assert params["priority_playlists_table"] == PRIORITY_PLAYLISTS_TABLE assert params["hourly_playlists_table"] == HOURLY_PLAYLISTS_TABLE assert params["playlist_metadata_table"] == PLAYLIST_METADATA_TABLE def test_table_params_with_store_ids(self): """Test table_params includes store_ids when provided.""" store_ids = [1, 286] query = PlaylistIdsQuery(store_ids=store_ids) params = query.table_params assert params["store_ids"] == store_ids assert "store_ids" in params