"""Unit tests for data availability model layer.""" import datetime from unittest.mock import patch import pytest from sound_recordings.models.data_availability import ( FIELD_FEED_ID, FIELD_SKIPS_SAVES, FIELD_STORE_ID, FIELD_STREAMS, FIELD_TYPES, get_downloads_max_available_date, get_max_available_date, get_outage_stores, ) MOCK_SQL = "{subaccount_clause}" @pytest.fixture def mock_outage_snowflake_fetchall(): """Mock Store Outages Snowflake fetchall.""" with patch( "sound_recordings.models.data_availability.snowflake.fetchall" ) as fetchall: fetchall.return_value = [ (1, 4, True, True), (2, 3, False, True), (3, 2, True, False), (4, 1, False, False), ] yield fetchall @pytest.fixture def mock_max_available_date_snowflake_fetchall(): """Mock Store Outages Snowflake fetchall.""" with patch( "sound_recordings.models.data_availability.snowflake.fetchall" ) as fetchall: fetchall.return_value = [(datetime.date(2018, 7, 6),)] yield fetchall @pytest.fixture def mock_max_available_date_cache(): """Mock Store Outages Snowflake fetchall.""" with patch("sound_recordings.connectors.redis.client.get") as cache: cache.return_value = b'"2018-07-06"' yield cache @pytest.fixture def mock_downloads_max_available_date_cache(): """Mock Store Outages Snowflake fetchall.""" with patch("sound_recordings.connectors.redis.client.get") as cache: cache.return_value = b'"2018-07-07"' yield cache def test_get_outage_stores(mock_outage_snowflake_fetchall): """Test get_outage_stores function.""" result = get_outage_stores() assert result == [ { FIELD_FEED_ID: 1, FIELD_STORE_ID: 4, FIELD_TYPES: [FIELD_STREAMS, FIELD_SKIPS_SAVES], }, {FIELD_FEED_ID: 2, FIELD_STORE_ID: 3, FIELD_TYPES: [FIELD_SKIPS_SAVES]}, {FIELD_FEED_ID: 3, FIELD_STORE_ID: 2, FIELD_TYPES: [FIELD_STREAMS]}, ] assert mock_outage_snowflake_fetchall.call_count == 1 def test_get_max_available_date( mock_max_available_date_cache, mock_max_available_date_snowflake_fetchall ): """Test get_max_available_date function.""" result = get_max_available_date() assert result == "2018-07-06" def test_get_downloads_max_available_date( mock_downloads_max_available_date_cache, mock_max_available_date_snowflake_fetchall ): """Test get_downloads_max_available_date function.""" result = get_downloads_max_available_date() assert result == "2018-07-07"