"""Tests for new_music_friday_handlers.""" from unittest.mock import patch from charts.api import app from charts.logic import new_music_friday from charts.logic import new_music_friday_date from charts.logic import new_music_friday_search def test_new_music_friday_date_entries_default_options() -> None: expected_return_value = { 'total': 0, 'entries': [], } mock_return_value = new_music_friday_date.NewMusicFridayDateEntriesResponse.model_validate(expected_return_value) client = app.test_client() with patch.object(new_music_friday_date, 'new_music_friday_date_entries', return_value=mock_return_value) as logic_mock: result = client.get('/new-music-friday/2025-01-01/entries/') assert result.status_code == 200 assert result.json == expected_return_value logic_mock.assert_called_once_with( '2025-01-01', new_music_friday_date.NewMusicFridayDateEntriesFilter(), [ new_music_friday_date.NewMusicFridayDateEntriesOrder( by='FEATURING', dir='DESC', ), new_music_friday_date.NewMusicFridayDateEntriesOrder( by='TOP_10_RANK', dir='DESC', ), new_music_friday_date.NewMusicFridayDateEntriesOrder( by='AVERAGE_POSITION', dir='ASC', ), ], 0, 200, ) def test_new_music_friday_date_entries_custom_options() -> None: expected_return_value = { 'total': 0, 'entries': [], } mock_return_value = new_music_friday_date.NewMusicFridayDateEntriesResponse.model_validate(expected_return_value) client = app.test_client() query_string = { 'offset': 123, 'limit': 456, 'filter': '{"appears_on_market":"US"}', 'order': '[{"by":"POSITION_IN_MARKET","market":"US","dir":"ASC"}]' } with patch.object(new_music_friday_date, 'new_music_friday_date_entries', return_value=mock_return_value) as logic_mock: result = client.get('/new-music-friday/2025-01-01/entries/', query_string=query_string) assert result.status_code == 200 assert result.json == expected_return_value logic_mock.assert_called_once_with( '2025-01-01', new_music_friday_date.NewMusicFridayDateEntriesFilter( appears_on_market='US', ), [ new_music_friday_date.NewMusicFridayDateEntriesOrder( by='POSITION_IN_MARKET', dir='ASC', market='US', ), ], 123, 456, ) def test_new_music_friday_date_markets() -> None: expected_return_value = { 'markets': [ { 'market': 'US', 'data_received': False, }, { 'market': 'GB', 'data_received': True, }, { 'market': 'JP', 'data_received': False, }, { 'market': 'FR', 'data_received': True, }, ] } mock_return_value = new_music_friday_date.NewMusicFridayDateMarketsResponse.model_validate(expected_return_value) client = app.test_client() with patch.object(new_music_friday_date, 'new_music_friday_date_markets', return_value=mock_return_value) as logic_mock: result = client.get('/new-music-friday/2025-01-01/markets/') assert result.status_code == 200 assert result.json == expected_return_value logic_mock.assert_called_once_with('2025-01-01') def test_new_music_friday_search() -> None: expected_return_value = { 'total': 1, 'entries': [ { 'isrc': 'USUM72400001', 'track_name': 'Test Track', 'artist_name': 'Test Artist', 'image_url': 'https://example.com/image.jpg', 'feature': 3, 'average_position': 5.0, 'top_10_rank': 2, 'placements': [{'market': 'US', 'position': 1, 'spotify_id': 'spotify1'}], } ], } mock_return_value = new_music_friday_date.NewMusicFridayDateEntriesResponse.model_validate(expected_return_value) client = app.test_client() with patch.object(new_music_friday_search, 'new_music_friday_search', return_value=mock_return_value) as logic_mock: result = client.get('/new-music-friday/2025-05-16/search/', query_string={'term': 'Test Track'}) assert result.status_code == 200 assert result.json == expected_return_value logic_mock.assert_called_once_with('2025-05-16', 'Test Track') def test_new_music_friday_dates() -> None: expected_return_value = { 'dates': [ '2024-06-14', '2024-06-07', '2024-05-31', ] } mock_return_value = new_music_friday.NewMusicFridayDatesResponse.model_validate(expected_return_value) client = app.test_client() with patch.object(new_music_friday, 'new_music_friday_dates', return_value=mock_return_value) as logic_mock: result = client.get('/new-music-friday/dates') assert result.status_code == 200 assert result.json == expected_return_value logic_mock.assert_called_once_with()