from tracker import json_utils, db from tracker.test import test_data from tracker import artists from . import login_to_test_client as _login from tracker.test import add_and_flush from api import models, cacher def test_returns_loading_for_not_there(redis_client): result1, result2 = models.artists('sc', ['1', '2'], use_cache_only=True) assert result1['artist'] == {'query_key': 'sc/1', 'cache_status': 'LOADING'} assert result2['artist'] == {'query_key': 'sc/2', 'cache_status': 'LOADING'} def test_lookup_using_cache(session, redis_client): sc_user, in_user, tracked_entity, *rest = add_and_flush(session, db.ScUser(scid=1, name="Find Me First", data=test_data.make_soundcloud_user_json(username='findmefirst')), db.InUser(inid='findmetoo', page_data=test_data.make_insta_user_json(full_name='Find Me Too')), db.TrackedEntity(eid=1, name="Find Me Yes", twitter_data=test_data.make_twitter_user_json(screen_name='findmeyes')), db.ScUser(scid=2, name="I'm not returned", data=test_data.make_soundcloud_user_json(username='notreturned')), db.InUser(inid='notfound', page_data=test_data.make_insta_user_json(full_name="Im not returned")), db.TrackedEntity(eid=2, name="Not found", twitter_data=test_data.make_twitter_user_json(screen_name='notfound')), db.TrackedEntity(eid=100, name="Influencer"), db.Following(influencer_eid=100, followee_eid=1), ) artist = artists.create_association(sc_user=sc_user, in_user=in_user, tracked_entity=tracked_entity) session.execute("refresh materialized view entity_names") session.commit() session.execute("refresh materialized view twitter_artist_activity") session.commit() db_result = list(models.artists('sc', ['1'], use_cache_only=False)) cacher.set_artists([a['artist'] for a in db_result]) result_from_cache = list(models.artists('a', [str(artist.arid)], use_cache_only=True))[0] assert result_from_cache['arid'] == db_result[0]['arid'] assert result_from_cache['artist']['keys'] == db_result[0]['artist']['keys'] assert result_from_cache['artist']['cache_status'] == 'UP_TO_DATE' def test_lookup_using_cache_fallback_to_db(session, redis_client): sc_user, in_user, tracked_entity, *rest = add_and_flush(session, db.ScUser(scid=1, name="Find Me First", data=test_data.make_soundcloud_user_json(username='findmefirst')), db.InUser(inid='findmetoo', page_data=test_data.make_insta_user_json(full_name='Find Me Too')), db.TrackedEntity(eid=1, name="Find Me Yes", twitter_data=test_data.make_twitter_user_json(screen_name='findmeyes')), db.ScUser(scid=2, name="I'm not returned", data=test_data.make_soundcloud_user_json(username='notreturned')), db.InUser(inid='notfound', page_data=test_data.make_insta_user_json(full_name="Im not returned")), db.TrackedEntity(eid=2, name="Not found", twitter_data=test_data.make_twitter_user_json(screen_name='notfound')), db.TrackedEntity(eid=100, name="Influencer"), db.Following(influencer_eid=100, followee_eid=1), ) artist = artists.create_association(sc_user=sc_user, in_user=in_user, tracked_entity=tracked_entity) session.execute("refresh materialized view entity_names") session.commit() session.execute("refresh materialized view twitter_artist_activity") session.commit() db_result = list(models.artists('sc', ['1', '2'], use_cache_only=False, use_cache_with_fallback=False)) cacher.set_artists([a['artist'] for a in db_result]) result_from_cache = list(models.artists('a', [str(artist.arid)], use_cache_only=True))[0] assert result_from_cache['arid'] == db_result[0]['arid'] assert result_from_cache['artist']['keys'] == db_result[0]['artist']['keys'] assert result_from_cache['artist']['cache_status'] == 'UP_TO_DATE'