Exemple #1
0
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]
Exemple #2
0
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)
Exemple #3
0
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
Exemple #4
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
Exemple #5
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
Exemple #6
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'),
                         }))
Exemple #7
0
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
Exemple #8
0
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