estelam ticket, varizha , others
This commit is contained in:
1 parent
35a1ec1794
commit
6b546aad76
71 files changed
+2865
-191
No files matched your search
@@ -42,14 +42,12 @@ def run(job):
|
||||
return job
|
||||
|
||||
|
||||
def test_initially_disabled_and_staff_uploads_do_not_notify(case, enabled, monkeypatch):
|
||||
def test_disabled_channels_do_not_notify_customer_or_staff_uploads(case, enabled, monkeypatch):
|
||||
network = Mock(side_effect=AssertionError('Network must not run in registration'))
|
||||
monkeypatch.setattr(requests, 'post', network)
|
||||
enabled.bale_enabled = enabled.sms_enabled = False
|
||||
enabled.save()
|
||||
submit(case)
|
||||
enabled.bale_enabled = enabled.sms_enabled = True
|
||||
enabled.save()
|
||||
form = ReceiptForm(data(case, linked=False), {'receipt_image': upload()}, customer=case['customer'])
|
||||
assert form.is_valid(), form.errors
|
||||
services.submit_receipt(case['creator'], case['customer'], form.cleaned_data)
|
||||
@@ -57,6 +55,38 @@ def test_initially_disabled_and_staff_uploads_do_not_notify(case, enabled, monke
|
||||
network.assert_not_called()
|
||||
|
||||
|
||||
@pytest.mark.parametrize('picker,linked', [(False, True), (False, False), (True, True), (True, False)])
|
||||
def test_staff_entry_points_enqueue_once_with_customer_identity(case, enabled, client, monkeypatch, picker, linked):
|
||||
network = Mock(side_effect=AssertionError('Network must not run in registration'))
|
||||
monkeypatch.setattr(requests, 'post', network)
|
||||
client.force_login(case['creator'])
|
||||
endpoint = reverse('staff_payments:receipt_new', args=[case['customer'].public_id])
|
||||
if picker:
|
||||
response = client.post(reverse('staff_payments:receipt_customer'), {'customer': case['customer'].pk})
|
||||
assert response.status_code == 302 and response.url == endpoint
|
||||
assert client.get(endpoint).status_code == 200
|
||||
values = data(case, linked=linked)
|
||||
invalid = client.post(endpoint, {**values, 'paid_amount': '0', 'receipt_image': upload()},
|
||||
HTTP_ACCEPT='application/json')
|
||||
assert invalid.status_code == 422
|
||||
assert not PaymentReceiptAlert.objects.exists()
|
||||
for _ in range(2):
|
||||
response = client.post(endpoint, {**values, 'receipt_image': upload()}, HTTP_ACCEPT='application/json')
|
||||
assert response.status_code == 200, response.content
|
||||
receipt = PaymentReceipt.objects.get(customer=case['customer'])
|
||||
assert receipt.submitted_by_id == case['creator'].pk
|
||||
assert receipt.notice_id == (case['notice'].pk if linked else None)
|
||||
alerts = list(receipt.revisions.get().alerts.select_related('job'))
|
||||
assert len(alerts) == 3
|
||||
assert {a.job.channel for a in alerts} == {'SMS', 'BALE'}
|
||||
assert {a.recipient_mobile for a in alerts} == {'', '+989121110001', '+989121110002'}
|
||||
assert all(a.job.customer_id == case['customer'].pk for a in alerts)
|
||||
assert all(a.context['customer_mobile'] == case['customer'].local_mobile for a in alerts)
|
||||
assert all('واریزکننده آزمایشی' in a.context['customer_name'] for a in alerts)
|
||||
assert all(a.context['receipt_link'].endswith(reverse('staff_payments:receipt_detail', args=[receipt.public_id])) for a in alerts)
|
||||
network.assert_not_called()
|
||||
|
||||
|
||||
@pytest.mark.parametrize('anonymous,linked', [(False, True), (False, False), (True, True), (True, False)])
|
||||
def test_all_customer_entry_points_enqueue_once_without_network(case, enabled, client, monkeypatch, anonymous, linked):
|
||||
network = Mock(side_effect=AssertionError('Network must not run in registration'))
|
||||
@@ -85,27 +115,37 @@ def test_all_customer_entry_points_enqueue_once_without_network(case, enabled, c
|
||||
network.assert_not_called()
|
||||
|
||||
|
||||
def test_customer_corrections_have_separate_idempotent_alerts_and_can_be_disabled(case, enabled):
|
||||
@pytest.mark.parametrize('staff', [False, True])
|
||||
def test_customer_corrections_have_separate_idempotent_alerts_and_can_be_disabled(case, enabled, staff):
|
||||
receipt = submit(case)
|
||||
actor = case['creator'] if staff else case['customer']
|
||||
if staff:
|
||||
grant(actor, 'submit_customer_receipt')
|
||||
services.decide_receipt(case['first'], receipt.public_id, 1, 'REJECT', 'تصویر خوانا نیست')
|
||||
form = ReceiptForm(data(case), {'receipt_image': upload()}, customer=case['customer'])
|
||||
assert form.is_valid(), form.errors
|
||||
services.revise_receipt(case['customer'], receipt.public_id, 1, form.cleaned_data)
|
||||
services.revise_receipt(actor, receipt.public_id, 1, form.cleaned_data)
|
||||
assert PaymentReceiptAlert.objects.count() == 6
|
||||
receipt_alerts.safe_queue_receipt_alerts(receipt.revisions.get(version=2), case['customer'])
|
||||
receipt_alerts.safe_queue_receipt_alerts(receipt.revisions.get(version=2), actor)
|
||||
assert PaymentReceiptAlert.objects.count() == 6
|
||||
enabled.notify_revisions = False
|
||||
enabled.save()
|
||||
services.decide_receipt(case['first'], receipt.public_id, 2, 'REJECT', 'اصلاح لازم است')
|
||||
form = ReceiptForm(data(case), {'receipt_image': upload()}, customer=case['customer'])
|
||||
assert form.is_valid()
|
||||
services.revise_receipt(case['customer'], receipt.public_id, 2, form.cleaned_data)
|
||||
services.revise_receipt(actor, receipt.public_id, 2, form.cleaned_data)
|
||||
assert PaymentReceiptAlert.objects.count() == 6
|
||||
|
||||
|
||||
def test_outer_rollback_removes_receipt_and_alerts(case, enabled):
|
||||
@pytest.mark.parametrize('staff', [False, True])
|
||||
def test_outer_rollback_removes_receipt_and_alerts(case, enabled, staff):
|
||||
with pytest.raises(RuntimeError), transaction.atomic():
|
||||
submit(case)
|
||||
if staff:
|
||||
form = ReceiptForm(data(case), {'receipt_image': upload()}, customer=case['customer'])
|
||||
assert form.is_valid(), form.errors
|
||||
services.submit_receipt(case['creator'], case['customer'], form.cleaned_data)
|
||||
else:
|
||||
submit(case)
|
||||
raise RuntimeError('rollback')
|
||||
assert not PaymentReceipt.objects.exists() and not PaymentReceiptAlert.objects.exists()
|
||||
assert not NotificationJob.objects.filter(event_type=receipt_alerts.RECEIPT_ALERT_EVENT).exists()
|
||||
@@ -131,9 +171,15 @@ def test_configuration_failure_isolated_from_registration(case, enabled, monkeyp
|
||||
assert receipt.revisions.count() == 1
|
||||
|
||||
|
||||
def test_worker_sends_private_photo_with_database_token_and_sms_to_managers(case, enabled, monkeypatch, settings):
|
||||
@pytest.mark.parametrize('staff', [False, True])
|
||||
def test_worker_sends_private_photo_with_database_token_and_sms_to_managers(case, enabled, monkeypatch, settings, staff):
|
||||
settings.BALE_BOT_TOKEN = 'existing-ticket-token'
|
||||
receipt = submit(case)
|
||||
if staff:
|
||||
form = ReceiptForm(data(case), {'receipt_image': upload()}, customer=case['customer'])
|
||||
assert form.is_valid(), form.errors
|
||||
receipt = services.submit_receipt(case['creator'], case['customer'], form.cleaned_data)
|
||||
else:
|
||||
receipt = submit(case)
|
||||
posted, sent = [], []
|
||||
def post(url, **kwargs):
|
||||
posted.append((url, kwargs['data'], kwargs['files']['photo'][1].read(), kwargs['timeout']))
|
||||
|
||||
Reference in new issue
Block a user