"""Unit tests for demographics logic layer.""" from unittest import mock from unittest.mock import MagicMock from analytics.connectors import redis from analytics.logic import demographics as demographics_logic from analytics.models import demographics as demographics_models def test_response_for_analytics_frontend(monkeypatch): """Convert cohorts list to response for analytics frontend.""" monkeypatch.setattr(redis.client, 'get', MagicMock(return_value=None)) monkeypatch.setattr(redis.client, 'set', MagicMock()) data = [demographics_models.Cohort(**cohort_data) for cohort_data in ( { 'gender': 'men', 'age_group': '18-50', 'streams': 500, }, { 'gender': 'women', 'age_group': '18-50', 'streams': 400, }, { 'gender': 'unknown', 'age_group': '18-50', 'streams': 100, }, )] response = demographics_logic.format_response_for_analytics_frontend(data) assert response == { 'age_breakdown': [{ 'age_group': '18-50', 'all_percentage': 100, 'all_streams_number': 1000, 'men_percentage': 50, 'men_streams_number': 500, 'women_percentage': 40, 'women_streams_number': 400, }], 'gender_breakdown': { 'streams_number': 1000, 'women_percentage': 40, 'women_streams_number': 400, 'men_percentage': 50, 'men_streams_number': 500, 'unknown_percentage': 10, 'unknown_streams_number': 100, }, 'top_audiences': [ { 'age_group': '18-50', 'gender': 'men', 'percentage': 50, 'total_streams_number': 500 }, { 'age_group': '18-50', 'gender': 'women', 'percentage': 40, 'total_streams_number': 400 }, { 'age_group': '18-50', 'gender': 'unknown', 'percentage': 10, 'total_streams_number': 100 }, ], } def test_empty_response_for_analytics_frontend(monkeypatch): """Check format_response_for_analytics_frontend works with empty data.""" monkeypatch.setattr(redis.client, 'get', MagicMock(return_value=None)) monkeypatch.setattr(redis.client, 'set', MagicMock()) assert demographics_logic.format_response_for_analytics_frontend([]) == { 'age_breakdown': [], 'gender_breakdown': { 'streams_number': 0, 'men_streams_number': 0, 'men_percentage': 0, 'unknown_streams_number': 0, 'unknown_percentage': 0, 'women_streams_number': 0, 'women_percentage': 0 }, 'top_audiences': [], } def test_get_demographic_insights_no_content(monkeypatch): """Test logic returns 204 response when no data is found.""" mock_get_cohorts = mock.Mock() mock_get_cohorts.return_value = mock.Mock(status=204) monkeypatch.setattr(demographics_models, 'get_cohorts', mock_get_cohorts) response = demographics_logic.get_demographic_insights( store_ids={286}, feed_ids=[1, 2], start_date='2017-01-01', end_date='2017-10-01', account_type='L', account_id=7123, distributors=['theorchard']) assert response.status == 204