fix payment
This commit is contained in:
1 parent
4f7486152c
commit
bb3ddd1610
47 files changed
+2137
-51
No files matched your search
@@ -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
|
||||
Reference in new issue
Block a user