mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	billing: Update test_replace_payment_source to use mock_stripe.
This commit is contained in:
		@@ -0,0 +1,61 @@
 | 
			
		||||
{
 | 
			
		||||
  "account_balance": 0,
 | 
			
		||||
  "created": 1543394651,
 | 
			
		||||
  "currency": null,
 | 
			
		||||
  "default_source": "card_NORMALIZED00000000000001",
 | 
			
		||||
  "delinquent": false,
 | 
			
		||||
  "description": "zulip (Zulip Dev)",
 | 
			
		||||
  "discount": null,
 | 
			
		||||
  "email": "hamlet@zulip.com",
 | 
			
		||||
  "id": "cus_NORMALIZED0001",
 | 
			
		||||
  "invoice_prefix": "NORMA01",
 | 
			
		||||
  "livemode": false,
 | 
			
		||||
  "metadata": {
 | 
			
		||||
    "realm_id": "1",
 | 
			
		||||
    "realm_str": "zulip"
 | 
			
		||||
  },
 | 
			
		||||
  "object": "customer",
 | 
			
		||||
  "shipping": null,
 | 
			
		||||
  "sources": {
 | 
			
		||||
    "data": [
 | 
			
		||||
      {
 | 
			
		||||
        "address_city": "Pacific",
 | 
			
		||||
        "address_country": "United States",
 | 
			
		||||
        "address_line1": "Under the sea,",
 | 
			
		||||
        "address_line1_check": "pass",
 | 
			
		||||
        "address_line2": null,
 | 
			
		||||
        "address_state": null,
 | 
			
		||||
        "address_zip": "33333",
 | 
			
		||||
        "address_zip_check": "pass",
 | 
			
		||||
        "brand": "Visa",
 | 
			
		||||
        "country": "US",
 | 
			
		||||
        "customer": "cus_NORMALIZED0001",
 | 
			
		||||
        "cvc_check": "pass",
 | 
			
		||||
        "dynamic_last4": null,
 | 
			
		||||
        "exp_month": 3,
 | 
			
		||||
        "exp_year": 2033,
 | 
			
		||||
        "fingerprint": "NORMALIZED000001",
 | 
			
		||||
        "funding": "credit",
 | 
			
		||||
        "id": "card_NORMALIZED00000000000001",
 | 
			
		||||
        "last4": "4242",
 | 
			
		||||
        "metadata": {},
 | 
			
		||||
        "name": "Ada Starr",
 | 
			
		||||
        "object": "card",
 | 
			
		||||
        "tokenization_method": null
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "has_more": false,
 | 
			
		||||
    "object": "list",
 | 
			
		||||
    "total_count": 1,
 | 
			
		||||
    "url": "/v1/customers/cus_NORMALIZED0001/sources"
 | 
			
		||||
  },
 | 
			
		||||
  "subscriptions": {
 | 
			
		||||
    "data": [],
 | 
			
		||||
    "has_more": false,
 | 
			
		||||
    "object": "list",
 | 
			
		||||
    "total_count": 0,
 | 
			
		||||
    "url": "/v1/customers/cus_NORMALIZED0001/subscriptions"
 | 
			
		||||
  },
 | 
			
		||||
  "tax_info": null,
 | 
			
		||||
  "tax_info_verification": null
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,169 @@
 | 
			
		||||
{
 | 
			
		||||
  "account_balance": 0,
 | 
			
		||||
  "created": 1543394651,
 | 
			
		||||
  "currency": "usd",
 | 
			
		||||
  "default_source": {
 | 
			
		||||
    "address_city": "Pacific",
 | 
			
		||||
    "address_country": "United States",
 | 
			
		||||
    "address_line1": "Under the sea,",
 | 
			
		||||
    "address_line1_check": "pass",
 | 
			
		||||
    "address_line2": null,
 | 
			
		||||
    "address_state": null,
 | 
			
		||||
    "address_zip": "33333",
 | 
			
		||||
    "address_zip_check": "pass",
 | 
			
		||||
    "brand": "Visa",
 | 
			
		||||
    "country": "US",
 | 
			
		||||
    "customer": "cus_NORMALIZED0001",
 | 
			
		||||
    "cvc_check": "pass",
 | 
			
		||||
    "dynamic_last4": null,
 | 
			
		||||
    "exp_month": 3,
 | 
			
		||||
    "exp_year": 2033,
 | 
			
		||||
    "fingerprint": "NORMALIZED000001",
 | 
			
		||||
    "funding": "credit",
 | 
			
		||||
    "id": "card_NORMALIZED00000000000001",
 | 
			
		||||
    "last4": "4242",
 | 
			
		||||
    "metadata": {},
 | 
			
		||||
    "name": "Ada Starr",
 | 
			
		||||
    "object": "card",
 | 
			
		||||
    "tokenization_method": null
 | 
			
		||||
  },
 | 
			
		||||
  "delinquent": false,
 | 
			
		||||
  "description": "zulip (Zulip Dev)",
 | 
			
		||||
  "discount": null,
 | 
			
		||||
  "email": "hamlet@zulip.com",
 | 
			
		||||
  "id": "cus_NORMALIZED0001",
 | 
			
		||||
  "invoice_prefix": "NORMA01",
 | 
			
		||||
  "livemode": false,
 | 
			
		||||
  "metadata": {
 | 
			
		||||
    "realm_id": "1",
 | 
			
		||||
    "realm_str": "zulip"
 | 
			
		||||
  },
 | 
			
		||||
  "object": "customer",
 | 
			
		||||
  "shipping": null,
 | 
			
		||||
  "sources": {
 | 
			
		||||
    "data": [
 | 
			
		||||
      {
 | 
			
		||||
        "address_city": "Pacific",
 | 
			
		||||
        "address_country": "United States",
 | 
			
		||||
        "address_line1": "Under the sea,",
 | 
			
		||||
        "address_line1_check": "pass",
 | 
			
		||||
        "address_line2": null,
 | 
			
		||||
        "address_state": null,
 | 
			
		||||
        "address_zip": "33333",
 | 
			
		||||
        "address_zip_check": "pass",
 | 
			
		||||
        "brand": "Visa",
 | 
			
		||||
        "country": "US",
 | 
			
		||||
        "customer": "cus_NORMALIZED0001",
 | 
			
		||||
        "cvc_check": "pass",
 | 
			
		||||
        "dynamic_last4": null,
 | 
			
		||||
        "exp_month": 3,
 | 
			
		||||
        "exp_year": 2033,
 | 
			
		||||
        "fingerprint": "NORMALIZED000001",
 | 
			
		||||
        "funding": "credit",
 | 
			
		||||
        "id": "card_NORMALIZED00000000000001",
 | 
			
		||||
        "last4": "4242",
 | 
			
		||||
        "metadata": {},
 | 
			
		||||
        "name": "Ada Starr",
 | 
			
		||||
        "object": "card",
 | 
			
		||||
        "tokenization_method": null
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "has_more": false,
 | 
			
		||||
    "object": "list",
 | 
			
		||||
    "total_count": 1,
 | 
			
		||||
    "url": "/v1/customers/cus_NORMALIZED0001/sources"
 | 
			
		||||
  },
 | 
			
		||||
  "subscriptions": {
 | 
			
		||||
    "data": [
 | 
			
		||||
      {
 | 
			
		||||
        "application_fee_percent": null,
 | 
			
		||||
        "billing": "charge_automatically",
 | 
			
		||||
        "billing_cycle_anchor": 1543394651,
 | 
			
		||||
        "cancel_at_period_end": false,
 | 
			
		||||
        "canceled_at": null,
 | 
			
		||||
        "created": 1543394651,
 | 
			
		||||
        "current_period_end": 1574930651,
 | 
			
		||||
        "current_period_start": 1543394651,
 | 
			
		||||
        "customer": "cus_NORMALIZED0001",
 | 
			
		||||
        "days_until_due": null,
 | 
			
		||||
        "default_source": null,
 | 
			
		||||
        "discount": null,
 | 
			
		||||
        "ended_at": null,
 | 
			
		||||
        "id": "sub_NORMALIZED0001",
 | 
			
		||||
        "items": {
 | 
			
		||||
          "data": [
 | 
			
		||||
            {
 | 
			
		||||
              "created": 1543394652,
 | 
			
		||||
              "id": "si_NORMALIZED0001",
 | 
			
		||||
              "metadata": {},
 | 
			
		||||
              "object": "subscription_item",
 | 
			
		||||
              "plan": {
 | 
			
		||||
                "active": true,
 | 
			
		||||
                "aggregate_usage": null,
 | 
			
		||||
                "amount": 8000,
 | 
			
		||||
                "billing_scheme": "per_unit",
 | 
			
		||||
                "created": 1539831971,
 | 
			
		||||
                "currency": "usd",
 | 
			
		||||
                "id": "plan_Do3xCvbzO89OsR",
 | 
			
		||||
                "interval": "year",
 | 
			
		||||
                "interval_count": 1,
 | 
			
		||||
                "livemode": false,
 | 
			
		||||
                "metadata": {},
 | 
			
		||||
                "nickname": "annual",
 | 
			
		||||
                "object": "plan",
 | 
			
		||||
                "product": "prod_Do3x494SetTDpx",
 | 
			
		||||
                "tiers": null,
 | 
			
		||||
                "tiers_mode": null,
 | 
			
		||||
                "transform_usage": null,
 | 
			
		||||
                "trial_period_days": null,
 | 
			
		||||
                "usage_type": "licensed"
 | 
			
		||||
              },
 | 
			
		||||
              "quantity": 8,
 | 
			
		||||
              "subscription": "sub_NORMALIZED0001"
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "has_more": false,
 | 
			
		||||
          "object": "list",
 | 
			
		||||
          "total_count": 1,
 | 
			
		||||
          "url": "/v1/subscription_items?subscription=sub_NORMALIZED0001"
 | 
			
		||||
        },
 | 
			
		||||
        "livemode": false,
 | 
			
		||||
        "metadata": {},
 | 
			
		||||
        "object": "subscription",
 | 
			
		||||
        "plan": {
 | 
			
		||||
          "active": true,
 | 
			
		||||
          "aggregate_usage": null,
 | 
			
		||||
          "amount": 8000,
 | 
			
		||||
          "billing_scheme": "per_unit",
 | 
			
		||||
          "created": 1539831971,
 | 
			
		||||
          "currency": "usd",
 | 
			
		||||
          "id": "plan_Do3xCvbzO89OsR",
 | 
			
		||||
          "interval": "year",
 | 
			
		||||
          "interval_count": 1,
 | 
			
		||||
          "livemode": false,
 | 
			
		||||
          "metadata": {},
 | 
			
		||||
          "nickname": "annual",
 | 
			
		||||
          "object": "plan",
 | 
			
		||||
          "product": "prod_Do3x494SetTDpx",
 | 
			
		||||
          "tiers": null,
 | 
			
		||||
          "tiers_mode": null,
 | 
			
		||||
          "transform_usage": null,
 | 
			
		||||
          "trial_period_days": null,
 | 
			
		||||
          "usage_type": "licensed"
 | 
			
		||||
        },
 | 
			
		||||
        "quantity": 8,
 | 
			
		||||
        "start": 1543394651,
 | 
			
		||||
        "status": "active",
 | 
			
		||||
        "tax_percent": 0.0,
 | 
			
		||||
        "trial_end": null,
 | 
			
		||||
        "trial_start": null
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "has_more": false,
 | 
			
		||||
    "object": "list",
 | 
			
		||||
    "total_count": 1,
 | 
			
		||||
    "url": "/v1/customers/cus_NORMALIZED0001/subscriptions"
 | 
			
		||||
  },
 | 
			
		||||
  "tax_info": null,
 | 
			
		||||
  "tax_info_verification": null
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,169 @@
 | 
			
		||||
{
 | 
			
		||||
  "account_balance": 0,
 | 
			
		||||
  "created": 1543394651,
 | 
			
		||||
  "currency": "usd",
 | 
			
		||||
  "default_source": {
 | 
			
		||||
    "address_city": "Pacific",
 | 
			
		||||
    "address_country": "United States",
 | 
			
		||||
    "address_line1": "Under the sea,",
 | 
			
		||||
    "address_line1_check": "pass",
 | 
			
		||||
    "address_line2": null,
 | 
			
		||||
    "address_state": null,
 | 
			
		||||
    "address_zip": "33333",
 | 
			
		||||
    "address_zip_check": "pass",
 | 
			
		||||
    "brand": "MasterCard",
 | 
			
		||||
    "country": "US",
 | 
			
		||||
    "customer": "cus_NORMALIZED0001",
 | 
			
		||||
    "cvc_check": "pass",
 | 
			
		||||
    "dynamic_last4": null,
 | 
			
		||||
    "exp_month": 3,
 | 
			
		||||
    "exp_year": 2033,
 | 
			
		||||
    "fingerprint": "NORMALIZED000002",
 | 
			
		||||
    "funding": "credit",
 | 
			
		||||
    "id": "card_NORMALIZED00000000000002",
 | 
			
		||||
    "last4": "4444",
 | 
			
		||||
    "metadata": {},
 | 
			
		||||
    "name": "Ada Starr",
 | 
			
		||||
    "object": "card",
 | 
			
		||||
    "tokenization_method": null
 | 
			
		||||
  },
 | 
			
		||||
  "delinquent": false,
 | 
			
		||||
  "description": "zulip (Zulip Dev)",
 | 
			
		||||
  "discount": null,
 | 
			
		||||
  "email": "hamlet@zulip.com",
 | 
			
		||||
  "id": "cus_NORMALIZED0001",
 | 
			
		||||
  "invoice_prefix": "NORMA01",
 | 
			
		||||
  "livemode": false,
 | 
			
		||||
  "metadata": {
 | 
			
		||||
    "realm_id": "1",
 | 
			
		||||
    "realm_str": "zulip"
 | 
			
		||||
  },
 | 
			
		||||
  "object": "customer",
 | 
			
		||||
  "shipping": null,
 | 
			
		||||
  "sources": {
 | 
			
		||||
    "data": [
 | 
			
		||||
      {
 | 
			
		||||
        "address_city": "Pacific",
 | 
			
		||||
        "address_country": "United States",
 | 
			
		||||
        "address_line1": "Under the sea,",
 | 
			
		||||
        "address_line1_check": "pass",
 | 
			
		||||
        "address_line2": null,
 | 
			
		||||
        "address_state": null,
 | 
			
		||||
        "address_zip": "33333",
 | 
			
		||||
        "address_zip_check": "pass",
 | 
			
		||||
        "brand": "MasterCard",
 | 
			
		||||
        "country": "US",
 | 
			
		||||
        "customer": "cus_NORMALIZED0001",
 | 
			
		||||
        "cvc_check": "pass",
 | 
			
		||||
        "dynamic_last4": null,
 | 
			
		||||
        "exp_month": 3,
 | 
			
		||||
        "exp_year": 2033,
 | 
			
		||||
        "fingerprint": "NORMALIZED000002",
 | 
			
		||||
        "funding": "credit",
 | 
			
		||||
        "id": "card_NORMALIZED00000000000002",
 | 
			
		||||
        "last4": "4444",
 | 
			
		||||
        "metadata": {},
 | 
			
		||||
        "name": "Ada Starr",
 | 
			
		||||
        "object": "card",
 | 
			
		||||
        "tokenization_method": null
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "has_more": false,
 | 
			
		||||
    "object": "list",
 | 
			
		||||
    "total_count": 1,
 | 
			
		||||
    "url": "/v1/customers/cus_NORMALIZED0001/sources"
 | 
			
		||||
  },
 | 
			
		||||
  "subscriptions": {
 | 
			
		||||
    "data": [
 | 
			
		||||
      {
 | 
			
		||||
        "application_fee_percent": null,
 | 
			
		||||
        "billing": "charge_automatically",
 | 
			
		||||
        "billing_cycle_anchor": 1543394651,
 | 
			
		||||
        "cancel_at_period_end": false,
 | 
			
		||||
        "canceled_at": null,
 | 
			
		||||
        "created": 1543394651,
 | 
			
		||||
        "current_period_end": 1574930651,
 | 
			
		||||
        "current_period_start": 1543394651,
 | 
			
		||||
        "customer": "cus_NORMALIZED0001",
 | 
			
		||||
        "days_until_due": null,
 | 
			
		||||
        "default_source": null,
 | 
			
		||||
        "discount": null,
 | 
			
		||||
        "ended_at": null,
 | 
			
		||||
        "id": "sub_NORMALIZED0001",
 | 
			
		||||
        "items": {
 | 
			
		||||
          "data": [
 | 
			
		||||
            {
 | 
			
		||||
              "created": 1543394652,
 | 
			
		||||
              "id": "si_NORMALIZED0001",
 | 
			
		||||
              "metadata": {},
 | 
			
		||||
              "object": "subscription_item",
 | 
			
		||||
              "plan": {
 | 
			
		||||
                "active": true,
 | 
			
		||||
                "aggregate_usage": null,
 | 
			
		||||
                "amount": 8000,
 | 
			
		||||
                "billing_scheme": "per_unit",
 | 
			
		||||
                "created": 1539831971,
 | 
			
		||||
                "currency": "usd",
 | 
			
		||||
                "id": "plan_Do3xCvbzO89OsR",
 | 
			
		||||
                "interval": "year",
 | 
			
		||||
                "interval_count": 1,
 | 
			
		||||
                "livemode": false,
 | 
			
		||||
                "metadata": {},
 | 
			
		||||
                "nickname": "annual",
 | 
			
		||||
                "object": "plan",
 | 
			
		||||
                "product": "prod_Do3x494SetTDpx",
 | 
			
		||||
                "tiers": null,
 | 
			
		||||
                "tiers_mode": null,
 | 
			
		||||
                "transform_usage": null,
 | 
			
		||||
                "trial_period_days": null,
 | 
			
		||||
                "usage_type": "licensed"
 | 
			
		||||
              },
 | 
			
		||||
              "quantity": 8,
 | 
			
		||||
              "subscription": "sub_NORMALIZED0001"
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "has_more": false,
 | 
			
		||||
          "object": "list",
 | 
			
		||||
          "total_count": 1,
 | 
			
		||||
          "url": "/v1/subscription_items?subscription=sub_NORMALIZED0001"
 | 
			
		||||
        },
 | 
			
		||||
        "livemode": false,
 | 
			
		||||
        "metadata": {},
 | 
			
		||||
        "object": "subscription",
 | 
			
		||||
        "plan": {
 | 
			
		||||
          "active": true,
 | 
			
		||||
          "aggregate_usage": null,
 | 
			
		||||
          "amount": 8000,
 | 
			
		||||
          "billing_scheme": "per_unit",
 | 
			
		||||
          "created": 1539831971,
 | 
			
		||||
          "currency": "usd",
 | 
			
		||||
          "id": "plan_Do3xCvbzO89OsR",
 | 
			
		||||
          "interval": "year",
 | 
			
		||||
          "interval_count": 1,
 | 
			
		||||
          "livemode": false,
 | 
			
		||||
          "metadata": {},
 | 
			
		||||
          "nickname": "annual",
 | 
			
		||||
          "object": "plan",
 | 
			
		||||
          "product": "prod_Do3x494SetTDpx",
 | 
			
		||||
          "tiers": null,
 | 
			
		||||
          "tiers_mode": null,
 | 
			
		||||
          "transform_usage": null,
 | 
			
		||||
          "trial_period_days": null,
 | 
			
		||||
          "usage_type": "licensed"
 | 
			
		||||
        },
 | 
			
		||||
        "quantity": 8,
 | 
			
		||||
        "start": 1543394651,
 | 
			
		||||
        "status": "active",
 | 
			
		||||
        "tax_percent": 0.0,
 | 
			
		||||
        "trial_end": null,
 | 
			
		||||
        "trial_start": null
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "has_more": false,
 | 
			
		||||
    "object": "list",
 | 
			
		||||
    "total_count": 1,
 | 
			
		||||
    "url": "/v1/customers/cus_NORMALIZED0001/subscriptions"
 | 
			
		||||
  },
 | 
			
		||||
  "tax_info": null,
 | 
			
		||||
  "tax_info_verification": null
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,169 @@
 | 
			
		||||
{
 | 
			
		||||
  "account_balance": 0,
 | 
			
		||||
  "created": 1543394651,
 | 
			
		||||
  "currency": "usd",
 | 
			
		||||
  "default_source": {
 | 
			
		||||
    "address_city": "Pacific",
 | 
			
		||||
    "address_country": "United States",
 | 
			
		||||
    "address_line1": "Under the sea,",
 | 
			
		||||
    "address_line1_check": "pass",
 | 
			
		||||
    "address_line2": null,
 | 
			
		||||
    "address_state": null,
 | 
			
		||||
    "address_zip": "33333",
 | 
			
		||||
    "address_zip_check": "pass",
 | 
			
		||||
    "brand": "MasterCard",
 | 
			
		||||
    "country": "US",
 | 
			
		||||
    "customer": "cus_NORMALIZED0001",
 | 
			
		||||
    "cvc_check": "pass",
 | 
			
		||||
    "dynamic_last4": null,
 | 
			
		||||
    "exp_month": 3,
 | 
			
		||||
    "exp_year": 2033,
 | 
			
		||||
    "fingerprint": "NORMALIZED000002",
 | 
			
		||||
    "funding": "credit",
 | 
			
		||||
    "id": "card_NORMALIZED00000000000002",
 | 
			
		||||
    "last4": "4444",
 | 
			
		||||
    "metadata": {},
 | 
			
		||||
    "name": "Ada Starr",
 | 
			
		||||
    "object": "card",
 | 
			
		||||
    "tokenization_method": null
 | 
			
		||||
  },
 | 
			
		||||
  "delinquent": false,
 | 
			
		||||
  "description": "zulip (Zulip Dev)",
 | 
			
		||||
  "discount": null,
 | 
			
		||||
  "email": "hamlet@zulip.com",
 | 
			
		||||
  "id": "cus_NORMALIZED0001",
 | 
			
		||||
  "invoice_prefix": "NORMA01",
 | 
			
		||||
  "livemode": false,
 | 
			
		||||
  "metadata": {
 | 
			
		||||
    "realm_id": "1",
 | 
			
		||||
    "realm_str": "zulip"
 | 
			
		||||
  },
 | 
			
		||||
  "object": "customer",
 | 
			
		||||
  "shipping": null,
 | 
			
		||||
  "sources": {
 | 
			
		||||
    "data": [
 | 
			
		||||
      {
 | 
			
		||||
        "address_city": "Pacific",
 | 
			
		||||
        "address_country": "United States",
 | 
			
		||||
        "address_line1": "Under the sea,",
 | 
			
		||||
        "address_line1_check": "pass",
 | 
			
		||||
        "address_line2": null,
 | 
			
		||||
        "address_state": null,
 | 
			
		||||
        "address_zip": "33333",
 | 
			
		||||
        "address_zip_check": "pass",
 | 
			
		||||
        "brand": "MasterCard",
 | 
			
		||||
        "country": "US",
 | 
			
		||||
        "customer": "cus_NORMALIZED0001",
 | 
			
		||||
        "cvc_check": "pass",
 | 
			
		||||
        "dynamic_last4": null,
 | 
			
		||||
        "exp_month": 3,
 | 
			
		||||
        "exp_year": 2033,
 | 
			
		||||
        "fingerprint": "NORMALIZED000002",
 | 
			
		||||
        "funding": "credit",
 | 
			
		||||
        "id": "card_NORMALIZED00000000000002",
 | 
			
		||||
        "last4": "4444",
 | 
			
		||||
        "metadata": {},
 | 
			
		||||
        "name": "Ada Starr",
 | 
			
		||||
        "object": "card",
 | 
			
		||||
        "tokenization_method": null
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "has_more": false,
 | 
			
		||||
    "object": "list",
 | 
			
		||||
    "total_count": 1,
 | 
			
		||||
    "url": "/v1/customers/cus_NORMALIZED0001/sources"
 | 
			
		||||
  },
 | 
			
		||||
  "subscriptions": {
 | 
			
		||||
    "data": [
 | 
			
		||||
      {
 | 
			
		||||
        "application_fee_percent": null,
 | 
			
		||||
        "billing": "charge_automatically",
 | 
			
		||||
        "billing_cycle_anchor": 1543394651,
 | 
			
		||||
        "cancel_at_period_end": false,
 | 
			
		||||
        "canceled_at": null,
 | 
			
		||||
        "created": 1543394651,
 | 
			
		||||
        "current_period_end": 1574930651,
 | 
			
		||||
        "current_period_start": 1543394651,
 | 
			
		||||
        "customer": "cus_NORMALIZED0001",
 | 
			
		||||
        "days_until_due": null,
 | 
			
		||||
        "default_source": null,
 | 
			
		||||
        "discount": null,
 | 
			
		||||
        "ended_at": null,
 | 
			
		||||
        "id": "sub_NORMALIZED0001",
 | 
			
		||||
        "items": {
 | 
			
		||||
          "data": [
 | 
			
		||||
            {
 | 
			
		||||
              "created": 1543394652,
 | 
			
		||||
              "id": "si_NORMALIZED0001",
 | 
			
		||||
              "metadata": {},
 | 
			
		||||
              "object": "subscription_item",
 | 
			
		||||
              "plan": {
 | 
			
		||||
                "active": true,
 | 
			
		||||
                "aggregate_usage": null,
 | 
			
		||||
                "amount": 8000,
 | 
			
		||||
                "billing_scheme": "per_unit",
 | 
			
		||||
                "created": 1539831971,
 | 
			
		||||
                "currency": "usd",
 | 
			
		||||
                "id": "plan_Do3xCvbzO89OsR",
 | 
			
		||||
                "interval": "year",
 | 
			
		||||
                "interval_count": 1,
 | 
			
		||||
                "livemode": false,
 | 
			
		||||
                "metadata": {},
 | 
			
		||||
                "nickname": "annual",
 | 
			
		||||
                "object": "plan",
 | 
			
		||||
                "product": "prod_Do3x494SetTDpx",
 | 
			
		||||
                "tiers": null,
 | 
			
		||||
                "tiers_mode": null,
 | 
			
		||||
                "transform_usage": null,
 | 
			
		||||
                "trial_period_days": null,
 | 
			
		||||
                "usage_type": "licensed"
 | 
			
		||||
              },
 | 
			
		||||
              "quantity": 8,
 | 
			
		||||
              "subscription": "sub_NORMALIZED0001"
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "has_more": false,
 | 
			
		||||
          "object": "list",
 | 
			
		||||
          "total_count": 1,
 | 
			
		||||
          "url": "/v1/subscription_items?subscription=sub_NORMALIZED0001"
 | 
			
		||||
        },
 | 
			
		||||
        "livemode": false,
 | 
			
		||||
        "metadata": {},
 | 
			
		||||
        "object": "subscription",
 | 
			
		||||
        "plan": {
 | 
			
		||||
          "active": true,
 | 
			
		||||
          "aggregate_usage": null,
 | 
			
		||||
          "amount": 8000,
 | 
			
		||||
          "billing_scheme": "per_unit",
 | 
			
		||||
          "created": 1539831971,
 | 
			
		||||
          "currency": "usd",
 | 
			
		||||
          "id": "plan_Do3xCvbzO89OsR",
 | 
			
		||||
          "interval": "year",
 | 
			
		||||
          "interval_count": 1,
 | 
			
		||||
          "livemode": false,
 | 
			
		||||
          "metadata": {},
 | 
			
		||||
          "nickname": "annual",
 | 
			
		||||
          "object": "plan",
 | 
			
		||||
          "product": "prod_Do3x494SetTDpx",
 | 
			
		||||
          "tiers": null,
 | 
			
		||||
          "tiers_mode": null,
 | 
			
		||||
          "transform_usage": null,
 | 
			
		||||
          "trial_period_days": null,
 | 
			
		||||
          "usage_type": "licensed"
 | 
			
		||||
        },
 | 
			
		||||
        "quantity": 8,
 | 
			
		||||
        "start": 1543394651,
 | 
			
		||||
        "status": "active",
 | 
			
		||||
        "tax_percent": 0.0,
 | 
			
		||||
        "trial_end": null,
 | 
			
		||||
        "trial_start": null
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "has_more": false,
 | 
			
		||||
    "object": "list",
 | 
			
		||||
    "total_count": 1,
 | 
			
		||||
    "url": "/v1/customers/cus_NORMALIZED0001/subscriptions"
 | 
			
		||||
  },
 | 
			
		||||
  "tax_info": null,
 | 
			
		||||
  "tax_info_verification": null
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,169 @@
 | 
			
		||||
{
 | 
			
		||||
  "account_balance": 0,
 | 
			
		||||
  "created": 1543394651,
 | 
			
		||||
  "currency": "usd",
 | 
			
		||||
  "default_source": {
 | 
			
		||||
    "address_city": "Pacific",
 | 
			
		||||
    "address_country": "United States",
 | 
			
		||||
    "address_line1": "Under the sea,",
 | 
			
		||||
    "address_line1_check": "pass",
 | 
			
		||||
    "address_line2": null,
 | 
			
		||||
    "address_state": null,
 | 
			
		||||
    "address_zip": "33333",
 | 
			
		||||
    "address_zip_check": "pass",
 | 
			
		||||
    "brand": "MasterCard",
 | 
			
		||||
    "country": "US",
 | 
			
		||||
    "customer": "cus_NORMALIZED0001",
 | 
			
		||||
    "cvc_check": "pass",
 | 
			
		||||
    "dynamic_last4": null,
 | 
			
		||||
    "exp_month": 3,
 | 
			
		||||
    "exp_year": 2033,
 | 
			
		||||
    "fingerprint": "NORMALIZED000002",
 | 
			
		||||
    "funding": "credit",
 | 
			
		||||
    "id": "card_NORMALIZED00000000000002",
 | 
			
		||||
    "last4": "4444",
 | 
			
		||||
    "metadata": {},
 | 
			
		||||
    "name": "Ada Starr",
 | 
			
		||||
    "object": "card",
 | 
			
		||||
    "tokenization_method": null
 | 
			
		||||
  },
 | 
			
		||||
  "delinquent": false,
 | 
			
		||||
  "description": "zulip (Zulip Dev)",
 | 
			
		||||
  "discount": null,
 | 
			
		||||
  "email": "hamlet@zulip.com",
 | 
			
		||||
  "id": "cus_NORMALIZED0001",
 | 
			
		||||
  "invoice_prefix": "NORMA01",
 | 
			
		||||
  "livemode": false,
 | 
			
		||||
  "metadata": {
 | 
			
		||||
    "realm_id": "1",
 | 
			
		||||
    "realm_str": "zulip"
 | 
			
		||||
  },
 | 
			
		||||
  "object": "customer",
 | 
			
		||||
  "shipping": null,
 | 
			
		||||
  "sources": {
 | 
			
		||||
    "data": [
 | 
			
		||||
      {
 | 
			
		||||
        "address_city": "Pacific",
 | 
			
		||||
        "address_country": "United States",
 | 
			
		||||
        "address_line1": "Under the sea,",
 | 
			
		||||
        "address_line1_check": "pass",
 | 
			
		||||
        "address_line2": null,
 | 
			
		||||
        "address_state": null,
 | 
			
		||||
        "address_zip": "33333",
 | 
			
		||||
        "address_zip_check": "pass",
 | 
			
		||||
        "brand": "MasterCard",
 | 
			
		||||
        "country": "US",
 | 
			
		||||
        "customer": "cus_NORMALIZED0001",
 | 
			
		||||
        "cvc_check": "pass",
 | 
			
		||||
        "dynamic_last4": null,
 | 
			
		||||
        "exp_month": 3,
 | 
			
		||||
        "exp_year": 2033,
 | 
			
		||||
        "fingerprint": "NORMALIZED000002",
 | 
			
		||||
        "funding": "credit",
 | 
			
		||||
        "id": "card_NORMALIZED00000000000002",
 | 
			
		||||
        "last4": "4444",
 | 
			
		||||
        "metadata": {},
 | 
			
		||||
        "name": "Ada Starr",
 | 
			
		||||
        "object": "card",
 | 
			
		||||
        "tokenization_method": null
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "has_more": false,
 | 
			
		||||
    "object": "list",
 | 
			
		||||
    "total_count": 1,
 | 
			
		||||
    "url": "/v1/customers/cus_NORMALIZED0001/sources"
 | 
			
		||||
  },
 | 
			
		||||
  "subscriptions": {
 | 
			
		||||
    "data": [
 | 
			
		||||
      {
 | 
			
		||||
        "application_fee_percent": null,
 | 
			
		||||
        "billing": "charge_automatically",
 | 
			
		||||
        "billing_cycle_anchor": 1543394651,
 | 
			
		||||
        "cancel_at_period_end": false,
 | 
			
		||||
        "canceled_at": null,
 | 
			
		||||
        "created": 1543394651,
 | 
			
		||||
        "current_period_end": 1574930651,
 | 
			
		||||
        "current_period_start": 1543394651,
 | 
			
		||||
        "customer": "cus_NORMALIZED0001",
 | 
			
		||||
        "days_until_due": null,
 | 
			
		||||
        "default_source": null,
 | 
			
		||||
        "discount": null,
 | 
			
		||||
        "ended_at": null,
 | 
			
		||||
        "id": "sub_NORMALIZED0001",
 | 
			
		||||
        "items": {
 | 
			
		||||
          "data": [
 | 
			
		||||
            {
 | 
			
		||||
              "created": 1543394652,
 | 
			
		||||
              "id": "si_NORMALIZED0001",
 | 
			
		||||
              "metadata": {},
 | 
			
		||||
              "object": "subscription_item",
 | 
			
		||||
              "plan": {
 | 
			
		||||
                "active": true,
 | 
			
		||||
                "aggregate_usage": null,
 | 
			
		||||
                "amount": 8000,
 | 
			
		||||
                "billing_scheme": "per_unit",
 | 
			
		||||
                "created": 1539831971,
 | 
			
		||||
                "currency": "usd",
 | 
			
		||||
                "id": "plan_Do3xCvbzO89OsR",
 | 
			
		||||
                "interval": "year",
 | 
			
		||||
                "interval_count": 1,
 | 
			
		||||
                "livemode": false,
 | 
			
		||||
                "metadata": {},
 | 
			
		||||
                "nickname": "annual",
 | 
			
		||||
                "object": "plan",
 | 
			
		||||
                "product": "prod_Do3x494SetTDpx",
 | 
			
		||||
                "tiers": null,
 | 
			
		||||
                "tiers_mode": null,
 | 
			
		||||
                "transform_usage": null,
 | 
			
		||||
                "trial_period_days": null,
 | 
			
		||||
                "usage_type": "licensed"
 | 
			
		||||
              },
 | 
			
		||||
              "quantity": 8,
 | 
			
		||||
              "subscription": "sub_NORMALIZED0001"
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "has_more": false,
 | 
			
		||||
          "object": "list",
 | 
			
		||||
          "total_count": 1,
 | 
			
		||||
          "url": "/v1/subscription_items?subscription=sub_NORMALIZED0001"
 | 
			
		||||
        },
 | 
			
		||||
        "livemode": false,
 | 
			
		||||
        "metadata": {},
 | 
			
		||||
        "object": "subscription",
 | 
			
		||||
        "plan": {
 | 
			
		||||
          "active": true,
 | 
			
		||||
          "aggregate_usage": null,
 | 
			
		||||
          "amount": 8000,
 | 
			
		||||
          "billing_scheme": "per_unit",
 | 
			
		||||
          "created": 1539831971,
 | 
			
		||||
          "currency": "usd",
 | 
			
		||||
          "id": "plan_Do3xCvbzO89OsR",
 | 
			
		||||
          "interval": "year",
 | 
			
		||||
          "interval_count": 1,
 | 
			
		||||
          "livemode": false,
 | 
			
		||||
          "metadata": {},
 | 
			
		||||
          "nickname": "annual",
 | 
			
		||||
          "object": "plan",
 | 
			
		||||
          "product": "prod_Do3x494SetTDpx",
 | 
			
		||||
          "tiers": null,
 | 
			
		||||
          "tiers_mode": null,
 | 
			
		||||
          "transform_usage": null,
 | 
			
		||||
          "trial_period_days": null,
 | 
			
		||||
          "usage_type": "licensed"
 | 
			
		||||
        },
 | 
			
		||||
        "quantity": 8,
 | 
			
		||||
        "start": 1543394651,
 | 
			
		||||
        "status": "active",
 | 
			
		||||
        "tax_percent": 0.0,
 | 
			
		||||
        "trial_end": null,
 | 
			
		||||
        "trial_start": null
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "has_more": false,
 | 
			
		||||
    "object": "list",
 | 
			
		||||
    "total_count": 1,
 | 
			
		||||
    "url": "/v1/customers/cus_NORMALIZED0001/subscriptions"
 | 
			
		||||
  },
 | 
			
		||||
  "tax_info": null,
 | 
			
		||||
  "tax_info_verification": null
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,145 @@
 | 
			
		||||
{
 | 
			
		||||
  "account_balance": 0,
 | 
			
		||||
  "created": 1543394651,
 | 
			
		||||
  "currency": "usd",
 | 
			
		||||
  "default_source": "card_NORMALIZED00000000000002",
 | 
			
		||||
  "delinquent": false,
 | 
			
		||||
  "description": "zulip (Zulip Dev)",
 | 
			
		||||
  "discount": null,
 | 
			
		||||
  "email": "hamlet@zulip.com",
 | 
			
		||||
  "id": "cus_NORMALIZED0001",
 | 
			
		||||
  "invoice_prefix": "NORMA01",
 | 
			
		||||
  "livemode": false,
 | 
			
		||||
  "metadata": {
 | 
			
		||||
    "realm_id": "1",
 | 
			
		||||
    "realm_str": "zulip"
 | 
			
		||||
  },
 | 
			
		||||
  "object": "customer",
 | 
			
		||||
  "shipping": null,
 | 
			
		||||
  "sources": {
 | 
			
		||||
    "data": [
 | 
			
		||||
      {
 | 
			
		||||
        "address_city": "Pacific",
 | 
			
		||||
        "address_country": "United States",
 | 
			
		||||
        "address_line1": "Under the sea,",
 | 
			
		||||
        "address_line1_check": "pass",
 | 
			
		||||
        "address_line2": null,
 | 
			
		||||
        "address_state": null,
 | 
			
		||||
        "address_zip": "33333",
 | 
			
		||||
        "address_zip_check": "pass",
 | 
			
		||||
        "brand": "MasterCard",
 | 
			
		||||
        "country": "US",
 | 
			
		||||
        "customer": "cus_NORMALIZED0001",
 | 
			
		||||
        "cvc_check": "pass",
 | 
			
		||||
        "dynamic_last4": null,
 | 
			
		||||
        "exp_month": 3,
 | 
			
		||||
        "exp_year": 2033,
 | 
			
		||||
        "fingerprint": "NORMALIZED000002",
 | 
			
		||||
        "funding": "credit",
 | 
			
		||||
        "id": "card_NORMALIZED00000000000002",
 | 
			
		||||
        "last4": "4444",
 | 
			
		||||
        "metadata": {},
 | 
			
		||||
        "name": "Ada Starr",
 | 
			
		||||
        "object": "card",
 | 
			
		||||
        "tokenization_method": null
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "has_more": false,
 | 
			
		||||
    "object": "list",
 | 
			
		||||
    "total_count": 1,
 | 
			
		||||
    "url": "/v1/customers/cus_NORMALIZED0001/sources"
 | 
			
		||||
  },
 | 
			
		||||
  "subscriptions": {
 | 
			
		||||
    "data": [
 | 
			
		||||
      {
 | 
			
		||||
        "application_fee_percent": null,
 | 
			
		||||
        "billing": "charge_automatically",
 | 
			
		||||
        "billing_cycle_anchor": 1543394651,
 | 
			
		||||
        "cancel_at_period_end": false,
 | 
			
		||||
        "canceled_at": null,
 | 
			
		||||
        "created": 1543394651,
 | 
			
		||||
        "current_period_end": 1574930651,
 | 
			
		||||
        "current_period_start": 1543394651,
 | 
			
		||||
        "customer": "cus_NORMALIZED0001",
 | 
			
		||||
        "days_until_due": null,
 | 
			
		||||
        "default_source": null,
 | 
			
		||||
        "discount": null,
 | 
			
		||||
        "ended_at": null,
 | 
			
		||||
        "id": "sub_NORMALIZED0001",
 | 
			
		||||
        "items": {
 | 
			
		||||
          "data": [
 | 
			
		||||
            {
 | 
			
		||||
              "created": 1543394652,
 | 
			
		||||
              "id": "si_NORMALIZED0001",
 | 
			
		||||
              "metadata": {},
 | 
			
		||||
              "object": "subscription_item",
 | 
			
		||||
              "plan": {
 | 
			
		||||
                "active": true,
 | 
			
		||||
                "aggregate_usage": null,
 | 
			
		||||
                "amount": 8000,
 | 
			
		||||
                "billing_scheme": "per_unit",
 | 
			
		||||
                "created": 1539831971,
 | 
			
		||||
                "currency": "usd",
 | 
			
		||||
                "id": "plan_Do3xCvbzO89OsR",
 | 
			
		||||
                "interval": "year",
 | 
			
		||||
                "interval_count": 1,
 | 
			
		||||
                "livemode": false,
 | 
			
		||||
                "metadata": {},
 | 
			
		||||
                "nickname": "annual",
 | 
			
		||||
                "object": "plan",
 | 
			
		||||
                "product": "prod_Do3x494SetTDpx",
 | 
			
		||||
                "tiers": null,
 | 
			
		||||
                "tiers_mode": null,
 | 
			
		||||
                "transform_usage": null,
 | 
			
		||||
                "trial_period_days": null,
 | 
			
		||||
                "usage_type": "licensed"
 | 
			
		||||
              },
 | 
			
		||||
              "quantity": 8,
 | 
			
		||||
              "subscription": "sub_NORMALIZED0001"
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "has_more": false,
 | 
			
		||||
          "object": "list",
 | 
			
		||||
          "total_count": 1,
 | 
			
		||||
          "url": "/v1/subscription_items?subscription=sub_NORMALIZED0001"
 | 
			
		||||
        },
 | 
			
		||||
        "livemode": false,
 | 
			
		||||
        "metadata": {},
 | 
			
		||||
        "object": "subscription",
 | 
			
		||||
        "plan": {
 | 
			
		||||
          "active": true,
 | 
			
		||||
          "aggregate_usage": null,
 | 
			
		||||
          "amount": 8000,
 | 
			
		||||
          "billing_scheme": "per_unit",
 | 
			
		||||
          "created": 1539831971,
 | 
			
		||||
          "currency": "usd",
 | 
			
		||||
          "id": "plan_Do3xCvbzO89OsR",
 | 
			
		||||
          "interval": "year",
 | 
			
		||||
          "interval_count": 1,
 | 
			
		||||
          "livemode": false,
 | 
			
		||||
          "metadata": {},
 | 
			
		||||
          "nickname": "annual",
 | 
			
		||||
          "object": "plan",
 | 
			
		||||
          "product": "prod_Do3x494SetTDpx",
 | 
			
		||||
          "tiers": null,
 | 
			
		||||
          "tiers_mode": null,
 | 
			
		||||
          "transform_usage": null,
 | 
			
		||||
          "trial_period_days": null,
 | 
			
		||||
          "usage_type": "licensed"
 | 
			
		||||
        },
 | 
			
		||||
        "quantity": 8,
 | 
			
		||||
        "start": 1543394651,
 | 
			
		||||
        "status": "active",
 | 
			
		||||
        "tax_percent": 0.0,
 | 
			
		||||
        "trial_end": null,
 | 
			
		||||
        "trial_start": null
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "has_more": false,
 | 
			
		||||
    "object": "list",
 | 
			
		||||
    "total_count": 1,
 | 
			
		||||
    "url": "/v1/customers/cus_NORMALIZED0001/subscriptions"
 | 
			
		||||
  },
 | 
			
		||||
  "tax_info": null,
 | 
			
		||||
  "tax_info_verification": null
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,34 @@
 | 
			
		||||
{
 | 
			
		||||
  "_message": "Your card was declined.",
 | 
			
		||||
  "code": "card_declined",
 | 
			
		||||
  "headers": {
 | 
			
		||||
    "Access-Control-Allow-Credentials": "true",
 | 
			
		||||
    "Access-Control-Allow-Methods": "GET, POST, HEAD, OPTIONS, DELETE",
 | 
			
		||||
    "Access-Control-Allow-Origin": "*",
 | 
			
		||||
    "Access-Control-Expose-Headers": "Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required",
 | 
			
		||||
    "Access-Control-Max-Age": "300",
 | 
			
		||||
    "Cache-Control": "no-cache, no-store",
 | 
			
		||||
    "Connection": "keep-alive",
 | 
			
		||||
    "Content-Length": "235",
 | 
			
		||||
    "Content-Type": "application/json",
 | 
			
		||||
    "Date": "Wed, 28 Nov 2018 08:44:16 GMT",
 | 
			
		||||
    "Request-Id": "req_NORMALIZED0001",
 | 
			
		||||
    "Server": "nginx",
 | 
			
		||||
    "Strict-Transport-Security": "max-age=31556926; includeSubDomains; preload",
 | 
			
		||||
    "Stripe-Version": "2018-11-08"
 | 
			
		||||
  },
 | 
			
		||||
  "http_body": "{\n  \"error\": {\n    \"code\": \"card_declined\",\n    \"decline_code\": \"lost_card\",\n    \"doc_url\": \"https://stripe.com/docs/error-codes/card-declined\",\n    \"message\": \"Your card was declined.\",\n    \"param\": \"\",\n    \"type\": \"card_error\"\n  }\n}\n",
 | 
			
		||||
  "http_status": 402,
 | 
			
		||||
  "json_body": {
 | 
			
		||||
    "error": {
 | 
			
		||||
      "code": "card_declined",
 | 
			
		||||
      "decline_code": "lost_card",
 | 
			
		||||
      "doc_url": "https://stripe.com/docs/error-codes/card-declined",
 | 
			
		||||
      "message": "Your card was declined.",
 | 
			
		||||
      "param": "",
 | 
			
		||||
      "type": "card_error"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "param": "",
 | 
			
		||||
  "request_id": "req_NORMALIZED0001"
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,83 @@
 | 
			
		||||
{
 | 
			
		||||
  "application_fee_percent": null,
 | 
			
		||||
  "billing": "charge_automatically",
 | 
			
		||||
  "billing_cycle_anchor": 1543394651,
 | 
			
		||||
  "cancel_at_period_end": false,
 | 
			
		||||
  "canceled_at": null,
 | 
			
		||||
  "created": 1543394651,
 | 
			
		||||
  "current_period_end": 1574930651,
 | 
			
		||||
  "current_period_start": 1543394651,
 | 
			
		||||
  "customer": "cus_NORMALIZED0001",
 | 
			
		||||
  "days_until_due": null,
 | 
			
		||||
  "default_source": null,
 | 
			
		||||
  "discount": null,
 | 
			
		||||
  "ended_at": null,
 | 
			
		||||
  "id": "sub_NORMALIZED0001",
 | 
			
		||||
  "items": {
 | 
			
		||||
    "data": [
 | 
			
		||||
      {
 | 
			
		||||
        "created": 1543394652,
 | 
			
		||||
        "id": "si_NORMALIZED0001",
 | 
			
		||||
        "metadata": {},
 | 
			
		||||
        "object": "subscription_item",
 | 
			
		||||
        "plan": {
 | 
			
		||||
          "active": true,
 | 
			
		||||
          "aggregate_usage": null,
 | 
			
		||||
          "amount": 8000,
 | 
			
		||||
          "billing_scheme": "per_unit",
 | 
			
		||||
          "created": 1539831971,
 | 
			
		||||
          "currency": "usd",
 | 
			
		||||
          "id": "plan_Do3xCvbzO89OsR",
 | 
			
		||||
          "interval": "year",
 | 
			
		||||
          "interval_count": 1,
 | 
			
		||||
          "livemode": false,
 | 
			
		||||
          "metadata": {},
 | 
			
		||||
          "nickname": "annual",
 | 
			
		||||
          "object": "plan",
 | 
			
		||||
          "product": "prod_Do3x494SetTDpx",
 | 
			
		||||
          "tiers": null,
 | 
			
		||||
          "tiers_mode": null,
 | 
			
		||||
          "transform_usage": null,
 | 
			
		||||
          "trial_period_days": null,
 | 
			
		||||
          "usage_type": "licensed"
 | 
			
		||||
        },
 | 
			
		||||
        "quantity": 8,
 | 
			
		||||
        "subscription": "sub_NORMALIZED0001"
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "has_more": false,
 | 
			
		||||
    "object": "list",
 | 
			
		||||
    "total_count": 1,
 | 
			
		||||
    "url": "/v1/subscription_items?subscription=sub_NORMALIZED0001"
 | 
			
		||||
  },
 | 
			
		||||
  "livemode": false,
 | 
			
		||||
  "metadata": {},
 | 
			
		||||
  "object": "subscription",
 | 
			
		||||
  "plan": {
 | 
			
		||||
    "active": true,
 | 
			
		||||
    "aggregate_usage": null,
 | 
			
		||||
    "amount": 8000,
 | 
			
		||||
    "billing_scheme": "per_unit",
 | 
			
		||||
    "created": 1539831971,
 | 
			
		||||
    "currency": "usd",
 | 
			
		||||
    "id": "plan_Do3xCvbzO89OsR",
 | 
			
		||||
    "interval": "year",
 | 
			
		||||
    "interval_count": 1,
 | 
			
		||||
    "livemode": false,
 | 
			
		||||
    "metadata": {},
 | 
			
		||||
    "nickname": "annual",
 | 
			
		||||
    "object": "plan",
 | 
			
		||||
    "product": "prod_Do3x494SetTDpx",
 | 
			
		||||
    "tiers": null,
 | 
			
		||||
    "tiers_mode": null,
 | 
			
		||||
    "transform_usage": null,
 | 
			
		||||
    "trial_period_days": null,
 | 
			
		||||
    "usage_type": "licensed"
 | 
			
		||||
  },
 | 
			
		||||
  "quantity": 8,
 | 
			
		||||
  "start": 1543394651,
 | 
			
		||||
  "status": "active",
 | 
			
		||||
  "tax_percent": 0.0,
 | 
			
		||||
  "trial_end": null,
 | 
			
		||||
  "trial_start": null
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,33 @@
 | 
			
		||||
{
 | 
			
		||||
  "card": {
 | 
			
		||||
    "address_city": "Pacific",
 | 
			
		||||
    "address_country": "United States",
 | 
			
		||||
    "address_line1": "Under the sea,",
 | 
			
		||||
    "address_line1_check": "unchecked",
 | 
			
		||||
    "address_line2": null,
 | 
			
		||||
    "address_state": null,
 | 
			
		||||
    "address_zip": "33333",
 | 
			
		||||
    "address_zip_check": "unchecked",
 | 
			
		||||
    "brand": "Visa",
 | 
			
		||||
    "country": "US",
 | 
			
		||||
    "cvc_check": "unchecked",
 | 
			
		||||
    "dynamic_last4": null,
 | 
			
		||||
    "exp_month": 3,
 | 
			
		||||
    "exp_year": 2033,
 | 
			
		||||
    "fingerprint": "NORMALIZED000001",
 | 
			
		||||
    "funding": "credit",
 | 
			
		||||
    "id": "card_NORMALIZED00000000000001",
 | 
			
		||||
    "last4": "4242",
 | 
			
		||||
    "metadata": {},
 | 
			
		||||
    "name": "Ada Starr",
 | 
			
		||||
    "object": "card",
 | 
			
		||||
    "tokenization_method": null
 | 
			
		||||
  },
 | 
			
		||||
  "client_ip": "0.0.0.0",
 | 
			
		||||
  "created": 1543394650,
 | 
			
		||||
  "id": "tok_NORMALIZED00000000000001",
 | 
			
		||||
  "livemode": false,
 | 
			
		||||
  "object": "token",
 | 
			
		||||
  "type": "card",
 | 
			
		||||
  "used": false
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,33 @@
 | 
			
		||||
{
 | 
			
		||||
  "card": {
 | 
			
		||||
    "address_city": "Pacific",
 | 
			
		||||
    "address_country": "United States",
 | 
			
		||||
    "address_line1": "Under the sea,",
 | 
			
		||||
    "address_line1_check": "unchecked",
 | 
			
		||||
    "address_line2": null,
 | 
			
		||||
    "address_state": null,
 | 
			
		||||
    "address_zip": "33333",
 | 
			
		||||
    "address_zip_check": "unchecked",
 | 
			
		||||
    "brand": "MasterCard",
 | 
			
		||||
    "country": "US",
 | 
			
		||||
    "cvc_check": "unchecked",
 | 
			
		||||
    "dynamic_last4": null,
 | 
			
		||||
    "exp_month": 3,
 | 
			
		||||
    "exp_year": 2033,
 | 
			
		||||
    "fingerprint": "NORMALIZED000002",
 | 
			
		||||
    "funding": "credit",
 | 
			
		||||
    "id": "card_NORMALIZED00000000000002",
 | 
			
		||||
    "last4": "4444",
 | 
			
		||||
    "metadata": {},
 | 
			
		||||
    "name": "Ada Starr",
 | 
			
		||||
    "object": "card",
 | 
			
		||||
    "tokenization_method": null
 | 
			
		||||
  },
 | 
			
		||||
  "client_ip": "0.0.0.0",
 | 
			
		||||
  "created": 1543394653,
 | 
			
		||||
  "id": "tok_NORMALIZED00000000000002",
 | 
			
		||||
  "livemode": false,
 | 
			
		||||
  "object": "token",
 | 
			
		||||
  "type": "card",
 | 
			
		||||
  "used": false
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,33 @@
 | 
			
		||||
{
 | 
			
		||||
  "card": {
 | 
			
		||||
    "address_city": "Pacific",
 | 
			
		||||
    "address_country": "United States",
 | 
			
		||||
    "address_line1": "Under the sea,",
 | 
			
		||||
    "address_line1_check": "unchecked",
 | 
			
		||||
    "address_line2": null,
 | 
			
		||||
    "address_state": null,
 | 
			
		||||
    "address_zip": "33333",
 | 
			
		||||
    "address_zip_check": "unchecked",
 | 
			
		||||
    "brand": "Visa",
 | 
			
		||||
    "country": "US",
 | 
			
		||||
    "cvc_check": "unchecked",
 | 
			
		||||
    "dynamic_last4": null,
 | 
			
		||||
    "exp_month": 3,
 | 
			
		||||
    "exp_year": 2033,
 | 
			
		||||
    "fingerprint": "NORMALIZED000003",
 | 
			
		||||
    "funding": "credit",
 | 
			
		||||
    "id": "card_NORMALIZED00000000000003",
 | 
			
		||||
    "last4": "9987",
 | 
			
		||||
    "metadata": {},
 | 
			
		||||
    "name": "Ada Starr",
 | 
			
		||||
    "object": "card",
 | 
			
		||||
    "tokenization_method": null
 | 
			
		||||
  },
 | 
			
		||||
  "client_ip": "0.0.0.0",
 | 
			
		||||
  "created": 1543394655,
 | 
			
		||||
  "id": "tok_NORMALIZED00000000000003",
 | 
			
		||||
  "livemode": false,
 | 
			
		||||
  "object": "token",
 | 
			
		||||
  "type": "card",
 | 
			
		||||
  "used": false
 | 
			
		||||
}
 | 
			
		||||
@@ -832,33 +832,46 @@ class StripeTest(ZulipTestCase):
 | 
			
		||||
        stripe_subscription = stripe.Subscription.retrieve(stripe_subscription.id)
 | 
			
		||||
        self.assertEqual(stripe_subscription.status, "canceled")
 | 
			
		||||
 | 
			
		||||
    @patch("stripe.Customer.retrieve", side_effect=mock_customer_with_subscription)
 | 
			
		||||
    def test_replace_payment_source(self, mock_retrieve_customer: Mock) -> None:
 | 
			
		||||
        user = self.example_user("iago")
 | 
			
		||||
    @mock_stripe("Customer.create", "Customer.retrieve", "Customer.save",
 | 
			
		||||
                 "Subscription.create", "Token.create")
 | 
			
		||||
    def test_replace_payment_source(self, mock5: Mock, mock4: Mock, mock3: Mock,
 | 
			
		||||
                                    mock2: Mock, mock1: Mock) -> None:
 | 
			
		||||
        user = self.example_user("hamlet")
 | 
			
		||||
        self.login(user.email)
 | 
			
		||||
        Customer.objects.create(realm=user.realm, stripe_customer_id=self.stripe_customer_id)
 | 
			
		||||
        with patch.object(stripe.Customer, 'save', autospec=True,
 | 
			
		||||
                          side_effect=lambda customer: self.assertEqual(customer.source, "new_token")):
 | 
			
		||||
            result = self.client_post("/json/billing/sources/change",
 | 
			
		||||
                                      {'stripe_token': ujson.dumps("new_token")})
 | 
			
		||||
        self.assert_json_success(result)
 | 
			
		||||
        log_entry = RealmAuditLog.objects.order_by('-id').first()
 | 
			
		||||
        self.assertEqual(user, log_entry.acting_user)
 | 
			
		||||
        self.assertEqual(RealmAuditLog.STRIPE_CARD_CHANGED, log_entry.event_type)
 | 
			
		||||
 | 
			
		||||
    @patch("stripe.Customer.retrieve", side_effect=mock_customer_with_subscription)
 | 
			
		||||
    def test_replace_payment_source_with_stripe_error(self, mock_retrieve_customer: Mock) -> None:
 | 
			
		||||
        user = self.example_user("iago")
 | 
			
		||||
        self.login(user.email)
 | 
			
		||||
        Customer.objects.create(realm=user.realm, stripe_customer_id=self.stripe_customer_id)
 | 
			
		||||
        with patch.object(stripe.Customer, 'save', autospec=True,
 | 
			
		||||
                          side_effect=stripe.error.StripeError('message', json_body={})):
 | 
			
		||||
        self.client_post("/upgrade/", {'stripeToken': stripe_create_token().id,
 | 
			
		||||
                                       'signed_seat_count': self.signed_seat_count,
 | 
			
		||||
                                       'salt': self.salt,
 | 
			
		||||
                                       'plan': Plan.CLOUD_ANNUAL,
 | 
			
		||||
                                       'billing_modality': 'charge_automatically'})
 | 
			
		||||
        # Try replacing with a valid card
 | 
			
		||||
        stripe_token = stripe_create_token(card_number='5555555555554444').id
 | 
			
		||||
        response = self.client_post("/json/billing/sources/change",
 | 
			
		||||
                                        {'stripe_token': ujson.dumps("new_token")})
 | 
			
		||||
        self.assertEqual(ujson.loads(response.content)['error_description'], 'other stripe error')
 | 
			
		||||
        self.assert_json_error_contains(response, 'Something went wrong. Please contact')
 | 
			
		||||
        self.assertFalse(RealmAuditLog.objects.filter(
 | 
			
		||||
            event_type=RealmAuditLog.STRIPE_CARD_CHANGED).exists())
 | 
			
		||||
                                    {'stripe_token': ujson.dumps(stripe_token)})
 | 
			
		||||
        self.assert_json_success(response)
 | 
			
		||||
        number_of_sources = 0
 | 
			
		||||
        for stripe_source in stripe_get_customer(Customer.objects.first().stripe_customer_id).sources:
 | 
			
		||||
            self.assertEqual(cast(stripe.Card, stripe_source).last4, '4444')
 | 
			
		||||
            number_of_sources += 1
 | 
			
		||||
        self.assertEqual(number_of_sources, 1)
 | 
			
		||||
        audit_log_entry = RealmAuditLog.objects.order_by('-id') \
 | 
			
		||||
                                               .values_list('acting_user', 'event_type').first()
 | 
			
		||||
        self.assertEqual(audit_log_entry, (user.id, RealmAuditLog.STRIPE_CARD_CHANGED))
 | 
			
		||||
        RealmAuditLog.objects.filter(acting_user=user).delete()
 | 
			
		||||
 | 
			
		||||
        # Try replacing with an invalid card
 | 
			
		||||
        stripe_token = stripe_create_token(card_number='4000000000009987').id
 | 
			
		||||
        with patch("corporate.lib.stripe.billing_logger.error") as mock_billing_logger:
 | 
			
		||||
            response = self.client_post("/json/billing/sources/change",
 | 
			
		||||
                                        {'stripe_token': ujson.dumps(stripe_token)})
 | 
			
		||||
        mock_billing_logger.assert_called()
 | 
			
		||||
        self.assertEqual(ujson.loads(response.content)['error_description'], 'card error')
 | 
			
		||||
        self.assert_json_error_contains(response, 'Your card was declined')
 | 
			
		||||
        number_of_sources = 0
 | 
			
		||||
        for stripe_source in stripe_get_customer(Customer.objects.first().stripe_customer_id).sources:
 | 
			
		||||
            self.assertEqual(cast(stripe.Card, stripe_source).last4, '4444')
 | 
			
		||||
            number_of_sources += 1
 | 
			
		||||
        self.assertEqual(number_of_sources, 1)
 | 
			
		||||
        self.assertFalse(RealmAuditLog.objects.filter(event_type=RealmAuditLog.STRIPE_CARD_CHANGED).exists())
 | 
			
		||||
 | 
			
		||||
    @patch("stripe.Customer.create", side_effect=mock_create_customer)
 | 
			
		||||
    @patch("stripe.Subscription.create", side_effect=mock_create_subscription)
 | 
			
		||||
 
 | 
			
		||||
@@ -12,6 +12,7 @@ class Customer:
 | 
			
		||||
    created: int
 | 
			
		||||
    id: str
 | 
			
		||||
    source: str
 | 
			
		||||
    sources: List[Union[Card, Source]]
 | 
			
		||||
    subscriptions: SubscriptionListObject
 | 
			
		||||
    coupon: str
 | 
			
		||||
    account_balance: int
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user