"""Tests for playlist-placements endpoint.""" import json from flexmock import flexmock from owsrequest.constants import headers as owsrequest_constants from analytics.logic import streams from tests.unit.fixtures import fixture_api def test_get_playlist_placements_missing_dates( headers, playlist_placements_url): """Test getting data on /playlist-placements/ with missing date params. Assert that 400 error should be returned """ response = fixture_api.CLIENT.get(playlist_placements_url, headers=headers) assert response.status_code == 400 def test_get_playlist_placements_access( incorrect_headers, playlist_placements_url): """Assert that 400 status code is returned for missing grass headers.""" playlist_placements_url += '?from_date=2017-02-01&to_date=2017-02-28' response = fixture_api.CLIENT.get( playlist_placements_url, headers=incorrect_headers) assert response.status_code == 400 def test_get_placements_calls_get_placements( headers, get_playlist_placements_logic_result_response, valid_stores, all_stores, playlist_placements_url): """Assert a 200 response is returned.""" account_type = owsrequest_constants.GRASS_ACCOUNT_TYPE account_id = owsrequest_constants.GRASS_ACCOUNT_ID flexmock(streams).should_receive('get_placements').with_args( '2017-02-01', '2017-02-28', headers[account_type], headers[account_id], valid_stores or all_stores, [1, 2], None, None, ['theorchard'], None).and_return( get_playlist_placements_logic_result_response) playlist_placements_url += ( '?from_date=2017-02-01&to_date=2017-02-28&stores={}'.format( ','.join(valid_stores))) response = fixture_api.CLIENT.get(playlist_placements_url, headers=headers) assert response.status_code == 200 def test_get_placements_parses_query_params( headers, get_playlist_placements_logic_result_response, playlist_placements_url, valid_stores, all_stores): """Assert isrcs, artist_ids, and limit parsed from query params.""" account_type = owsrequest_constants.GRASS_ACCOUNT_TYPE account_id = owsrequest_constants.GRASS_ACCOUNT_ID isrcs_string = '123,456,789' artist_ids_string = '246,357' num_placements_to_fetch = 40 (flexmock(streams).should_receive('get_placements').with_args( '2017-02-01', '2017-02-28', headers[account_type], headers[account_id], valid_stores or all_stores, [1, 2], ['123', '456', '789'], ['246', '357'], ['theorchard'], num_placements_to_fetch ).and_return( get_playlist_placements_logic_result_response)) playlist_placements_url += ( '?from_date=2017-02-01&to_date=2017-02-28' '&stores={}&isrcs={}&artist_ids={}&limit={}'.format( ','.join(valid_stores), isrcs_string, artist_ids_string, num_placements_to_fetch)) response = fixture_api.CLIENT.get(playlist_placements_url, headers=headers) data = json.loads(response.data.decode('utf8')) assert response.status_code == 200 assert data == get_playlist_placements_logic_result_response.message