86 lines
4.7 KiB
Python
86 lines
4.7 KiB
Python
from urllib.parse import urlsplit
|
|
|
|
import pytest
|
|
from django.urls import reverse
|
|
from playwright.sync_api import expect
|
|
|
|
from apps.payments import services
|
|
from apps.payments.access import issue_payment_link
|
|
from apps.payments.deposit_identifier import generate_id_algorithm
|
|
from apps.payments.models import CompanyBankAccount
|
|
from tests.e2e.pages.auth import AuthenticationPage
|
|
from tests.e2e.pages.receipt_customer_details import ReceiptCustomerDetailsPage
|
|
from tests.e2e.test_payments_e2e import payment_case, PASSWORD, PNG
|
|
|
|
pytestmark = [pytest.mark.e2e, pytest.mark.django_db(transaction=True)]
|
|
|
|
|
|
@pytest.mark.parametrize('mode', ['independent', 'linked', 'staff', 'link'])
|
|
def test_required_payer_on_every_receipt_entry_point(live_server, browser_page, payment_case, mode):
|
|
customer, account, reviewers = payment_case
|
|
customer.first_name = customer.last_name = ''
|
|
customer.save()
|
|
notice = services.issue_notice(reviewers[0], {'customer': customer, 'account': account, 'subject': 'ثبت فیش با نام', 'amount': 12345})
|
|
link_path = urlsplit(issue_payment_link(notice=notice)[1]).path if mode == 'link' else ''
|
|
with browser_page() as page:
|
|
page.set_viewport_size({'width': 320, 'height': 900})
|
|
view = ReceiptCustomerDetailsPage(page, live_server.url)
|
|
if mode == 'link':
|
|
view.goto(link_path)
|
|
page.get_by_role('link', name='ارسال فیش این واریز', exact=True).click()
|
|
elif mode == 'staff':
|
|
AuthenticationPage(page, live_server.url).login_staff(reviewers[0], PASSWORD)
|
|
view.goto(reverse('staff_payments:receipt_new', args=[customer.public_id]))
|
|
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.expect_payer('')
|
|
view.fill_receipt(account.pk, PNG)
|
|
view.submit()
|
|
view.expect_missing_payer()
|
|
view.enter_payer('رضا احمدی')
|
|
view.submit()
|
|
expect(page.locator('.flash')).to_contain_text('فیش ثبت شد')
|
|
expect(page.get_by_text('رضا احمدی', exact=True)).to_be_visible()
|
|
assert page.evaluate('document.documentElement.scrollWidth <= document.documentElement.clientWidth + 1')
|
|
|
|
|
|
def test_identifier_warning_follows_destination_and_mode(live_server, browser_page, payment_case):
|
|
customer, account, reviewers = payment_case
|
|
account.requires_deposit_id = True
|
|
account.save()
|
|
other = CompanyBankAccount.objects.create(name='حساب بدون شناسه', holder='شرکت', bank=account.bank, account_number='1234')
|
|
identifier = generate_id_algorithm(customer.local_mobile)
|
|
notice = services.issue_notice(reviewers[0], {'customer': customer, 'account': account, 'subject': 'شناسه اختصاصی', 'amount': 12345, 'deposit_id': identifier})
|
|
with browser_page() as page:
|
|
view = ReceiptCustomerDetailsPage(page, live_server.url)
|
|
AuthenticationPage(page, live_server.url).login_customer(customer, PASSWORD)
|
|
view.goto(reverse('payments:receipt_new') + '?notice=' + str(notice.public_id))
|
|
view.expect_payer('مشتری آزمایشی')
|
|
view.select_destination(account.pk, account.bank.name, identifier)
|
|
page.get_by_label('واریز مستقل', exact=True).check()
|
|
view.select_destination(other.pk)
|
|
view.select_destination(account.pk, account.bank.name, identifier)
|
|
|
|
|
|
def test_staff_can_cancel_then_confirm_rejection_sms(live_server, browser_page, payment_case):
|
|
customer, account, reviewers = payment_case
|
|
with browser_page() as page:
|
|
view = ReceiptCustomerDetailsPage(page, live_server.url)
|
|
auth = AuthenticationPage(page, live_server.url)
|
|
auth.login_customer(customer, PASSWORD)
|
|
view.goto(reverse('payments:receipt_new'))
|
|
page.get_by_label('واریز مستقل', exact=True).check()
|
|
view.fill_receipt(account.pk, PNG)
|
|
view.submit()
|
|
expect(page.locator('.flash')).to_contain_text('فیش ثبت شد')
|
|
receipt_id = page.url.rstrip('/').rsplit('/', 1)[-1]
|
|
page.get_by_role('button', name='خروج', exact=True).first.click()
|
|
auth.login_staff(reviewers[0], PASSWORD)
|
|
view.goto(reverse('staff_payments:receipt_detail', args=[receipt_id]))
|
|
view.reject('تصویر فیش ناخوانا است.', confirm=False)
|
|
view.reject('تصویر فیش ناخوانا است.', confirm=True)
|
|
expect(page.get_by_text('تصویر فیش ناخوانا است.', exact=True)).to_be_visible()
|