Skip to content

Commit

Permalink
Add missing user and social feature challenges to entity manager (#4407)
Browse files Browse the repository at this point in the history
* Add missing user challenge

* Add test to user eneity

* lint

* add social feature challenges

Co-authored-by: isaac <isaac@audius.co>
  • Loading branch information
jowlee and isaacsolo committed Nov 30, 2022
1 parent 6e781f0 commit e91a9e2
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 7 deletions.
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import logging
from typing import List
from unittest import mock

from integration_tests.challenges.index_helpers import UpdateTask
from integration_tests.utils import populate_mock_db
from src.challenges.challenge_event import ChallengeEvent
from src.models.playlists.aggregate_playlist import AggregatePlaylist
from src.models.social.follow import Follow
from src.models.social.repost import Repost
Expand All @@ -19,12 +21,15 @@

def test_index_valid_social_features(app, mocker):
"Tests valid batch of social create/update/delete actions"
bus_mock = mocker.patch(
"src.challenges.challenge_event_bus.ChallengeEventBus", autospec=True
)

# setup db and mocked txs
with app.app_context():
db = get_db()
web3 = Web3()
update_task = UpdateTask(None, web3, None)
update_task = UpdateTask(None, web3, challenge_event_bus=bus_mock)

"""
const resp = await this.manageEntity({
Expand Down Expand Up @@ -272,6 +277,15 @@ def get_events_side_effect(_, tx_receipt):
assert len(aggregate_playlists) == 1
aggregate_palylist = aggregate_playlists[0]
assert aggregate_palylist.repost_count == 1
calls = [
mock.call.dispatch(ChallengeEvent.follow, 1, 1),
mock.call.dispatch(ChallengeEvent.follow, 1, 1),
mock.call.dispatch(ChallengeEvent.favorite, 1, 1),
mock.call.dispatch(ChallengeEvent.favorite, 1, 1),
mock.call.dispatch(ChallengeEvent.repost, 1, 1),
mock.call.dispatch(ChallengeEvent.repost, 1, 1),
]
bus_mock.assert_has_calls(calls, any_order=True)


def test_index_invalid_social_features(app, mocker):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
from datetime import datetime
from typing import List
from unittest import mock

from integration_tests.challenges.index_helpers import UpdateTask
from integration_tests.utils import populate_mock_db
from sqlalchemy import asc
from src.challenges.challenge_event_bus import ChallengeEventBus, setup_challenge_bus
from src.challenges.challenge_event import ChallengeEvent
from src.models.users.user import User
from src.tasks.entity_manager.entity_manager import entity_manager_update
from src.tasks.entity_manager.utils import TRACK_ID_OFFSET, USER_ID_OFFSET
Expand Down Expand Up @@ -40,18 +41,22 @@ def fetch_node_info(self, sp_id, sp_type, redis):
autospec=True,
)

event_bus = mocker.patch(
"src.challenges.challenge_event_bus.ChallengeEventBus", autospec=True
)
return event_bus


def test_index_valid_user(app, mocker):
"Tests valid batch of users create/update/delete actions"

set_patches(mocker)
bus_mock = set_patches(mocker)

# setup db and mocked txs
with app.app_context():
db = get_db()
web3 = Web3()
challenge_event_bus: ChallengeEventBus = setup_challenge_bus()
update_task = UpdateTask(None, web3, challenge_event_bus)
update_task = UpdateTask(None, web3, bus_mock)

tx_receipts = {
"CreateUser1Tx": [
Expand Down Expand Up @@ -268,6 +273,12 @@ def get_events_side_effect(_, tx_receipt):
)
assert user_2.name == "Forrest"
assert user_2.handle == "forrest"
calls = [
mock.call.dispatch(ChallengeEvent.profile_update, 1, USER_ID_OFFSET),
mock.call.dispatch(ChallengeEvent.profile_update, 1, USER_ID_OFFSET + 1),
mock.call.dispatch(ChallengeEvent.mobile_install, 1, USER_ID_OFFSET),
]
bus_mock.assert_has_calls(calls, any_order=True)


def test_index_invalid_users(app, mocker):
Expand Down Expand Up @@ -567,13 +578,17 @@ def get_events_side_effect(_, tx_receipt):

def test_index_verify_users(app, mocker):
"Tests user verify actions"
set_patches(mocker)
bus_mock = set_patches(mocker)

# setup db and mocked txs
with app.app_context():
db = get_db()
web3 = Web3()
update_task = UpdateTask(None, web3, None)
update_task = UpdateTask(
None,
web3,
challenge_event_bus=bus_mock,
)

tx_receipts = {
"VerifyUser": [
Expand Down Expand Up @@ -651,3 +666,5 @@ def get_events_side_effect(_, tx_receipt):
assert len(all_users) == 2 # no new users indexed
assert all_users[0].is_verified # user 1 is verified
assert not all_users[1].is_verified # user 2 is not verified
calls = [mock.call.dispatch(ChallengeEvent.connect_verified, 0, 1)]
bus_mock.assert_has_calls(calls, any_order=True)
24 changes: 24 additions & 0 deletions discovery-provider/src/tasks/entity_manager/social_features.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from typing import Union

from src.challenges.challenge_event import ChallengeEvent
from src.models.social.follow import Follow
from src.models.social.repost import Repost
from src.models.social.save import Save
Expand All @@ -20,6 +21,15 @@
Action.UNSUBSCRIBE: EntityType.SUBSCRIPTION,
}

action_to_challenge_event = {
Action.FOLLOW: ChallengeEvent.follow,
Action.UNFOLLOW: ChallengeEvent.follow,
Action.SAVE: ChallengeEvent.favorite,
Action.UNSAVE: ChallengeEvent.favorite,
Action.REPOST: ChallengeEvent.repost,
Action.UNREPOST: ChallengeEvent.repost,
}

create_social_action_types = {
Action.FOLLOW,
Action.SAVE,
Expand Down Expand Up @@ -103,6 +113,13 @@ def create_social_record(params: ManageEntityParameters):
create_record,
)

# dispatch repost, favorite, follow challenges
if params.action in action_to_challenge_event:
challenge_event = action_to_challenge_event[params.action]
params.challenge_bus.dispatch(
challenge_event, params.block_number, params.user_id
)


def delete_social_record(params):

Expand Down Expand Up @@ -166,6 +183,13 @@ def delete_social_record(params):
deleted_record,
)

# dispatch repost, favorite, follow challenges
if params.action in action_to_challenge_event:
challenge_event = action_to_challenge_event[params.action]
params.challenge_bus.dispatch(
challenge_event, params.block_number, params.user_id
)


def validate_social_feature(params: ManageEntityParameters):
if params.user_id not in params.existing_records[EntityType.USER]:
Expand Down
11 changes: 11 additions & 0 deletions discovery-provider/src/tasks/entity_manager/user.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import logging
from typing import Dict

from src.challenges.challenge_event import ChallengeEvent
from src.models.tracks.track import Track
from src.models.users.user import User
from src.tasks.entity_manager.user_replica_set import parse_sp_ids
Expand Down Expand Up @@ -168,6 +169,11 @@ def update_user(params: ManageEntityParameters):
user_record = update_legacy_user_images(user_record)
user_record = validate_user_record(user_record)
params.add_user_record(user_id, user_record)
params.challenge_bus.dispatch(
ChallengeEvent.profile_update,
params.block_number,
user_id,
)

return user_record

Expand All @@ -188,5 +194,10 @@ def verify_user(params: ManageEntityParameters):
user_record = validate_user_record(user_record)
user_record.is_verified = True
params.add_user_record(user_id, user_record)
params.challenge_bus.dispatch(
ChallengeEvent.connect_verified,
params.block_number,
user_id,
)

return user_record

0 comments on commit e91a9e2

Please sign in to comment.