def test_get_queued_reward_ids(dbsession, mock_web3): reward_amount_rbtc = Decimal('0.01') deposit_thresholds = RewardThresholdMap({ 'DAIbs': Decimal('2.00'), }) reward_1 = queue_reward( deposit=EXAMPLE_DEPOSIT, dbsession=dbsession, web3=mock_web3, reward_amount_rbtc=reward_amount_rbtc, deposit_thresholds=deposit_thresholds, ) reward_2 = queue_reward( deposit=ANOTHER_DEPOSIT_DIFFERENT_USER, dbsession=dbsession, web3=mock_web3, reward_amount_rbtc=reward_amount_rbtc, deposit_thresholds=deposit_thresholds, ) assert dbsession.query(Reward).count() == 2 # sanity check assert get_queued_reward_ids(dbsession) == [reward_1.id, reward_2.id] reward_1.status = RewardStatus.sent dbsession.flush() assert get_queued_reward_ids(dbsession) == [reward_2.id]
def test_queue_reward_threshold_is_met(dbsession: Session, mock_web3): queue_reward(deposit=EXAMPLE_DEPOSIT, dbsession=dbsession, web3=mock_web3, reward_amount_rbtc=Decimal('0.01'), deposit_thresholds=RewardThresholdMap({ 'DAIbs': Decimal('30.00'), })) assert dbsession.query(Reward).count() == 1 reward = dbsession.query(Reward).first() assert reward.user_address == EXAMPLE_DEPOSIT.user_address assert reward.reward_rbtc_wei == 10_000_000_000_000_000 assert reward.deposit_contract_address == EXAMPLE_DEPOSIT.contract_address assert reward.reward_transaction_hash is None assert reward.sent_at is None for key in [ 'amount_minus_fees_wei', 'block_hash', 'log_index', 'main_token_address', 'side_token_address', 'side_token_symbol', 'transaction_hash', ]: assert getattr(reward, f'deposit_{key}') == getattr(EXAMPLE_DEPOSIT, key)
def test_queue_reward_token_not_found(dbsession: Session, mock_web3): queue_reward(deposit=EXAMPLE_DEPOSIT, dbsession=dbsession, web3=mock_web3, reward_amount_rbtc=Decimal('0.01'), deposit_thresholds=RewardThresholdMap({ 'FOO': Decimal('30.00'), })) assert dbsession.query(Reward).count() == 0
def test_queue_reward_user_has_existing_transactions(dbsession: Session, mock_web3: MockWeb3): """Users who have already done transactions in RSK should not be rewarded""" mock_web3.eth.set_transaction_count(EXAMPLE_DEPOSIT.user_address, 1) queue_reward(deposit=EXAMPLE_DEPOSIT, dbsession=dbsession, web3=cast(Web3, mock_web3), reward_amount_rbtc=Decimal('0.01'), deposit_thresholds=RewardThresholdMap({ 'DAIbs': Decimal('30.00'), })) assert dbsession.query(Reward).count() == 0
def test_queue_reward_user_has_existing_balance(dbsession: Session, mock_web3: MockWeb3): """Users with existing RBTC balances should not be rewarded""" mock_web3.eth.set_balance(EXAMPLE_DEPOSIT.user_address, 1) queue_reward(deposit=EXAMPLE_DEPOSIT, dbsession=dbsession, web3=cast(Web3, mock_web3), reward_amount_rbtc=Decimal('0.01'), deposit_thresholds=RewardThresholdMap({ 'DAIbs': Decimal('30.00'), })) assert dbsession.query(Reward).count() == 0
def queue(): return queue_reward(deposit=EXAMPLE_DEPOSIT, dbsession=dbsession, web3=mock_web3, reward_amount_rbtc=Decimal('0.01'), deposit_thresholds=RewardThresholdMap({ 'DAIbs': Decimal('30.00'), }))
def test_reward_not_queued_again_for_same_user(dbsession, mock_web3): reward_amount_rbtc = Decimal('0.01') deposit_thresholds = RewardThresholdMap({ 'DAIbs': Decimal('2.00'), }) queue_reward( deposit=EXAMPLE_DEPOSIT, dbsession=dbsession, web3=mock_web3, reward_amount_rbtc=reward_amount_rbtc, deposit_thresholds=deposit_thresholds, ) assert dbsession.query(Reward).count() == 1 another_reward = queue_reward( deposit=ANOTHER_DEPOSIT_SAME_USER, dbsession=dbsession, web3=mock_web3, reward_amount_rbtc=reward_amount_rbtc, deposit_thresholds=deposit_thresholds, ) assert dbsession.query(Reward).count() == 1 assert not another_reward
def test_queue_multiple_rewards(dbsession, mock_web3): reward_amount_rbtc = Decimal('0.01') deposit_thresholds = RewardThresholdMap({ 'DAIbs': Decimal('2.00'), }) queue_reward( deposit=EXAMPLE_DEPOSIT, dbsession=dbsession, web3=mock_web3, reward_amount_rbtc=reward_amount_rbtc, deposit_thresholds=deposit_thresholds, ) assert dbsession.query(Reward).count() == 1 another_reward = queue_reward( deposit=ANOTHER_DEPOSIT_DIFFERENT_USER, dbsession=dbsession, web3=mock_web3, reward_amount_rbtc=reward_amount_rbtc, deposit_thresholds=deposit_thresholds, ) assert another_reward assert dbsession.query(Reward).count() == 2 assert another_reward.deposit_transaction_hash == ANOTHER_DEPOSIT_DIFFERENT_USER.transaction_hash