コード例 #1
0
def test_raises_when_sender_does_not_have_enough_balance():
    sender = WalletFactory()
    sender_balance = sender.balance
    receiver = WalletFactory()
    receiver_balance = receiver.balance

    with pytest.raises(ValidationError):
        TransactionFactory(
            amount=sender_balance * 2,
            sender=sender,
            receiver=receiver,
        )
    sender.refresh_from_db()
    assert sender.balance == sender_balance
    receiver.refresh_from_db()
    assert receiver.balance == receiver_balance
コード例 #2
0
def test_raises_when_sender_balance_less_than_minimum():
    sender_balance = ProjectMoney(amount=config.MINIMUM_SENDER_BALANCE - 1)
    sender = WalletFactory(balance=sender_balance)
    receiver = WalletFactory()
    receiver_balance = receiver.balance

    with pytest.raises(ValidationError):
        TransactionFactory(
            amount=sender_balance,
            sender=sender,
            receiver=receiver,
        )
    sender.refresh_from_db()
    assert sender.balance == sender_balance
    receiver.refresh_from_db()
    assert receiver.balance == receiver_balance
コード例 #3
0
def test_raises_when_zero_amount_transaction():
    zero = ProjectMoney(amount=0)
    sender = WalletFactory(balance=zero)
    receiver = WalletFactory()
    receiver_balance = receiver.balance

    with pytest.raises(ValidationError):
        TransactionFactory(
            amount=zero,
            sender=sender,
            receiver=receiver,
        )
    sender.refresh_from_db()
    assert sender.balance == zero
    receiver.refresh_from_db()
    assert receiver.balance == receiver_balance
コード例 #4
0
def test_raises_when_none_referrals_prior_to_withdrawal():
    sender = WithdrawalSenderWalletFactory()
    sender_balance = sender.balance
    receiver = WithdrawalReceiverWalletFactory()
    receiver_balance = receiver.balance

    with pytest.raises(ValidationError):
        TransactionFactory(
            amount=sender_balance,
            action=Action.WITHDRAW,
            sender=sender,
            receiver=receiver,
        )
    sender.refresh_from_db()
    assert sender.balance == sender_balance
    receiver.refresh_from_db()
    assert receiver.balance == receiver_balance
コード例 #5
0
def test_raises_when_transferring_to_any_wallet_other_than_transfer(
    non_transfer_receiver_kind: WalletKind, ):
    sender = WalletFactory()
    sender_balance = sender.balance
    receiver = WalletFactory(kind=non_transfer_receiver_kind)
    receiver_balance = receiver.balance

    with pytest.raises(ValidationError):
        TransactionFactory(
            amount=sender_balance,
            action=Action.TRANSFER,
            sender=sender,
            receiver=receiver,
        )
    sender.refresh_from_db()
    assert sender.balance == sender_balance
    receiver.refresh_from_db()
    assert receiver.balance == receiver_balance
コード例 #6
0
def test_raises_when_withdrawing_to_any_wallet_other_than_external(
    invalid_receiver_kind: WalletKind, ):
    sender = WalletFactory()
    sender_balance = sender.balance
    receiver = WalletFactory(kind=invalid_receiver_kind)
    receiver_balance = receiver.balance

    with pytest.raises(ValidationError):
        TransactionFactory(
            amount=sender_balance,
            action=Action.WITHDRAW,
            sender=sender,
            receiver=receiver,
        )
    sender.refresh_from_db()
    assert sender.balance == sender_balance
    receiver.refresh_from_db()
    assert receiver.balance == receiver_balance
コード例 #7
0
def test_raises_when_crediting_referral_bonus_to_any_wallet_other_than_referral(
    invalid_receiver_kind: WalletKind, ):
    sender = WalletFactory()
    sender_balance = sender.balance
    receiver = WalletFactory(kind=invalid_receiver_kind)
    receiver_balance = receiver.balance

    with pytest.raises(ValidationError):
        TransactionFactory(
            amount=sender_balance,
            action=Action.REFERRAL_BONUS,
            sender=sender,
            receiver=receiver,
        )
    sender.refresh_from_db()
    assert sender.balance == sender_balance
    receiver.refresh_from_db()
    assert receiver.balance == receiver_balance
コード例 #8
0
def test_raises_when_crediting_reward_to_any_wallet_other_than_main(
    non_main_receiver_kind: WalletKind, ):
    sender = WalletFactory()
    sender_balance = sender.balance
    receiver = WalletFactory(kind=non_main_receiver_kind)
    receiver_balance = receiver.balance

    with pytest.raises(ValidationError):
        TransactionFactory(
            amount=sender_balance,
            action=Action.REWARD,
            sender=sender,
            receiver=receiver,
        )
    sender.refresh_from_db()
    assert sender.balance == sender_balance
    receiver.refresh_from_db()
    assert receiver.balance == receiver_balance
コード例 #9
0
def test_raises_when_not_enough_balance_to_withdraw():
    # TODO: (lazy) settings
    sender_balance = ProjectMoney(amount=settings.MINIMUM_WITHDRAWAL_BALANCE)
    sender = WithdrawalSenderWalletFactory(balance=sender_balance, user__referrals=[UserFactory()])
    receiver = WithdrawalReceiverWalletFactory()
    receiver_balance = receiver.balance

    with pytest.raises(ValidationError):
        TransactionFactory(
            amount=ProjectMoney(amount=settings.MINIMUM_WITHDRAWAL_AMOUNT - 1),
            action=Action.WITHDRAW,
            sender=sender,
            receiver=receiver,
        )
    sender.refresh_from_db()
    assert sender.balance == sender_balance
    receiver.refresh_from_db()
    assert receiver.balance == receiver_balance
コード例 #10
0
def test_raises_when_same_sender_and_receiver():
    # TODO: parametrize
    user = UserFactory()
    sender = WalletFactory(user=user, kind=WalletKind.MAIN)
    sender_balance = sender.balance
    receiver = WalletFactory(user=user, kind=WalletKind.TRANSFER)
    receiver_balance = receiver.balance

    with pytest.raises(ValidationError):
        TransactionFactory(
            amount=ProjectMoney(100),
            action=Action.TRANSFER,
            sender=sender,
            receiver=receiver,
        )
    sender.refresh_from_db()
    assert sender.balance == sender_balance
    receiver.refresh_from_db()
    assert receiver.balance == receiver_balance
コード例 #11
0
def test_raises_when_depositing_from_any_wallet_other_than_external(
    invalid_sender_kind: WalletKind,
    reciever_kind: WalletKind,
):
    sender = WalletFactory(kind=invalid_sender_kind)
    sender_balance = sender.balance
    receiver = WalletFactory(kind=reciever_kind)
    receiver_balance = receiver.balance

    with pytest.raises(ValidationError):
        TransactionFactory(
            amount=sender_balance,
            action=Action.DEPOSIT,
            sender=sender,
            receiver=receiver,
        )
    sender.refresh_from_db()
    assert sender.balance == sender_balance
    receiver.refresh_from_db()
    assert receiver.balance == receiver_balance
コード例 #12
0
def test_raises_when_not_enough_balance_to_transfer():
    # TODO: (lazy) settings
    sender_balance = ProjectMoney(amount=config.MINIMUM_SENDER_BALANCE +
                                  config.MINIMUM_TRANSFER_AMOUNT)
    sender = TransferSenderWalletFactory(balance=sender_balance,
                                         user__referrals=[UserFactory()])
    receiver = TransferReceiverWalletFactory()
    receiver_balance = receiver.balance

    with pytest.raises(ValidationError):
        TransactionFactory(
            amount=ProjectMoney(amount=config.MINIMUM_TRANSFER_AMOUNT - 1),
            action=Action.TRANSFER,
            sender=sender,
            receiver=receiver,
        )
    sender.refresh_from_db()
    assert sender.balance == sender_balance
    receiver.refresh_from_db()
    assert receiver.balance == receiver_balance