gpt4 book ai didi

django - 如何使用模拟数据测试 Stripe Webhook

转载 作者:行者123 更新时间:2023-11-28 19:41:47 25 4
gpt4 key购买 nike

我正在尝试编写一个单元测试,将模拟事件发布到我的 stripe webhook。

我去从我的日志中提取了一个事件,并尝试在启用测试模式的情况下发送它,但是我(有点可以预见)得到了一个错误:

a similar object exists in live mode, but a test mode key was used to make this request.

很公平。那么我该如何创建一个模拟事件,我可以实际将其发送到我的 webhook 并正确处理它呢?

这是我当前的测试:

class StripeTest(TestCase):
def setUp(self):
self.client = Client()

def test_receiving_a_callback(self):
with open('donate/test_assets/stripe_event.json', 'r') as f:
stripe_event = simplejson.load(f)

self.client.post('/donate/callbacks/stripe/',
data=simplejson.dumps(stripe_event),
content_type='application/json')

最佳答案

解决方案是创建您自己的模拟数据。在下面的代码中,我们通过创建 strip token 来创建测试支付,然后通过前端(在/donate/端点)提交它。

前端正常工作后,您可以从 stripe 获取事件,然后将其发送到开发机器的 webhook 端点。

这比我预期的要多,而且我不喜欢我的测试进入网络,但这似乎是一个不错的解决方案。我对自己的付款比以前更有信心。

    def test_making_a_donation_and_getting_the_callback(self):
"""These two tests must live together because they need to be done sequentially.

First, we place a donation using the client. Then we send a mock callback to our
webhook, to make sure it accepts it properly.
"""
stripe.api_key = settings.STRIPE_SECRET_KEY
# Create a stripe token (this would normally be done via javascript in the front
# end when the submit button was pressed)
token = stripe.Token.create(
card={
'number': '4242424242424242',
'exp_month': '6',
'exp_year': str(datetime.today().year + 1),
'cvc': '123',
}
)

# Place a donation as an anonymous (not logged in) person using the
# token we just got
r = self.client.post('/donate/', data={
'amount': '25',
'payment_provider': 'cc',
'first_name': 'Barack',
'last_name': 'Obama',
'address1': '1600 Pennsylvania Ave.',
'address2': 'The Whitehouse',
'city': 'DC',
'state': 'DC',
'zip_code': '20500',
'email': 'barack@freelawproject.org',
'referrer': 'footer',
'stripeToken': token.id,
})

self.assertEqual(r.status_code, 302) # 302 because we redirect after a post.

# Get the stripe event so we can post it to the webhook
# We don't know the event ID, so we have to get the latest ones, then filter...
events = stripe.Event.all()
event = None
for obj in events.data:
if obj.data.object.card.fingerprint == token.card.fingerprint:
event = obj
break
self.assertIsNotNone(event, msg="Unable to find correct event for token: %s" % token.card.fingerprint)

# Finally, we can test the webhook!
r = self.client.post('/donate/callbacks/stripe/',
data=simplejson.dumps(event),
content_type='application/json')

# Does it return properly?
self.assertEqual(r.status_code, 200)

关于django - 如何使用模拟数据测试 Stripe Webhook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23706094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com