stripe: Nicknames are optional on plans.

This commit is contained in:
Alex Vandiver 2023-06-27 16:39:18 +00:00 committed by Tim Abbott
parent 8b42f7ccfa
commit bc3c2476d2
3 changed files with 126 additions and 4 deletions

View File

@ -0,0 +1,102 @@
{
"id": "evt_1DeFYZDEQaroqDjsX811NXeq",
"object": "event",
"api_version": "2018-11-08",
"created": 1544074671,
"data": {
"object": {
"id": "sub_E6STM5w5EX3K28",
"object": "subscription",
"application_fee_percent": null,
"billing": "send_invoice",
"billing_cycle_anchor": 1544074670,
"cancel_at_period_end": false,
"canceled_at": null,
"created": 1544074670,
"current_period_end": 1575610670,
"current_period_start": 1544074670,
"customer": "cus_00000000000000",
"days_until_due": 7,
"default_source": null,
"discount": null,
"ended_at": null,
"items": {
"object": "list",
"data": [
{
"id": "si_E6STR3cU0bwWFG",
"object": "subscription_item",
"created": 1544074671,
"metadata": {
},
"plan": {
"id": "plan_E6SQ6RAtmLVtzg",
"object": "plan",
"active": true,
"aggregate_usage": null,
"amount": 100,
"billing_scheme": "per_unit",
"created": 1544074513,
"currency": "usd",
"interval": "year",
"interval_count": 1,
"livemode": true,
"metadata": {
},
"nickname": null,
"product": "prod_E6SPZ5RKfKClNL",
"tiers": null,
"tiers_mode": null,
"transform_usage": null,
"trial_period_days": null,
"usage_type": "licensed"
},
"quantity": 800,
"subscription": "sub_E6STM5w5EX3K28"
}
],
"has_more": false,
"total_count": 1,
"url": "/v1/subscription_items?subscription=sub_E6STM5w5EX3K28"
},
"livemode": true,
"metadata": {
},
"plan": {
"id": "plan_E6SQ6RAtmLVtzg",
"object": "plan",
"active": true,
"aggregate_usage": null,
"amount": 100,
"billing_scheme": "per_unit",
"created": 1544074513,
"currency": "usd",
"interval": "year",
"interval_count": 1,
"livemode": true,
"metadata": {
},
"nickname": null,
"product": "prod_E6SPZ5RKfKClNL",
"tiers": null,
"tiers_mode": null,
"transform_usage": null,
"trial_period_days": null,
"usage_type": "licensed"
},
"quantity": 800,
"start": 1544074670,
"status": "active",
"tax_percent": null,
"trial_end": null,
"trial_start": null
}
},
"livemode": true,
"pending_webhooks": 1,
"request": {
"id": "req_J85F0AkACDDTBU",
"idempotency_key": null
},
"type": "customer.subscription.created"
}

View File

@ -111,6 +111,20 @@ Billing method: send invoice"""
content_type="application/x-www-form-urlencoded",
)
def test_customer_subscription_created_no_nickname(self) -> None:
expected_topic = "cus_00000000000000"
expected_message = """\
[Subscription](https://dashboard.stripe.com/subscriptions/sub_E6STM5w5EX3K28) created
Plan: https://dashboard.stripe.com/plans/plan_E6SQ6RAtmLVtzg
Quantity: 800
Billing method: send invoice"""
self.check_webhook(
"customer_subscription_created_no_nickname",
expected_topic,
expected_message,
content_type="application/x-www-form-urlencoded",
)
def test_customer_subscription_deleted(self) -> None:
expected_topic = "cus_00000000000000"
expected_message = (

View File

@ -196,10 +196,16 @@ def topic_and_body(payload: WildValue) -> Tuple[str, str]:
)
if event == "created":
if object_["plan"]:
nickname = object_["plan"]["nickname"].tame(check_none_or(check_string))
if nickname is not None:
body += "\nPlan: [{plan_nickname}](https://dashboard.stripe.com/plans/{plan_id})".format(
plan_nickname=object_["plan"]["nickname"].tame(check_string),
plan_id=object_["plan"]["id"].tame(check_string),
)
else:
body += "\nPlan: https://dashboard.stripe.com/plans/{plan_id}".format(
plan_id=object_["plan"]["id"].tame(check_string),
)
if object_["quantity"]:
body += "\nQuantity: {}".format(object_["quantity"].tame(check_int))
if "billing" in object_: # nocoverage