def test_raises_when_interacting_with_expired_task(max_interactions: int): task = TaskFactory(max_interactions=max_interactions) for i in range(max_interactions): task.interact(UserFactory()) with pytest.raises(ValidationError): task.interact(UserFactory())
def test_task_expired_when_max_interactions_reached(max_interactions: int): task = TaskFactory(max_interactions=max_interactions) for i in range(max_interactions): task.interact(UserFactory()) task.refresh_from_db() assert task.expired
def test_raises_when_non_activated_user_withdrawing( non_activated_user_status: ActivatedDeactivatedStatus): user = UserFactory(status=non_activated_user_status) sender = WithdrawalSenderWalletFactory(user=user, user__referrals=[UserFactory()]) sender_balance = sender.balance receiver = WithdrawalReceiverWalletFactory() receiver_balance = receiver.balance with pytest.raises(ValidationError): WithdrawalTransactionFactory( amount=ProjectMoney(amount=config.MINIMUM_WITHDRAWAL_AMOUNT), sender=sender, receiver=receiver, ) sender.refresh_from_db() assert sender.balance == sender_balance receiver.refresh_from_db() assert receiver.balance == receiver_balance
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
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
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
def unauthenticated_user() -> settings.AUTH_USER_MODEL: # Not relying on `authenticated_user` fixture so as to prevent # unwanted user caching over multiple fixtures. user = UserFactory() user.api_client = StrictAPIClient() return user
def authenticated_user() -> settings.AUTH_USER_MODEL: return UserFactory()