From 9183b1aa7813e9828b897cece8fe698431f8255e Mon Sep 17 00:00:00 2001 From: Sayyid Hamid Mahdavi Date: Sat, 27 Dec 2025 13:41:34 +0330 Subject: [PATCH] pass tests --- apps/wallet/models.py | 16 +++++++++++++--- apps/wallet/tests/application.py | 6 +++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/apps/wallet/models.py b/apps/wallet/models.py index 8112992..f18d0f9 100755 --- a/apps/wallet/models.py +++ b/apps/wallet/models.py @@ -173,9 +173,19 @@ class Transaction(BaseModel): if self.amount > self.payer_account.balance and not payer_is_allowed_negative_balance: logger.error('not enough balance') raise UnprocessableEntity('not enough balance') - logger.info(f'payer_account balance {self.payee_account} -> {self.payer_account.balance} - {self.amount}') - self.payer_account.balance = F('balance') - self.amount - self.payer_account.save(update_fields=['balance']) + + if not payer_is_allowed_negative_balance: + updated = Account.objects.filter(pk=self.payer_account.pk, balance__gt=self.amount).update(balance=F('balance') - self.amount) + else: + updated = Account.objects.filter(pk=self.payer_account.pk).update(balance=F('balance') - self.amount) + + if updated: + self.payer_account.refresh_from_db() + logger.info(f'payer_account balance {self.payee_account} -> {self.payer_account.balance} - {self.amount}') + + else: + raise UnprocessableEntity('not enough balance') + def deposit_to_payee_balance(self): logger.debug('start deposit_to_payee_balance') diff --git a/apps/wallet/tests/application.py b/apps/wallet/tests/application.py index dcb35a4..5c45feb 100755 --- a/apps/wallet/tests/application.py +++ b/apps/wallet/tests/application.py @@ -35,6 +35,7 @@ class ApplicationApiFlowsTests(APITestCase): 'wallet.deposit:submit', 'wallet.wallet:get_balance', 'wallet.application:get_user_balance', + 'wallet.user:transaction_list', 'wallet.application.withdraw:submit', 'wallet.application.withdraw:verify', @@ -93,9 +94,10 @@ class ApplicationApiFlowsTests(APITestCase): return "Bearer {0}".format(token) def test_authentication_allow(self): - auth = self._create_authorization_header(self.application_access_token.token) + auth = self._create_authorization_header(self.payer_access_token.token) wallets = [self.wallet_rial_uuid.hex, self.wallet_reward_uuid.hex] response = self.client.get(reverse('wallet:user_wallet_account_api'), query_params={'wallet': ','.join(wallets)}, HTTP_AUTHORIZATION=auth) + print(response.json()) self.assertGreater(response.json()['count'], 1) from_wallet = response.json()['results'][0] self.assertEqual(from_wallet['balance'], 300) @@ -239,6 +241,7 @@ class ApplicationApiFlowsTests(APITestCase): } response = self.client.post(reverse('wallet:application_deposit_submit_api', kwargs=kwargs_payer_wallet), data=data, HTTP_AUTHORIZATION=auth) + print(response.json()) self.assertEqual(response.status_code, 201) def test_deposit_flow_zero_amount(self): @@ -303,6 +306,7 @@ class ApplicationApiFlowsTests(APITestCase): 'payer_wallet': self.wallet_rial_uuid, } response = self.client.post(reverse('wallet:application_deposit_submit_api', kwargs=kwargs_payer_wallet), data=data, HTTP_AUTHORIZATION=auth) + print(response.json()) self.assertEqual(response.status_code, 201) response = self.client.post(reverse('wallet:application_deposit_submit_api', kwargs=kwargs_payer_wallet), data=data, HTTP_AUTHORIZATION=auth)