У меня возникли проблемы с издевательством над сетевым сигналом djstripe. Рассматриваемый сигнал:
@webhooks.handler ("charge.dispute.created")
Мне нужно смоделировать этот отправляемый сигнал, чтобы я мог проверить следующий метод. Я использую этот сигнал, чтобы уведомить администрацию о возникновении спора.
Вот ссылка на страницу на github, содержащую код сигнала djstripes:
https://github.com/dj-stripe/dj-stripe/blob/master/djstripe/signals.py
Вот метод, используемый в обработчике djstripe
@webhooks.handler("charge.dispute.created")
def charge_dispute_created(event, **kwargs):
print(event)
details = event.data.get("object")
charge_id = details['charge']
charge = stripe.Charge.retrieve(
charge_id,)
order_pk = charge['metadata']['order']
buyer_email = charge['metadata']['buyer']
buyer = User.objects.get(email=buyer_email)
seller_email = charge['metadata']['seller']
seller = User.objects.get(email=seller_email)
order = Order.objects.get(pk=order_pk)
payment_intent = details['id']
#send notification to buyer via notification and email
notify.send(sender=order.advert, recipient=buyer, verb=' - A dispute has been raised on this listing due to the payment being flagged. Please contact customer support.',
action_object=order)
send_mail(
'Payment disputed',
'Unfortunately your payment for %s has had a dispute filed, a dispute on this order has been raised. Please contact your card issuer.' % order.advert,
'accounts@foxlisted.com.au',
[buyer_email], fail_silently=False)
Вот тест (я не включил создание пользователя и порядок, настроенный для экономии места:
@patch('djstripe.signals.WEBHOOK_SIGNALS[("charge.dispute.created")].send')
@patch('stripe.Charge.retrieve')
@patch('notifications.signals.notify.send')
def test_charge_dispute_created_notifys_users_when_order_completed(self, handler_mock, notify_mock, retrieve_mock):
obj = {'charge' : 'ch_1234'}
charge = {'metadata' : {'order' : self.order.pk , 'buyer' : 'test@test.com', 'seller' : 'test2@test.com'} }
event_data = handler_mock.return_value.json.return_value = obj
retrieve = retrieve_mock.return_value.json.return_value = charge
#test notification getting notify
# self.assertEqual(len(mail.outbox), 2)
self.assertTrue(notify_mock.called)
self.assertEqual(notify_mock.call_count, 1)
По сути, я хочу издеваться над сигналом обработчика "charge.dispute.created", чтобы он отправлял сигнал в функцию обработчика, и я могу проверить, что электронная почта и уведомление действительно отправлены. Если у кого-то есть Лучшая идея, как я должен делать это, или если я делаю это неправильно, пожалуйста, дайте мне знать.