wallet withdraw and deposit different scenario flows test

This commit is contained in:
hgh 2025-09-03 15:44:04 +03:30
parent dc3da1f9d4
commit 400a0c710e
2 changed files with 102 additions and 12 deletions

View file

@ -131,6 +131,55 @@ class ApplicationApiFlowsTests(APITestCase):
self.assertContains(response, 'balance') self.assertContains(response, 'balance')
self.assertEqual(response.json()['balance'], 100) self.assertEqual(response.json()['balance'], 100)
def test_deposit_flow_insufficient_balance(self):
auth = self._create_authorization_header(self.application_access_token.token)
# Checking wallets initials values(application balance = 300 and payee balance = zero)
response = self.client.get(reverse('wallet:application_wallet_balance_api'), HTTP_AUTHORIZATION=auth)
self.assertContains(response, 'balance')
self.assertEqual(response.json()['balance'], 300)
params = {
'uuid': self.payee_uuid,
}
response = self.client.get(reverse('wallet:application_user_wallet_balance_api', kwargs=params), HTTP_AUTHORIZATION=auth)
self.assertContains(response, 'balance')
self.assertEqual(response.json()['balance'], 0)
# Deposit process
data = {
'amount': 500,
'payee_id': self.payee_uuid,
'payee_type': TypeChoices.USER
}
response = self.client.post(reverse('wallet:application_deposit_submit_api'), data=data, HTTP_AUTHORIZATION=auth)
self.assertEqual(response.status_code, 500)
def test_deposit_flow_prevent_double_spending(self):
auth = self._create_authorization_header(self.application_access_token.token)
# Checking wallets initials values(application balance = 300 and payee balance = zero)
response = self.client.get(reverse('wallet:application_wallet_balance_api'), HTTP_AUTHORIZATION=auth)
self.assertContains(response, 'balance')
self.assertEqual(response.json()['balance'], 300)
params = {
'uuid': self.payee_uuid,
}
response = self.client.get(reverse('wallet:application_user_wallet_balance_api', kwargs=params), HTTP_AUTHORIZATION=auth)
self.assertContains(response, 'balance')
self.assertEqual(response.json()['balance'], 0)
# Deposit process
data = {
'amount': 200,
'payee_id': self.payee_uuid,
'payee_type': TypeChoices.USER
}
response = self.client.post(reverse('wallet:application_deposit_submit_api'), data=data, HTTP_AUTHORIZATION=auth)
self.assertEqual(response.status_code, 201)
response = self.client.post(reverse('wallet:application_deposit_submit_api'), data=data, HTTP_AUTHORIZATION=auth)
self.assertEqual(response.status_code, 500)
def test_withdraw_flow_success(self): def test_withdraw_flow_success(self):
auth = self._create_authorization_header(self.payer_access_token.token) auth = self._create_authorization_header(self.payer_access_token.token)
@ -174,3 +223,53 @@ class ApplicationApiFlowsTests(APITestCase):
self.assertContains(response, 'balance') self.assertContains(response, 'balance')
self.assertEqual(response.json()['balance'], 200) self.assertEqual(response.json()['balance'], 200)
def test_withdraw_flow_insufficient_balance(self):
auth = self._create_authorization_header(self.payer_access_token.token)
# Checking wallets initials values(application balance = 300 and payee balance = zero)
response = self.client.get(reverse('wallet:application_wallet_balance_api'), HTTP_AUTHORIZATION=auth)
self.assertContains(response, 'balance')
self.assertEqual(response.json()['balance'], 300)
params = {
'uuid': self.payer_uuid,
}
response = self.client.get(reverse('wallet:application_user_wallet_balance_api', kwargs=params), HTTP_AUTHORIZATION=auth)
self.assertContains(response, 'balance')
self.assertEqual(response.json()['balance'], 300)
# Deposit process
data = {
'amount': 500,
'payer_id': self.payer_uuid,
'payer_type': TypeChoices.USER
}
response = self.client.post(reverse('wallet:application_withdraw_submit_api'), data=data, HTTP_AUTHORIZATION=auth)
self.assertEqual(response.status_code, 500)
def test_withdraw_flow_prevent_double_spending(self):
auth = self._create_authorization_header(self.payer_access_token.token)
# Checking wallets initials values(application balance = 300 and payee balance = zero)
response = self.client.get(reverse('wallet:application_wallet_balance_api'), HTTP_AUTHORIZATION=auth)
self.assertContains(response, 'balance')
self.assertEqual(response.json()['balance'], 300)
params = {
'uuid': self.payer_uuid,
}
response = self.client.get(reverse('wallet:application_user_wallet_balance_api', kwargs=params), HTTP_AUTHORIZATION=auth)
self.assertContains(response, 'balance')
self.assertEqual(response.json()['balance'], 300)
# Deposit process
data = {
'amount': 200,
'payer_id': self.payer_uuid,
'payer_type': TypeChoices.USER
}
response = self.client.post(reverse('wallet:application_withdraw_submit_api'), data=data, HTTP_AUTHORIZATION=auth)
self.assertEqual(response.status_code, 201)
response = self.client.post(reverse('wallet:application_withdraw_submit_api'), data=data, HTTP_AUTHORIZATION=auth)
self.assertEqual(response.status_code, 500)

View file

@ -285,11 +285,7 @@ class CategoryDepositSubmitAPIView(generics.CreateAPIView):
payee_wallet, _ = Wallet.objects.get_or_create(owner_uuid=payee_id, owner_type=payee_type, category=category) payee_wallet, _ = Wallet.objects.get_or_create(owner_uuid=payee_id, owner_type=payee_type, category=category)
instance = serializer.save(payer_wallet=payer_wallet, application=application, payee_wallet=payee_wallet) instance = serializer.save(payer_wallet=payer_wallet, application=application, payee_wallet=payee_wallet)
try: instance.category_submit()
instance.category_submit()
except Exception as e:
print(e)
APIException('Failed to submit deposit')
class CategoryDepositVerifyAPIView(generics.RetrieveAPIView): class CategoryDepositVerifyAPIView(generics.RetrieveAPIView):
@ -347,14 +343,9 @@ class CategoryWithdrawSubmitAPIView(generics.CreateAPIView):
payer_type = serializer.validated_data.pop('payer_type') payer_type = serializer.validated_data.pop('payer_type')
payee_wallet, _ = Wallet.objects.get_or_create(owner_uuid=application.uuid, owner_type=TypeChoices.APPLICATION, payee_wallet, _ = Wallet.objects.get_or_create(owner_uuid=application.uuid, owner_type=TypeChoices.APPLICATION,
category=category) category=category)
payer_wallet, _ = Wallet.objects.get_or_create(owner_uuid=payer_id, owner_type=TypeChoices.USER, category=category) payer_wallet, _ = Wallet.objects.get_or_create(owner_uuid=payer_id, owner_type=payer_type, category=category)
instance = serializer.save(payer_wallet=payer_wallet, application=application, payee_wallet=payee_wallet) instance = serializer.save(payer_wallet=payer_wallet, application=application, payee_wallet=payee_wallet)
instance.category_submit()
try:
instance.category_submit()
except Exception as e:
print(e)
APIException('Failed to submit withdraw')
class CategoryWithdrawVerifyAPIView(generics.RetrieveAPIView): class CategoryWithdrawVerifyAPIView(generics.RetrieveAPIView):