import pytest from datetime import datetime, timedelta from flask import url_for from http import HTTPStatus from src.constants.users.visits import VISITS_DAYS from tests.legacy.apollo_api import factories as apollo_factories @pytest.mark.parametrize( "user_id,params,expected_result", ( ( "user_1", {}, [ {"count": 2, "dsp": "spotify", "instance_id": "spotify_id_1"}, {"count": 1, "dsp": "spotify", "instance_id": "spotify_id_2"}, ], ), ( "user_1", {"dsp": "apple"}, [{"count": 1, "dsp": "apple", "instance_id": "apple_id_3"}], ), ( "user_1", {"type": "playlist", "dsp": "apple"}, [{"count": 2, "dsp": "apple", "instance_id": "playlist_id_1"}], ), ("user_2", {}, []), ), ) def test_visited_tracks_for_user(user_id, params, expected_result, client, patch_auth_user, db_session): patch_auth_user(user_id) track_created_at = datetime.utcnow().replace(microsecond=0) playlist_created_at = track_created_at - timedelta(seconds=1) created_at = track_created_at if params.get("type", "track") == "track" else playlist_created_at data_list = [ dict(user_id="user_1", instance_id="spotify_id_1", dsp_id=1, type_id=1, created_at=track_created_at), dict(user_id="user_1", instance_id="spotify_id_1", dsp_id=1, type_id=1, created_at=track_created_at), dict( user_id="user_1", instance_id="spotify_id_1", dsp_id=1, type_id=1, created_at=track_created_at - timedelta(days=VISITS_DAYS * 2), ), dict(user_id="user_1", instance_id="spotify_id_2", dsp_id=1, type_id=1, created_at=track_created_at), dict(user_id="user_1", instance_id="apple_id_3", dsp_id=2, type_id=1, created_at=track_created_at), dict(user_id="user_1", instance_id="playlist_id_1", dsp_id=2, type_id=2, created_at=playlist_created_at), dict(user_id="user_1", instance_id="playlist_id_1", dsp_id=2, type_id=2, created_at=playlist_created_at), dict(user_id="user_2", instance_id="playlist_id_2", dsp_id=2, type_id=2, created_at=playlist_created_at), ] for item in data_list: apollo_factories.ApolloVisitLogFactory(**item) for item in expected_result: item["last_visit_at"] = created_at.strftime("%Y-%m-%dT%H:%M:%S") response = client.get(url_for("users_visits.get_users_visits", **params)) assert response.status_code == HTTPStatus.OK assert response.json == expected_result