Payment event ledger (PaymentEvent) replicated to the backup server, plus CSV export script on 247
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
27
payment/tests_events.py
Normal file
27
payment/tests_events.py
Normal file
@@ -0,0 +1,27 @@
|
||||
from unittest import mock
|
||||
|
||||
from django.test import TestCase
|
||||
|
||||
from payment import events
|
||||
from payment.models import Order, PaymentEvent
|
||||
from payment.services import cancel_pending_order, create_order
|
||||
|
||||
|
||||
class PaymentEventTests(TestCase):
|
||||
def test_create_order_records_event_once_per_order(self):
|
||||
order, _ = create_order(user_id=7, amount=1000, idempotency_key='k-1')
|
||||
create_order(user_id=7, amount=1000, idempotency_key='k-1') # همان سفارش، رویدادِ دوم نه
|
||||
rows = PaymentEvent.objects.filter(order_id=order.id, event='order_created')
|
||||
self.assertEqual(rows.count(), 1)
|
||||
self.assertEqual(rows.get().user_id, 7)
|
||||
|
||||
def test_cancel_records_event(self):
|
||||
order, _ = create_order(user_id=7, amount=1000)
|
||||
cancel_pending_order(order, staff='tester')
|
||||
self.assertTrue(PaymentEvent.objects.filter(order_id=order.id, event='admin_cancel').exists())
|
||||
|
||||
def test_failure_to_record_does_not_raise(self):
|
||||
with mock.patch.object(PaymentEvent.objects, 'create', side_effect=RuntimeError('db')):
|
||||
with self.assertLogs('payment.events', level='ERROR'):
|
||||
events.record('x', user_id=1)
|
||||
self.assertEqual(Order.objects.count(), 0)
|
||||
Reference in New Issue
Block a user