From 186f87060fa20a56530c0cdec992ae394c040a0e Mon Sep 17 00:00:00 2001 From: Marcus Pasell Date: Fri, 7 Jan 2022 18:27:49 -0800 Subject: [PATCH] Update challenge tests to set start block for testing (#2260) * Update challenge tests to set block number and is active, overriding prod config --- .../test_connect_verified_challenge.py | 11 +++-- .../test_listen_streak_challenge.py | 11 ++--- .../test_mobile_install_challenge.py | 11 ++--- .../test_profile_completion_challenge.py | 45 +++++++++++-------- .../challenges/test_referral_challenge.py | 19 ++++---- .../challenges/test_trending_challenge.py | 5 ++- discovery-provider/integration_tests/utils.py | 35 ++++++++------- 7 files changed, 78 insertions(+), 59 deletions(-) diff --git a/discovery-provider/integration_tests/challenges/test_connect_verified_challenge.py b/discovery-provider/integration_tests/challenges/test_connect_verified_challenge.py index 822b96abf38..9a80f24b09c 100644 --- a/discovery-provider/integration_tests/challenges/test_connect_verified_challenge.py +++ b/discovery-provider/integration_tests/challenges/test_connect_verified_challenge.py @@ -5,10 +5,12 @@ from src.challenges.challenge_event_bus import ChallengeEvent, ChallengeEventBus from src.challenges.connect_verified_challenge import connect_verified_challenge_manager from src.models import Block, User +from src.models.models import Challenge from src.utils.config import shared_config from src.utils.db_session import get_db REDIS_URL = shared_config["redis"]["url"] +BLOCK_NUMBER = 10 logger = logging.getLogger(__name__) @@ -18,10 +20,10 @@ def test_connect_verified_challenge(app): with app.app_context(): db = get_db() - block = Block(blockhash="0x1", number=1) + block = Block(blockhash="0x1", number=BLOCK_NUMBER) user = User( blockhash="0x1", - blocknumber=1, + blocknumber=BLOCK_NUMBER, txhash="xyz", user_id=1, is_current=True, @@ -37,6 +39,9 @@ def test_connect_verified_challenge(app): with db.scoped_session() as session: bus = ChallengeEventBus(redis_conn) + session.query(Challenge).filter(Challenge.id == "connect-verified").update( + {"active": True, "starting_block": BLOCK_NUMBER} + ) # Register events with the bus bus.register_listener( @@ -50,7 +55,7 @@ def test_connect_verified_challenge(app): bus.dispatch( ChallengeEvent.connect_verified, - 1, # block_number + BLOCK_NUMBER, 1, # user_id {}, ) diff --git a/discovery-provider/integration_tests/challenges/test_listen_streak_challenge.py b/discovery-provider/integration_tests/challenges/test_listen_streak_challenge.py index 148b35f934c..afe05f45aa1 100644 --- a/discovery-provider/integration_tests/challenges/test_listen_streak_challenge.py +++ b/discovery-provider/integration_tests/challenges/test_listen_streak_challenge.py @@ -10,6 +10,7 @@ from src.utils.db_session import get_db REDIS_URL = shared_config["redis"]["url"] +BLOCK_NUMBER = 10 def create_play(offset: int) -> Play: @@ -31,17 +32,17 @@ def dispatch_play(offset: int, session: Session, bus: ChallengeEventBus): session.flush() bus.dispatch( ChallengeEvent.track_listen, - 1, + BLOCK_NUMBER, 1, {"created_at": play.created_at.timestamp()}, ) def setup_challenges(session): - block = Block(blockhash="0x1", number=1) + block = Block(blockhash="0x1", number=BLOCK_NUMBER) user = User( blockhash="0x1", - blocknumber=1, + blocknumber=BLOCK_NUMBER, txhash="xyz", user_id=1, is_current=True, @@ -59,7 +60,7 @@ def setup_challenges(session): session.add(user) session.flush() session.query(Challenge).filter(Challenge.id == "listen-streak").update( - {"active": True} + {"active": True, "starting_block": BLOCK_NUMBER} ) @@ -185,7 +186,7 @@ def test_anon_listen(app): with bus.use_scoped_dispatch_queue(): bus.dispatch( ChallengeEvent.track_listen, - 0, + BLOCK_NUMBER, None, {"created_at": datetime.now()}, ) diff --git a/discovery-provider/integration_tests/challenges/test_mobile_install_challenge.py b/discovery-provider/integration_tests/challenges/test_mobile_install_challenge.py index 267bbdab15c..8fbd9110bf0 100644 --- a/discovery-provider/integration_tests/challenges/test_mobile_install_challenge.py +++ b/discovery-provider/integration_tests/challenges/test_mobile_install_challenge.py @@ -9,6 +9,7 @@ from src.utils.db_session import get_db REDIS_URL = shared_config["redis"]["url"] +BLOCK_NUMBER = 10 def test_mobile_install_challenge(app): @@ -17,10 +18,10 @@ def test_mobile_install_challenge(app): with app.app_context(): db = get_db() - block = Block(blockhash="0x1", number=1) + block = Block(blockhash="0x1", number=BLOCK_NUMBER) user = User( blockhash="0x1", - blocknumber=1, + blocknumber=BLOCK_NUMBER, txhash="xyz", user_id=1, is_current=True, @@ -39,7 +40,7 @@ def test_mobile_install_challenge(app): # set challenge as active for purposes of test session.query(Challenge).filter(Challenge.id == "mobile-install").update( - {"active": True} + {"active": True, "starting_block": BLOCK_NUMBER} ) bus.register_listener( ChallengeEvent.mobile_install, mobile_install_challenge_manager @@ -48,8 +49,8 @@ def test_mobile_install_challenge(app): session.flush() session.add(user) session.flush() - bus.dispatch(ChallengeEvent.mobile_install, 1, user.user_id) - bus.dispatch(ChallengeEvent.mobile_install, 1, user.user_id) + bus.dispatch(ChallengeEvent.mobile_install, BLOCK_NUMBER, user.user_id) + bus.dispatch(ChallengeEvent.mobile_install, BLOCK_NUMBER, user.user_id) bus.flush() bus.process_events(session) diff --git a/discovery-provider/integration_tests/challenges/test_profile_completion_challenge.py b/discovery-provider/integration_tests/challenges/test_profile_completion_challenge.py index dafb0e27035..fc073cb9772 100644 --- a/discovery-provider/integration_tests/challenges/test_profile_completion_challenge.py +++ b/discovery-provider/integration_tests/challenges/test_profile_completion_challenge.py @@ -4,10 +4,12 @@ from src.challenges.challenge_event_bus import ChallengeEvent, ChallengeEventBus from src.challenges.profile_challenge import profile_challenge_manager from src.models import Block, Follow, Repost, RepostType, Save, SaveType, User +from src.models.models import Challenge from src.utils.config import shared_config from src.utils.db_session import get_db REDIS_URL = shared_config["redis"]["url"] +BLOCK_NUMBER = 10 def test_profile_completion_challenge(app): @@ -18,10 +20,10 @@ def test_profile_completion_challenge(app): with app.app_context(): db = get_db() - block = Block(blockhash="0x1", number=1) + block = Block(blockhash="0x1", number=BLOCK_NUMBER) user = User( blockhash="0x1", - blocknumber=1, + blocknumber=BLOCK_NUMBER, txhash="xyz", user_id=1, is_current=True, @@ -38,6 +40,11 @@ def test_profile_completion_challenge(app): with db.scoped_session() as session: bus = ChallengeEventBus(redis_conn) + # set challenge as active for purposes of test + session.query(Challenge).filter(Challenge.id == "profile-completion").update( + {"active": True, "starting_block": BLOCK_NUMBER} + ) + # Register events with the bus bus.register_listener(ChallengeEvent.profile_update, profile_challenge_manager) bus.register_listener(ChallengeEvent.repost, profile_challenge_manager) @@ -49,7 +56,7 @@ def test_profile_completion_challenge(app): session.add(user) # Process dummy event just to get this thing initted - bus.dispatch(ChallengeEvent.profile_update, 1, 1) + bus.dispatch(ChallengeEvent.profile_update, BLOCK_NUMBER, 1) bus.flush() bus.process_events(session) state = profile_challenge_manager.get_user_challenge_state(session, ["1"])[0] @@ -60,7 +67,7 @@ def test_profile_completion_challenge(app): # Do a repost repost = Repost( blockhash="0x1", - blocknumber=1, + blocknumber=BLOCK_NUMBER, user_id=1, repost_item_id=1, repost_type=RepostType.track, @@ -70,7 +77,7 @@ def test_profile_completion_challenge(app): ) session.add(repost) session.flush() - bus.dispatch(ChallengeEvent.repost, 1, 1) + bus.dispatch(ChallengeEvent.repost, BLOCK_NUMBER, 1) bus.flush() bus.process_events(session) state = profile_challenge_manager.get_user_challenge_state(session, ["1"])[0] @@ -79,7 +86,7 @@ def test_profile_completion_challenge(app): # Do a save save = Save( blockhash="0x1", - blocknumber=1, + blocknumber=BLOCK_NUMBER, user_id=1, save_item_id=1, save_type=SaveType.track, @@ -89,7 +96,7 @@ def test_profile_completion_challenge(app): ) session.add(save) session.flush() - bus.dispatch(ChallengeEvent.favorite, 1, 1) + bus.dispatch(ChallengeEvent.favorite, BLOCK_NUMBER, 1) bus.flush() bus.process_events(session) session.flush() @@ -99,7 +106,7 @@ def test_profile_completion_challenge(app): # Do 1 follow, then 5 total follows follow = Follow( blockhash="0x1", - blocknumber=1, + blocknumber=BLOCK_NUMBER, is_current=True, is_delete=False, created_at=datetime.now(), @@ -108,7 +115,7 @@ def test_profile_completion_challenge(app): ) session.add(follow) session.flush() - bus.dispatch(ChallengeEvent.follow, 1, 1) + bus.dispatch(ChallengeEvent.follow, BLOCK_NUMBER, 1) bus.flush() bus.process_events(session) session.flush() @@ -118,7 +125,7 @@ def test_profile_completion_challenge(app): follows = [ Follow( blockhash="0x1", - blocknumber=1, + blocknumber=BLOCK_NUMBER, is_current=True, is_delete=False, created_at=datetime.now(), @@ -127,7 +134,7 @@ def test_profile_completion_challenge(app): ), Follow( blockhash="0x1", - blocknumber=1, + blocknumber=BLOCK_NUMBER, is_current=True, is_delete=False, created_at=datetime.now(), @@ -136,7 +143,7 @@ def test_profile_completion_challenge(app): ), Follow( blockhash="0x1", - blocknumber=1, + blocknumber=BLOCK_NUMBER, is_current=True, is_delete=False, created_at=datetime.now(), @@ -145,7 +152,7 @@ def test_profile_completion_challenge(app): ), Follow( blockhash="0x1", - blocknumber=1, + blocknumber=BLOCK_NUMBER, is_current=True, is_delete=False, created_at=datetime.now(), @@ -155,7 +162,7 @@ def test_profile_completion_challenge(app): ] session.add_all(follows) session.flush() - bus.dispatch(ChallengeEvent.follow, 1, 1) + bus.dispatch(ChallengeEvent.follow, BLOCK_NUMBER, 1) bus.flush() bus.process_events(session) state = profile_challenge_manager.get_user_challenge_state(session, ["1"])[0] @@ -166,7 +173,7 @@ def test_profile_completion_challenge(app): {"profile_picture": "profilepictureurl"} ) session.flush() - bus.dispatch(ChallengeEvent.profile_update, 1, 1) + bus.dispatch(ChallengeEvent.profile_update, BLOCK_NUMBER, 1) bus.flush() bus.process_events(session) state = profile_challenge_manager.get_user_challenge_state(session, ["1"])[0] @@ -177,7 +184,7 @@ def test_profile_completion_challenge(app): {"bio": "profiledescription"} ) session.flush() - bus.dispatch(ChallengeEvent.profile_update, 1, 1) + bus.dispatch(ChallengeEvent.profile_update, BLOCK_NUMBER, 1) bus.flush() bus.process_events(session) state = profile_challenge_manager.get_user_challenge_state(session, ["1"])[0] @@ -186,7 +193,7 @@ def test_profile_completion_challenge(app): # Undo it, ensure that our count goes down session.query(User).filter(User.user_id == 1).update({"bio": None}) session.flush() - bus.dispatch(ChallengeEvent.profile_update, 1, 1) + bus.dispatch(ChallengeEvent.profile_update, BLOCK_NUMBER, 1) bus.flush() bus.process_events(session) state = profile_challenge_manager.get_user_challenge_state(session, ["1"])[0] @@ -197,7 +204,7 @@ def test_profile_completion_challenge(app): {"bio": "profiledescription", "cover_photo": "test_cover_photo"} ) session.flush() - bus.dispatch(ChallengeEvent.profile_update, 1, 1) + bus.dispatch(ChallengeEvent.profile_update, BLOCK_NUMBER, 1) bus.flush() bus.process_events(session) state = profile_challenge_manager.get_user_challenge_state(session, ["1"])[0] @@ -206,7 +213,7 @@ def test_profile_completion_challenge(app): # ensure that if we lose some data now that the thing is complete, we don't change the status of the challenge session.query(User).filter(User.user_id == 1).update({"cover_photo": None}) session.flush() - bus.dispatch(ChallengeEvent.profile_update, 1, 1) + bus.dispatch(ChallengeEvent.profile_update, BLOCK_NUMBER, 1) bus.flush() bus.process_events(session) state = profile_challenge_manager.get_user_challenge_state(session, ["1"])[0] diff --git a/discovery-provider/integration_tests/challenges/test_referral_challenge.py b/discovery-provider/integration_tests/challenges/test_referral_challenge.py index ca86bfe4012..5643450febb 100644 --- a/discovery-provider/integration_tests/challenges/test_referral_challenge.py +++ b/discovery-provider/integration_tests/challenges/test_referral_challenge.py @@ -14,12 +14,13 @@ from src.utils.db_session import get_db REDIS_URL = shared_config["redis"]["url"] +BLOCK_NUMBER = 1 def create_user(offset: int) -> User: return User( blockhash="0x1", - blocknumber=1, + blocknumber=BLOCK_NUMBER, txhash="xyz", user_id=offset, is_current=True, @@ -38,7 +39,7 @@ def create_user_referral(referrer: int, referred_user_id: int) -> UserEvents: return UserEvents( user_id=referred_user_id, is_current=True, - blocknumber=1, + blocknumber=BLOCK_NUMBER, blockhash="0x1", referrer=referrer, ) @@ -52,11 +53,11 @@ def dispatch_new_user_signup( session.flush() bus.dispatch( ChallengeEvent.referral_signup, - 1, + BLOCK_NUMBER, referrer, {"referred_user_id": referred_user_id}, ) - bus.dispatch(ChallengeEvent.referred_signup, 1, referred_user_id) + bus.dispatch(ChallengeEvent.referred_signup, BLOCK_NUMBER, referred_user_id) def test_referral_challenge(app): @@ -65,10 +66,10 @@ def test_referral_challenge(app): with app.app_context(): db = get_db() - block = Block(blockhash="0x1", number=1) + block = Block(blockhash="0x1", number=BLOCK_NUMBER) referrer = User( blockhash="0x1", - blocknumber=1, + blocknumber=BLOCK_NUMBER, txhash="xyz", user_id=1, is_current=True, @@ -98,16 +99,16 @@ def test_referral_challenge(app): # set challenge as active for purposes of test session.query(Challenge).filter( or_(Challenge.id == "referred", Challenge.id == "referrals") - ).update({"active": True}) + ).update({"active": True, "starting_block": BLOCK_NUMBER}) dispatch_new_user_signup(referrer.user_id, 2, session, bus) for _ in range(0, 4): bus.dispatch( ChallengeEvent.referral_signup, - 1, + BLOCK_NUMBER, referrer.user_id, {"referred_user_id": 2}, ) - bus.dispatch(ChallengeEvent.referred_signup, 1, 2) + bus.dispatch(ChallengeEvent.referred_signup, BLOCK_NUMBER, 2) bus.flush() bus.process_events(session) diff --git a/discovery-provider/integration_tests/challenges/test_trending_challenge.py b/discovery-provider/integration_tests/challenges/test_trending_challenge.py index d6666966ccf..0739144c77d 100644 --- a/discovery-provider/integration_tests/challenges/test_trending_challenge.py +++ b/discovery-provider/integration_tests/challenges/test_trending_challenge.py @@ -21,6 +21,7 @@ from src.utils.db_session import get_db REDIS_URL = shared_config["redis"]["url"] +BLOCK_NUMBER = 10 logger = logging.getLogger(__name__) trending_strategy_factory = TrendingStrategyFactory() @@ -252,7 +253,7 @@ def test_trending_challenge_job(app): + [{"item_id": 15} for _ in range(200)], } - populate_mock_db(db, test_entities) + populate_mock_db(db, test_entities, BLOCK_NUMBER + 1) bus = ChallengeEventBus(redis_conn) # Register events with the bus @@ -296,7 +297,7 @@ def test_trending_challenge_job(app): Challenge.id == "trending-track", Challenge.id == "trending-underground-track", ) - ).update({"active": True}) + ).update({"active": True, "starting_block": BLOCK_NUMBER}) bus.process_events(session) session.flush() trending_tracks = ( diff --git a/discovery-provider/integration_tests/utils.py b/discovery-provider/integration_tests/utils.py index fa34cbd45a3..64658b35215 100644 --- a/discovery-provider/integration_tests/utils.py +++ b/discovery-provider/integration_tests/utils.py @@ -87,20 +87,23 @@ def populate_mock_db(db, entities, block_offset=0): max_block = ( session.query(models.Block).filter(models.Block.number == i).first() ) + session.query(models.Block).filter(models.Block.is_current == True).update( + {"is_current": False} + ) if not max_block: block = models.Block( blockhash=hex(i), number=i, parenthash="0x01", - is_current=(i == 0), + is_current=(i == block_offset + num_blocks - 1), ) session.add(block) session.flush() for i, track_meta in enumerate(tracks): track = models.Track( - blockhash=hex(i), - blocknumber=i, + blockhash=hex(i + block_offset), + blocknumber=i + block_offset, track_id=track_meta.get("track_id", i), title=track_meta.get("title", f"track_{i}"), is_current=track_meta.get("is_current", True), @@ -118,8 +121,8 @@ def populate_mock_db(db, entities, block_offset=0): session.add(track) for i, playlist_meta in enumerate(playlists): playlist = models.Playlist( - blockhash=hex(i), - blocknumber=i, + blockhash=hex(i + block_offset), + blocknumber=i + block_offset, playlist_id=playlist_meta.get("playlist_id", i), is_current=playlist_meta.get("is_current", True), is_delete=playlist_meta.get("is_delete", False), @@ -145,8 +148,8 @@ def populate_mock_db(db, entities, block_offset=0): for i, user_meta in enumerate(users): user = models.User( - blockhash=hex(i), - blocknumber=i, + blockhash=hex(i + block_offset), + blocknumber=i + block_offset, user_id=user_meta.get("user_id", i), is_current=True, handle=user_meta.get("handle", str(i)), @@ -164,8 +167,8 @@ def populate_mock_db(db, entities, block_offset=0): for i, follow_meta in enumerate(follows): follow = models.Follow( - blockhash=hex(i), - blocknumber=follow_meta.get("blocknumber", i), + blockhash=hex(i + block_offset), + blocknumber=follow_meta.get("blocknumber", i + block_offset), follower_user_id=follow_meta.get("follower_user_id", i + 1), followee_user_id=follow_meta.get("followee_user_id", i), is_current=follow_meta.get("is_current", True), @@ -175,8 +178,8 @@ def populate_mock_db(db, entities, block_offset=0): session.add(follow) for i, repost_meta in enumerate(reposts): repost = models.Repost( - blockhash=hex(i), - blocknumber=repost_meta.get("blocknumber", i), + blockhash=hex(i + block_offset), + blocknumber=repost_meta.get("blocknumber", i + block_offset), user_id=repost_meta.get("user_id", i + 1), repost_item_id=repost_meta.get("repost_item_id", i), repost_type=repost_meta.get("repost_type", "track"), @@ -187,8 +190,8 @@ def populate_mock_db(db, entities, block_offset=0): session.add(repost) for i, save_meta in enumerate(saves): save = models.Save( - blockhash=hex(i), - blocknumber=save_meta.get("blocknumber", i), + blockhash=hex(i + block_offset), + blocknumber=save_meta.get("blocknumber", i + block_offset), user_id=save_meta.get("user_id", i + 1), save_item_id=save_meta.get("save_item_id", i), save_type=save_meta.get("save_type", "track"), @@ -251,8 +254,8 @@ def populate_mock_db(db, entities, block_offset=0): route = models.TrackRoute( slug=route_meta.get("slug", ""), title_slug=route_meta.get("title_slug", ""), - blockhash=hex(i), - blocknumber=route_meta.get("blocknumber", i), + blockhash=hex(i + block_offset), + blocknumber=route_meta.get("blocknumber", i + block_offset), owner_id=route_meta.get("owner_id", i + 1), track_id=route_meta.get("track_id", i + 1), is_current=route_meta.get("is_current", True), @@ -291,7 +294,7 @@ def populate_mock_db(db, entities, block_offset=0): specifier=user_challenge_meta.get("specifier", ""), is_complete=user_challenge_meta.get("is_complete", False), completed_blocknumber=user_challenge_meta.get( - "completed_blocknumber", 1 + "completed_blocknumber", 1 + block_offset ), current_step_count=user_challenge_meta.get("current_step_count", None), )