fix payment

This commit is contained in:
javad committed 2026-10-07 13:39:29 +03:30
1 parent 4f7486152c
commit bb3ddd1610
47 files changed
+2137 -51

No files matched your search

+101
View File
@@ -0,0 +1,101 @@
from urllib.parse import urlsplit
import uuid
import jdatetime
import pytest
from django.contrib.auth.models import Permission
from django.core.files.uploadedfile import SimpleUploadedFile
from django.urls import reverse
from django.utils import timezone
from playwright.sync_api import expect
from apps.payments import services
from apps.payments.access import issue_payment_link
from apps.payments.models import PaymentReceipt
from tests.e2e.pages.auth import AuthenticationPage
from tests.e2e.pages.receipt_upload import ReceiptUploadPage
from tests.e2e.test_payments_e2e import payment_case, PNG, PASSWORD
pytestmark = [pytest.mark.e2e, pytest.mark.django_db(transaction=True)]
@pytest.mark.parametrize('mode,width', [('independent', 320), ('linked', 1440), ('staff', 320), ('link', 320)])
def test_receipt_upload_progress_processing_and_single_submission(live_server, browser_page, payment_case, mode, width):
customer, account, reviewers = payment_case
creator = reviewers[0]
creator.user_permissions.add(Permission.objects.get(content_type__app_label='payments', codename='add_paymentnotice'))
notice = services.issue_notice(creator, {'customer': customer, 'account': account, 'subject': 'تست پیشرفت ارسال', 'amount': 12345})
_, link_url = issue_payment_link(notice=notice)
with browser_page() as page:
page.set_viewport_size({'width': width, 'height': 900})
view = ReceiptUploadPage(page, live_server.url)
view.control_transport()
if mode == 'staff':
AuthenticationPage(page, live_server.url).login_staff(creator, PASSWORD)
view.goto(reverse('staff_payments:receipt_new', args=[customer.public_id]))
elif mode == 'link':
view.goto(urlsplit(link_url).path)
page.get_by_role('link', name='ارسال فیش این واریز', exact=True).click()
else:
AuthenticationPage(page, live_server.url).login_customer(customer, PASSWORD)
view.goto(reverse('payments:receipt_new') + ('?notice=' + str(notice.public_id) if mode == 'linked' else ''))
if mode in ('independent', 'staff'):
page.get_by_label('واریز مستقل', exact=True).check()
view.fill_receipt(account.pk, PNG)
view.submit()
view.assert_uploading()
view.repeat_submission()
assert page.evaluate('document.documentElement.scrollWidth <= document.documentElement.clientWidth + 1')
view.processing()
view.finish()
assert PaymentReceipt.objects.filter(customer=customer).count() == 1
@pytest.mark.parametrize('failure', ['network', 'validation'])
def test_failed_upload_retains_image_and_can_retry(live_server, browser_page, payment_case, failure):
customer, account, _ = payment_case
with browser_page() as page:
view = ReceiptUploadPage(page, live_server.url)
view.control_transport()
AuthenticationPage(page, live_server.url).login_customer(customer, PASSWORD)
view.goto(reverse('payments:receipt_new'))
page.get_by_label('واریز مستقل', exact=True).check()
view.fill_receipt(account.pk, PNG)
key = page.locator('[name=submission_key]').input_value()
view.submit()
view.assert_uploading()
view.fail_network() if failure == 'network' else view.reject_fields()
expect(page.locator('#id_paid_amount')).to_have_value('۱۲٬۳۴۵')
assert page.locator('[name=submission_key]').input_value() == key
view.submit()
expect(page.locator('#receipt-upload-title')).to_have_text('در حال ارسال فیش…')
view.finish()
assert PaymentReceipt.objects.filter(customer=customer).count() == 1
def test_revised_receipt_uses_upload_progress(live_server, browser_page, payment_case, client):
customer, account, reviewers = payment_case
today = jdatetime.date.fromgregorian(date=timezone.localdate())
client.force_login(customer)
response = client.post(reverse('payments:receipt_new'), {
'receipt_mode': 'independent', 'paid_amount': '12345', 'destination_account': account.pk,
'paid_day': str(today.day), 'paid_month': str(today.month), 'paid_year': str(today.year),
'submission_key': str(uuid.uuid4()),
'receipt_image': SimpleUploadedFile('receipt.png', PNG, content_type='image/png'),
})
assert response.status_code == 302
receipt = PaymentReceipt.objects.get(customer=customer)
services.decide_receipt(reviewers[0], receipt.public_id, 1, 'REJECT', 'تصویر واضح‌تر لازم است')
with browser_page() as page:
view = ReceiptUploadPage(page, live_server.url)
view.control_transport()
AuthenticationPage(page, live_server.url).login_customer(customer, PASSWORD)
view.goto(reverse('payments:receipt_revise', args=[receipt.public_id]))
view.fill_receipt(account.pk, PNG)
view.submit()
view.assert_uploading()
view.repeat_submission()
view.processing()
view.finish(revision=True)
receipt.refresh_from_db()
assert receipt.current_version == 2 and receipt.revisions.count() == 2