используя макет сигнала djstripe - PullRequest
0 голосов
/ 13 апреля 2020

У меня возникли проблемы с издевательством над сетевым сигналом 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", чтобы он отправлял сигнал в функцию обработчика, и я могу проверить, что электронная почта и уведомление действительно отправлены. Если у кого-то есть Лучшая идея, как я должен делать это, или если я делаю это неправильно, пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 14 апреля 2020

Понял.


    @patch('stripe.Charge.retrieve')
    @patch('notifications.signals.notify.send')
    def test_charge_dispute_created_notifys_users_when_order_completed(self, notify_mock, retrieve_mock):

        data = {'charge' : 'ch_1234', 'id' : 'ch_5678', }
        charge  ={'metadata' :{'buyer' : 'test@test.com', 'order' : self.order.pk ,  'seller' : 'test2@test.com'} } 

        retrieve_mock.return_value = charge
        event = Mock()
        event.data.get.return_value = data
        charge_dispute_created(event)


        #test notification getting notify
        self.assertEqual(len(mail.outbox), 2)
        self.assertTrue(notify_mock.called)
        self.assertEqual(notify_mock.call_count, 1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...