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_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 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_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 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
def test_load_from_json(): config = load_from_json(EXAMPLE_CONFIG_JSON) assert isinstance(config, Config) assert config == Config( bridge_addresses=BridgeAddressMap({ "RSK-ETH": "0x8e7199d5f496ea862492f4f983a1627d723328fd", "RSK-BSC": "0x39500b3864ddda31633319c8a570176a79977a42" }), rpc_url="https://testnet.sovryn.app/rpc", db_url="sqlite:///db.sqlite3", default_start_block=1784453, required_block_confirmations=2, deposit_fee_percentage=Decimal("0.002"), reward_rbtc=Decimal("0.001"), reward_thresholds=RewardThresholdMap({ "DAIbs": Decimal("100.0"), "ETHbs": Decimal("0.25"), }), account=Account.from_key( "0000000000000000000000000000000000000000000000000000000000000000" ), )