Skip to content

Commit

Permalink
Add tests for populate_x_metadata (#1408)
Browse files Browse the repository at this point in the history
* Add tests for populate_x_metadata

* Lint DP tests
  • Loading branch information
jowlee committed Apr 16, 2021
1 parent 377d728 commit bd141e5
Show file tree
Hide file tree
Showing 4 changed files with 424 additions and 0 deletions.
119 changes: 119 additions & 0 deletions discovery-provider/tests/test_populate_playlist_metadata.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
import logging
from src.queries import response_name_constants
from src.models import RepostType, SaveType
from src.queries.query_helpers import populate_playlist_metadata
from src.utils.db_session import get_db
from tests.utils import populate_mock_db
logger = logging.getLogger(__name__)

def test_populate_playlist_metadata(app):
"""Tests that populate_playlist_metadata works after aggregate_user refresh"""
with app.app_context():
db = get_db()

test_entities = {
'playlists': [
{"playlist_id": 1, "playlist_owner_id": 1},
{"playlist_id": 2, "playlist_owner_id": 1},
{"playlist_id": 3, "playlist_owner_id": 2},
{"playlist_id": 4, "playlist_owner_id": 3}
],
'users': [
{'user_id': 1, 'handle': 'user1'},
{'user_id': 2, 'handle': 'user2'},
{'user_id': 3, 'handle': 'user3'},
{'user_id': 4, 'handle': 'user4'}
],
'reposts': [
{"repost_item_id": 1, "repost_type": 'playlist', "user_id": 2},
{"repost_item_id": 1, "repost_type": 'playlist', "user_id": 3},
{"repost_item_id": 2, "repost_type": 'playlist', "user_id": 1}
],
'saves': [
{"save_item_id": 1, "save_type": 'playlist', "user_id": 2},
{"save_item_id": 1, "save_type": 'playlist', "user_id": 3},
{"save_item_id": 3, "save_type": 'playlist', "user_id": 2},
{"save_item_id": 3, "save_type": 'playlist', "user_id": 1}
],
'follows': [
{"follower_user_id": 1, "followee_user_id": 2},
{"follower_user_id": 1, "followee_user_id": 3}
]
}

populate_mock_db(db, test_entities)

with db.scoped_session() as session:
session.execute("REFRESH MATERIALIZED VIEW aggregate_playlist")
playlist_ids = [1, 2, 3, 4]
playlists = [
{"playlist_id": 1, "playlist_contents": {"track_ids": []}},
{"playlist_id": 2, "playlist_contents": {"track_ids": []}},
{"playlist_id": 3, "playlist_contents": {"track_ids": []}},
{"playlist_id": 4, "playlist_contents": {"track_ids": []}}
]

playlists = populate_playlist_metadata(
session,
playlist_ids,
playlists,
[RepostType.playlist, RepostType.album],
[SaveType.playlist, SaveType.album],
None
)
assert len(playlists) == 4
assert playlists[0]['playlist_id'] == 1
assert playlists[0][response_name_constants.repost_count] == 2
assert playlists[0][response_name_constants.save_count] == 2
assert playlists[0][response_name_constants.total_play_count] == 0

assert playlists[1]['playlist_id'] == 2
assert playlists[1][response_name_constants.repost_count] == 1
assert playlists[1][response_name_constants.save_count] == 0
assert playlists[1][response_name_constants.total_play_count] == 0

assert playlists[2]['playlist_id'] == 3
assert playlists[2][response_name_constants.repost_count] == 0
assert playlists[2][response_name_constants.save_count] == 2
assert playlists[2][response_name_constants.total_play_count] == 0

curr_playlist_ids = [1, 2, 3]
curr_playlists = [
{"playlist_id": 1, "playlist_contents": {"track_ids": []}},
{"playlist_id": 2, "playlist_contents": {"track_ids": []}},
{"playlist_id": 3, "playlist_contents": {"track_ids": []}}
]

playlists = populate_playlist_metadata(
session,
curr_playlist_ids,
curr_playlists,
[RepostType.playlist, RepostType.album],
[SaveType.playlist, SaveType.album],
1
)
assert len(playlists) == 3

assert playlists[0]['playlist_id'] == 1
repost_user_ids = [repost['user_id'] for repost in playlists[0][response_name_constants.followee_reposts]]
repost_user_ids.sort()
assert repost_user_ids == [2, 3]
save_user_ids = [save['user_id'] for save in playlists[0][response_name_constants.followee_saves]]
save_user_ids.sort()
assert save_user_ids == [2, 3]
assert playlists[0][response_name_constants.has_current_user_reposted] == False
assert playlists[0][response_name_constants.has_current_user_saved] == False

assert playlists[1]['playlist_id'] == 2
assert playlists[1][response_name_constants.followee_reposts] == []
assert playlists[1][response_name_constants.followee_saves] == []
assert playlists[1][response_name_constants.has_current_user_reposted] == True
assert playlists[1][response_name_constants.has_current_user_saved] == False

assert playlists[2]['playlist_id'] == 3
assert playlists[2][response_name_constants.followee_reposts] == []
save_user_ids = [save['user_id'] for save in playlists[2][response_name_constants.followee_saves]]
save_user_ids.sort()
assert save_user_ids == [2]
assert playlists[2][response_name_constants.has_current_user_reposted] == False
assert playlists[2][response_name_constants.has_current_user_saved] == True
110 changes: 110 additions & 0 deletions discovery-provider/tests/test_populate_track_metadata.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
import logging
from src.queries import response_name_constants
from src.queries.query_helpers import populate_track_metadata
from src.utils.db_session import get_db
from tests.utils import populate_mock_db
logger = logging.getLogger(__name__)

def test_populate_track_metadata(app):
"""Tests that populate_track_metadata works after aggregate_user refresh"""
with app.app_context():
db = get_db()

test_entities = {
'tracks': [
{"track_id": 1, "owner_id": 1},
{"track_id": 2, "owner_id": 1},
{"track_id": 3, "owner_id": 2},
{"track_id": 4, "owner_id": 2},
{"track_id": 5, "owner_id": 2},
{"track_id": 6, "owner_id": 2},
{"track_id": 7, "owner_id": 3},
{"track_id": 8, "owner_id": 3},
{"track_id": 9, "owner_id": 3},
{"track_id": 10, "is_unlisted": True, "owner_id": 3}
],
'users': [
{'user_id': 1, 'handle': 'user1'},
{'user_id': 2, 'handle': 'user2'},
{'user_id': 3, 'handle': 'user3'},
{'user_id': 4, 'handle': 'user4'}
],
'reposts': [
{"repost_item_id": 1, "repost_type": 'track', "user_id": 2},
{"repost_item_id": 1, "repost_type": 'track', "user_id": 3},
{"repost_item_id": 2, "repost_type": 'track', "user_id": 1}
],
'saves': [
{"save_item_id": 1, "save_type": 'track', "user_id": 2},
{"save_item_id": 1, "save_type": 'track', "user_id": 3},
{"save_item_id": 3, "save_type": 'track', "user_id": 2},
{"save_item_id": 3, "save_type": 'track', "user_id": 1}
],
'follows': [
{"follower_user_id": 1, "followee_user_id": 2},
{"follower_user_id": 1, "followee_user_id": 3}
]
}

populate_mock_db(db, test_entities)

with db.scoped_session() as session:
session.execute("REFRESH MATERIALIZED VIEW aggregate_track")
track_ids = [1, 2, 3]
tracks = [
{"track_id": 1},
{"track_id": 2},
{"track_id": 3},
]

tracks = populate_track_metadata(session, track_ids, tracks, None)
assert len(tracks) == 3

assert tracks[0]['track_id'] == 1
assert tracks[0][response_name_constants.repost_count] == 2
assert tracks[0][response_name_constants.save_count] == 2
assert tracks[0][response_name_constants.play_count] == 0

assert tracks[1]['track_id'] == 2
assert tracks[1][response_name_constants.repost_count] == 1
assert tracks[1][response_name_constants.save_count] == 0
assert tracks[1][response_name_constants.play_count] == 0

assert tracks[2]['track_id'] == 3
assert tracks[2][response_name_constants.repost_count] == 0
assert tracks[2][response_name_constants.save_count] == 2
assert tracks[2][response_name_constants.play_count] == 0

curr_track_ids = [1, 2, 3]
curr_tracks = [
{"track_id": 1},
{"track_id": 2},
{"track_id": 3}
]

tracks = populate_track_metadata(session, curr_track_ids, curr_tracks, 1)
assert len(tracks) == 3

assert tracks[0]['track_id'] == 1
repost_user_ids = [repost['user_id'] for repost in tracks[0][response_name_constants.followee_reposts]]
repost_user_ids.sort()
assert repost_user_ids == [2, 3]
save_user_ids = [save['user_id'] for save in tracks[0][response_name_constants.followee_saves]]
save_user_ids.sort()
assert save_user_ids == [2, 3]
assert tracks[0][response_name_constants.has_current_user_reposted] == False
assert tracks[0][response_name_constants.has_current_user_saved] == False

assert tracks[1]['track_id'] == 2
assert tracks[1][response_name_constants.followee_reposts] == []
assert tracks[1][response_name_constants.followee_saves] == []
assert tracks[1][response_name_constants.has_current_user_reposted] == True
assert tracks[1][response_name_constants.has_current_user_saved] == False

assert tracks[2]['track_id'] == 3
assert tracks[2][response_name_constants.followee_reposts] == []
save_user_ids = [save['user_id'] for save in tracks[2][response_name_constants.followee_saves]]
save_user_ids.sort()
assert save_user_ids == [2]
assert tracks[2][response_name_constants.has_current_user_reposted] == False
assert tracks[2][response_name_constants.has_current_user_saved] == True
148 changes: 148 additions & 0 deletions discovery-provider/tests/test_populate_user_metadata.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
import logging
from src.queries import response_name_constants
from src.queries.query_helpers import populate_user_metadata
from src.utils.db_session import get_db
from tests.utils import populate_mock_db
logger = logging.getLogger(__name__)

def test_populate_user_metadata(app):
"""Tests that populate_user_metadata works after aggregate_user refresh"""
with app.app_context():
db = get_db()

test_entities = {
'tracks': [
{"track_id": 1, "owner_id": 1},
{"track_id": 2, "owner_id": 1},
{"track_id": 3, "owner_id": 2},
{"track_id": 4, "owner_id": 2},
{"track_id": 5, "owner_id": 2},
{"track_id": 6, "owner_id": 2},
{"track_id": 7, "owner_id": 3},
{"track_id": 8, "owner_id": 3},
{"track_id": 8, "owner_id": 3},
{"track_id": 9, "is_unlisted": True, "owner_id": 3}
],
'playlists': [
{"playlist_id": 1, "playlist_owner_id": 1},
{"playlist_id": 2, "playlist_owner_id": 1},
{"playlist_id": 3, "is_album": True, "playlist_owner_id": 1},
{"playlist_id": 4, "playlist_owner_id": 2},
{"playlist_id": 5, "is_delete": True, "playlist_owner_id": 2},
{"playlist_id": 6, "is_album": True, "playlist_owner_id": 3},
{"playlist_id": 6, "is_private": True, "playlist_owner_id": 3},
],
'users': [
{'user_id': 1, 'handle': 'user1'},
{'user_id': 2, 'handle': 'user2'},
{'user_id': 3, 'handle': 'user3'},
{'user_id': 4, 'handle': 'user4'}
],
'follows': [
{"follower_user_id": 1, "followee_user_id": 2},
{"follower_user_id": 1, "followee_user_id": 3},
{"follower_user_id": 2, "followee_user_id": 3}
],
'reposts': [
{"repost_item_id": 1, "repost_type": 'track', "user_id": 2},
{"repost_item_id": 1, "repost_type": 'playlist', "user_id": 2},
{"repost_item_id": 1, "repost_type": 'track', "user_id": 3},
{"repost_item_id": 1, "repost_type": 'playlist', "user_id": 3},
{"repost_item_id": 4, "repost_type": 'track', "user_id": 1},
{"repost_item_id": 5, "repost_type": 'track', "user_id": 1},
{"repost_item_id": 6, "repost_type": 'track', "user_id": 1}
],
'saves': [
{"save_item_id": 1, "save_type": 'track', "user_id": 2},
{"save_item_id": 1, "save_type": 'playlist', "user_id": 2},
{"save_item_id": 1, "save_type": 'track', "user_id": 3},
{"save_item_id": 1, "save_type": 'playlist', "user_id": 3},
{"save_item_id": 4, "save_type": 'track', "user_id": 1},
{"save_item_id": 5, "save_type": 'track', "user_id": 1},
{"save_item_id": 6, "save_type": 'track', "user_id": 1}
]
}

populate_mock_db(db, test_entities)

with db.scoped_session() as session:
session.execute("REFRESH MATERIALIZED VIEW aggregate_user")
user_ids = [1, 2, 3, 4, 5]
users = [
{"user_id": 1, "is_verified": False},
{"user_id": 2, "is_verified": False},
{"user_id": 3, "is_verified": False},
{"user_id": 4, "is_verified": False},
{"user_id": 5, "is_verified": False}
]

users = populate_user_metadata(session, user_ids, users, None)
assert len(users) == 5

assert users[0]['user_id'] == 1
assert users[0][response_name_constants.track_count] == 2
assert users[0][response_name_constants.playlist_count] == 2
assert users[0][response_name_constants.album_count] == 1
assert users[0][response_name_constants.follower_count] == 0
assert users[0][response_name_constants.followee_count] == 2
assert users[0][response_name_constants.repost_count] == 3

assert users[1]['user_id'] == 2
assert users[1][response_name_constants.track_count] == 4
assert users[1][response_name_constants.playlist_count] == 1
assert users[1][response_name_constants.album_count] == 0
assert users[1][response_name_constants.follower_count] == 1
assert users[1][response_name_constants.followee_count] == 1
assert users[1][response_name_constants.repost_count] == 2

assert users[2]['user_id'] == 3
assert users[2][response_name_constants.track_count] == 3
assert users[2][response_name_constants.playlist_count] == 0
assert users[2][response_name_constants.album_count] == 1
assert users[2][response_name_constants.follower_count] == 2
assert users[2][response_name_constants.followee_count] == 0
assert users[2][response_name_constants.repost_count] == 2

assert users[3]['user_id'] == 4
assert users[3][response_name_constants.track_count] == 0
assert users[3][response_name_constants.playlist_count] == 0
assert users[3][response_name_constants.album_count] == 0
assert users[3][response_name_constants.follower_count] == 0
assert users[3][response_name_constants.followee_count] == 0
assert users[3][response_name_constants.repost_count] == 0

assert users[4]['user_id'] == 5
assert users[4][response_name_constants.track_count] == 0
assert users[4][response_name_constants.playlist_count] == 0
assert users[4][response_name_constants.album_count] == 0
assert users[4][response_name_constants.follower_count] == 0
assert users[4][response_name_constants.followee_count] == 0
assert users[4][response_name_constants.repost_count] == 0

curr_user_ids = [1, 2, 3]
curr_users = [
{"user_id": 1, "is_verified": False},
{"user_id": 2, "is_verified": False},
{"user_id": 3, "is_verified": False}
]

users = populate_user_metadata(session, curr_user_ids, curr_users, 1)
assert len(users) == 3

assert users[0]['user_id'] == 1
assert users[0][response_name_constants.does_current_user_follow] == False
assert users[0][response_name_constants.current_user_followee_follow_count] == 0
assert users[0][response_name_constants.balance] == '0'
assert users[0][response_name_constants.associated_wallets_balance] == '0'

assert users[1]['user_id'] == 2
assert users[1][response_name_constants.does_current_user_follow] == True
assert users[1][response_name_constants.current_user_followee_follow_count] == 0
assert users[1][response_name_constants.balance] == '0'
assert users[1][response_name_constants.associated_wallets_balance] == '0'

assert users[2]['user_id'] == 3
assert users[2][response_name_constants.does_current_user_follow] == True
assert users[2][response_name_constants.current_user_followee_follow_count] == 1
assert users[2][response_name_constants.balance] == '0'
assert users[2][response_name_constants.associated_wallets_balance] == '0'
Loading

0 comments on commit bd141e5

Please sign in to comment.