import json from unittest.mock import patch from analytics import tiktok_handlers # noqa (registers routes on app) from tests.unit.logic.test_tiktok_logic import ( MOCK_COUNTRY_CODE_ROWS_SUMMARY, MOCK_COUNTRY_CODE_ROWS_TIME_SERIES, ) def test_tiktok_time_series_handler(client, insights_request_headers, request_context): with patch( "analytics.tiktok_handlers.get_tiktok_time_series" ) as get_tiktok_time_series: get_tiktok_time_series.return_value = [] url = "/sound-recording/QMDA62184373/tiktok/timeseries" response = client.get(url, headers=insights_request_headers) assert response.status_code == 200 response_payload = json.loads(response.data.decode("utf-8")) assert response_payload == {"items": []} def test_tiktok_time_series_by_country_breakdown( client, insights_request_headers, request_context ): with patch( "analytics.logic.tiktok.TiktokTimeSeries.execute", return_value=MOCK_COUNTRY_CODE_ROWS_TIME_SERIES, ) as execute: url = ( "/sound-recording/QMDA62184373/tiktok/timeseries?type=BY_COUNTRY" "&days_back=1" ) response = client.get(url, headers=insights_request_headers) assert response.status_code == 200 response_payload = json.loads(response.data.decode("utf-8")) assert execute.call_count == 1 assert response_payload == { "items": [ { "comments": 50, "id": "GB", "creations": 0, "date": "2018-12-30", "favorites": 0, "likes": 50, "shares": 50, "streams": 100, "views": 100, }, { "comments": 50, "id": "GB", "creations": 0, "date": "2018-12-31", "favorites": 0, "likes": 50, "shares": 50, "streams": 100, "views": 100, }, { "comments": 50, "id": "GB", "creations": 0, "date": "2019-01-01", "favorites": 0, "likes": 50, "shares": 50, "streams": 100, "views": 100, }, ] } assert response.status_code == 200 def test_tiktok_summary_handler(client, insights_request_headers, request_context): with patch( "analytics.logic.tiktok.get_tiktok_time_series" ) as get_tiktok_time_series: get_tiktok_time_series.return_value = {"items": []} url = "/sound-recording/QMDA62184373/tiktok/summary" response = client.get(url, headers=insights_request_headers) response_payload = json.loads(response.data.decode("utf-8")) assert response_payload == {"items": []} assert response.status_code == 200 def test_tiktok_summary_aggregated(client, insights_request_headers, request_context): with patch( "analytics.logic.tiktok.TiktokTimeSeries.execute", return_value=MOCK_COUNTRY_CODE_ROWS_SUMMARY, ) as execute: url = "/sound-recording/QMDA62184373/tiktok/summary?type=BY_COUNTRY" response = client.get(url, headers=insights_request_headers) response_payload = json.loads(response.data.decode("utf-8")) assert execute.call_count == 1 assert response_payload == { "items": [ { "comments": 50, "id": "GB", "creations": 0, "favorites": 0, "likes": 50, "shares": 50, "streams": 100, "views": 100, }, { "comments": 50, "id": "DE", "creations": 0, "favorites": 0, "likes": 50, "shares": 50, "streams": 100, "views": 100, }, ] } assert response.status_code == 200 def test_ids_filter( client, insights_request_headers, request_context, mock_execute_orm ): url = "/sound-recording/QMDA62184373/tiktok/timeseries?type=BY_COUNTRY&ids=GB&ids=US" # noqa response = client.get(url, headers=insights_request_headers) assert response.status_code == 200 sql = mock_execute_orm.call_args[0][0] sql = sql.text if hasattr(sql, "text") else sql args = str(mock_execute_orm.call_args[0][1]) assert "and id in (" in sql assert "GB" in args assert "US" in args def test_tiktok_aggregated_summary_handler( client, insights_request_headers, request_context ): with patch( "analytics.logic.tiktok.get_tiktok_aggregated_summary" ) as get_tiktok_aggregated_summary: get_tiktok_aggregated_summary.return_value = {} url = "/sound-recording/QMDA62184373/tiktok/aggregated-summary" response = client.get(url, headers=insights_request_headers) response_payload = json.loads(response.data.decode("utf-8")) assert response_payload == {} assert response.status_code == 200 def test_tiktok_aggregated_time_series_handler( client, insights_request_headers, request_context ): with patch( "analytics.logic.tiktok.get_tiktok_aggregated_time_series" ) as get_tiktok_aggregated_time_series: get_tiktok_aggregated_time_series.return_value = {} url = "/sound-recording/QMDA62184373/tiktok/aggregated-timeseries" response = client.get(url, headers=insights_request_headers) response_payload = json.loads(response.data.decode("utf-8")) assert response_payload == {} assert response.status_code == 200