wallet withdraw and deposit different scenario flows test
This commit is contained in:
parent
dc3da1f9d4
commit
400a0c710e
2 changed files with 102 additions and 12 deletions
|
|
@ -131,6 +131,55 @@ class ApplicationApiFlowsTests(APITestCase):
|
|||
self.assertContains(response, 'balance')
|
||||
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):
|
||||
auth = self._create_authorization_header(self.payer_access_token.token)
|
||||
|
||||
|
|
@ -174,3 +223,53 @@ class ApplicationApiFlowsTests(APITestCase):
|
|||
self.assertContains(response, 'balance')
|
||||
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)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
instance = serializer.save(payer_wallet=payer_wallet, application=application, payee_wallet=payee_wallet)
|
||||
try:
|
||||
instance.category_submit()
|
||||
except Exception as e:
|
||||
print(e)
|
||||
APIException('Failed to submit deposit')
|
||||
instance.category_submit()
|
||||
|
||||
|
||||
class CategoryDepositVerifyAPIView(generics.RetrieveAPIView):
|
||||
|
|
@ -347,14 +343,9 @@ class CategoryWithdrawSubmitAPIView(generics.CreateAPIView):
|
|||
payer_type = serializer.validated_data.pop('payer_type')
|
||||
payee_wallet, _ = Wallet.objects.get_or_create(owner_uuid=application.uuid, owner_type=TypeChoices.APPLICATION,
|
||||
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)
|
||||
|
||||
try:
|
||||
instance.category_submit()
|
||||
except Exception as e:
|
||||
print(e)
|
||||
APIException('Failed to submit withdraw')
|
||||
instance.category_submit()
|
||||
|
||||
|
||||
class CategoryWithdrawVerifyAPIView(generics.RetrieveAPIView):
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue