From a03f9078e59e045cd4ee1b7a5fba8f078369253e Mon Sep 17 00:00:00 2001 From: Prakhar Pratyush Date: Wed, 20 Dec 2023 16:52:00 +0530 Subject: [PATCH] test_stripe: Add migrate customer from server to realms E2E test. --- ...realms_and_upgrade--Customer.create.1.json | 33 + ...realms_and_upgrade--Customer.modify.1.json | 33 + ...alms_and_upgrade--Customer.retrieve.1.json | 79 ++ ...alms_and_upgrade--Customer.retrieve.2.json | 79 ++ ...alms_and_upgrade--Customer.retrieve.3.json | 79 ++ ...alms_and_upgrade--Customer.retrieve.4.json | 79 ++ ...alms_and_upgrade--Customer.retrieve.5.json | 79 ++ ...r_to_realms_and_upgrade--Event.list.1.json | 60 + ...r_to_realms_and_upgrade--Event.list.2.json | 447 +++++++ ...r_to_realms_and_upgrade--Event.list.3.json | 1085 +++++++++++++++++ ...r_to_realms_and_upgrade--Event.list.4.json | 553 +++++++++ ...r_to_realms_and_upgrade--Event.list.5.json | 6 + ..._realms_and_upgrade--Invoice.create.1.json | 258 ++++ ...d_upgrade--Invoice.finalize_invoice.1.json | 258 ++++ ...to_realms_and_upgrade--Invoice.list.1.json | 6 + ...lms_and_upgrade--InvoiceItem.create.1.json | 47 + ...lms_and_upgrade--InvoiceItem.create.2.json | 47 + ...lms_and_upgrade--InvoiceItem.create.3.json | 47 + ...s_and_upgrade--PaymentIntent.create.1.json | 198 +++ ...lms_and_upgrade--SetupIntent.create.1.json | 34 + ...ealms_and_upgrade--SetupIntent.list.1.json | 41 + ...s_and_upgrade--SetupIntent.retrieve.1.json | 34 + ...nd_upgrade--checkout.Session.create.1.json | 74 ++ ..._and_upgrade--checkout.Session.list.1.json | 81 ++ corporate/tests/test_stripe.py | 106 ++ corporate/views/billing_page.py | 2 +- zilencer/views.py | 4 +- 27 files changed, 3846 insertions(+), 3 deletions(-) create mode 100644 corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.create.1.json create mode 100644 corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.modify.1.json create mode 100644 corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.retrieve.1.json create mode 100644 corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.retrieve.2.json create mode 100644 corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.retrieve.3.json create mode 100644 corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.retrieve.4.json create mode 100644 corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.retrieve.5.json create mode 100644 corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Event.list.1.json create mode 100644 corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Event.list.2.json create mode 100644 corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Event.list.3.json create mode 100644 corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Event.list.4.json create mode 100644 corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Event.list.5.json create mode 100644 corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Invoice.create.1.json create mode 100644 corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Invoice.finalize_invoice.1.json create mode 100644 corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Invoice.list.1.json create mode 100644 corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--InvoiceItem.create.1.json create mode 100644 corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--InvoiceItem.create.2.json create mode 100644 corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--InvoiceItem.create.3.json create mode 100644 corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--PaymentIntent.create.1.json create mode 100644 corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--SetupIntent.create.1.json create mode 100644 corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--SetupIntent.list.1.json create mode 100644 corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--SetupIntent.retrieve.1.json create mode 100644 corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--checkout.Session.create.1.json create mode 100644 corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--checkout.Session.list.1.json diff --git a/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.create.1.json b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.create.1.json new file mode 100644 index 0000000000..2d5be59dcd --- /dev/null +++ b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.create.1.json @@ -0,0 +1,33 @@ +{ + "address": null, + "balance": 0, + "created": 1000000000, + "currency": null, + "default_currency": null, + "default_source": null, + "delinquent": false, + "description": "zulip.testserver 129af42f-9cd", + "discount": null, + "email": "hamlet@zulip.com", + "id": "cus_NORMALIZED0001", + "invoice_prefix": "NORMA01", + "invoice_settings": { + "custom_fields": null, + "default_payment_method": null, + "footer": null, + "rendering_options": null + }, + "livemode": false, + "metadata": { + "remote_realm_host": "zulip.testserver", + "remote_realm_uuid": "129af42f-9cd2-47a3-9001-d4de8c3824e0" + }, + "name": null, + "next_invoice_sequence": 1, + "object": "customer", + "phone": null, + "preferred_locales": [], + "shipping": null, + "tax_exempt": "none", + "test_clock": null +} diff --git a/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.modify.1.json b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.modify.1.json new file mode 100644 index 0000000000..d8a6e4cc1b --- /dev/null +++ b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.modify.1.json @@ -0,0 +1,33 @@ +{ + "address": null, + "balance": 0, + "created": 1000000000, + "currency": null, + "default_currency": null, + "default_source": null, + "delinquent": false, + "description": "zulip.testserver 129af42f-9cd", + "discount": null, + "email": "hamlet@zulip.com", + "id": "cus_NORMALIZED0001", + "invoice_prefix": "NORMA01", + "invoice_settings": { + "custom_fields": null, + "default_payment_method": "pm_1OU9PaDEQaroqDjsGx03hXTa", + "footer": null, + "rendering_options": null + }, + "livemode": false, + "metadata": { + "remote_realm_host": "zulip.testserver", + "remote_realm_uuid": "129af42f-9cd2-47a3-9001-d4de8c3824e0" + }, + "name": null, + "next_invoice_sequence": 1, + "object": "customer", + "phone": null, + "preferred_locales": [], + "shipping": null, + "tax_exempt": "none", + "test_clock": null +} diff --git a/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.retrieve.1.json b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.retrieve.1.json new file mode 100644 index 0000000000..6c4cbb0140 --- /dev/null +++ b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.retrieve.1.json @@ -0,0 +1,79 @@ +{ + "address": null, + "balance": 0, + "created": 1000000000, + "currency": null, + "default_currency": null, + "default_source": null, + "delinquent": false, + "description": "zulip.testserver 129af42f-9cd", + "discount": null, + "email": "hamlet@zulip.com", + "id": "cus_NORMALIZED0001", + "invoice_prefix": "NORMA01", + "invoice_settings": { + "custom_fields": null, + "default_payment_method": { + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "pass" + }, + "country": "US", + "exp_month": 1, + "exp_year": 2025, + "fingerprint": "NORMALIZED000001", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1000000000, + "customer": "cus_NORMALIZED0001", + "id": "pm_1OU9PaDEQaroqDjsGx03hXTa", + "livemode": false, + "metadata": {}, + "object": "payment_method", + "type": "card" + }, + "footer": null, + "rendering_options": null + }, + "livemode": false, + "metadata": { + "remote_realm_host": "zulip.testserver", + "remote_realm_uuid": "129af42f-9cd2-47a3-9001-d4de8c3824e0" + }, + "name": null, + "next_invoice_sequence": 1, + "object": "customer", + "phone": null, + "preferred_locales": [], + "shipping": null, + "tax_exempt": "none", + "test_clock": null +} diff --git a/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.retrieve.2.json b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.retrieve.2.json new file mode 100644 index 0000000000..6c4cbb0140 --- /dev/null +++ b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.retrieve.2.json @@ -0,0 +1,79 @@ +{ + "address": null, + "balance": 0, + "created": 1000000000, + "currency": null, + "default_currency": null, + "default_source": null, + "delinquent": false, + "description": "zulip.testserver 129af42f-9cd", + "discount": null, + "email": "hamlet@zulip.com", + "id": "cus_NORMALIZED0001", + "invoice_prefix": "NORMA01", + "invoice_settings": { + "custom_fields": null, + "default_payment_method": { + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "pass" + }, + "country": "US", + "exp_month": 1, + "exp_year": 2025, + "fingerprint": "NORMALIZED000001", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1000000000, + "customer": "cus_NORMALIZED0001", + "id": "pm_1OU9PaDEQaroqDjsGx03hXTa", + "livemode": false, + "metadata": {}, + "object": "payment_method", + "type": "card" + }, + "footer": null, + "rendering_options": null + }, + "livemode": false, + "metadata": { + "remote_realm_host": "zulip.testserver", + "remote_realm_uuid": "129af42f-9cd2-47a3-9001-d4de8c3824e0" + }, + "name": null, + "next_invoice_sequence": 1, + "object": "customer", + "phone": null, + "preferred_locales": [], + "shipping": null, + "tax_exempt": "none", + "test_clock": null +} diff --git a/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.retrieve.3.json b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.retrieve.3.json new file mode 100644 index 0000000000..6c4cbb0140 --- /dev/null +++ b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.retrieve.3.json @@ -0,0 +1,79 @@ +{ + "address": null, + "balance": 0, + "created": 1000000000, + "currency": null, + "default_currency": null, + "default_source": null, + "delinquent": false, + "description": "zulip.testserver 129af42f-9cd", + "discount": null, + "email": "hamlet@zulip.com", + "id": "cus_NORMALIZED0001", + "invoice_prefix": "NORMA01", + "invoice_settings": { + "custom_fields": null, + "default_payment_method": { + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "pass" + }, + "country": "US", + "exp_month": 1, + "exp_year": 2025, + "fingerprint": "NORMALIZED000001", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1000000000, + "customer": "cus_NORMALIZED0001", + "id": "pm_1OU9PaDEQaroqDjsGx03hXTa", + "livemode": false, + "metadata": {}, + "object": "payment_method", + "type": "card" + }, + "footer": null, + "rendering_options": null + }, + "livemode": false, + "metadata": { + "remote_realm_host": "zulip.testserver", + "remote_realm_uuid": "129af42f-9cd2-47a3-9001-d4de8c3824e0" + }, + "name": null, + "next_invoice_sequence": 1, + "object": "customer", + "phone": null, + "preferred_locales": [], + "shipping": null, + "tax_exempt": "none", + "test_clock": null +} diff --git a/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.retrieve.4.json b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.retrieve.4.json new file mode 100644 index 0000000000..6c4cbb0140 --- /dev/null +++ b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.retrieve.4.json @@ -0,0 +1,79 @@ +{ + "address": null, + "balance": 0, + "created": 1000000000, + "currency": null, + "default_currency": null, + "default_source": null, + "delinquent": false, + "description": "zulip.testserver 129af42f-9cd", + "discount": null, + "email": "hamlet@zulip.com", + "id": "cus_NORMALIZED0001", + "invoice_prefix": "NORMA01", + "invoice_settings": { + "custom_fields": null, + "default_payment_method": { + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "pass" + }, + "country": "US", + "exp_month": 1, + "exp_year": 2025, + "fingerprint": "NORMALIZED000001", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1000000000, + "customer": "cus_NORMALIZED0001", + "id": "pm_1OU9PaDEQaroqDjsGx03hXTa", + "livemode": false, + "metadata": {}, + "object": "payment_method", + "type": "card" + }, + "footer": null, + "rendering_options": null + }, + "livemode": false, + "metadata": { + "remote_realm_host": "zulip.testserver", + "remote_realm_uuid": "129af42f-9cd2-47a3-9001-d4de8c3824e0" + }, + "name": null, + "next_invoice_sequence": 1, + "object": "customer", + "phone": null, + "preferred_locales": [], + "shipping": null, + "tax_exempt": "none", + "test_clock": null +} diff --git a/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.retrieve.5.json b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.retrieve.5.json new file mode 100644 index 0000000000..920ef4f3eb --- /dev/null +++ b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Customer.retrieve.5.json @@ -0,0 +1,79 @@ +{ + "address": null, + "balance": 0, + "created": 1000000000, + "currency": "usd", + "default_currency": "usd", + "default_source": null, + "delinquent": false, + "description": "zulip.testserver 129af42f-9cd", + "discount": null, + "email": "hamlet@zulip.com", + "id": "cus_NORMALIZED0001", + "invoice_prefix": "NORMA01", + "invoice_settings": { + "custom_fields": null, + "default_payment_method": { + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "pass" + }, + "country": "US", + "exp_month": 1, + "exp_year": 2025, + "fingerprint": "NORMALIZED000001", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1000000000, + "customer": "cus_NORMALIZED0001", + "id": "pm_1OU9PaDEQaroqDjsGx03hXTa", + "livemode": false, + "metadata": {}, + "object": "payment_method", + "type": "card" + }, + "footer": null, + "rendering_options": null + }, + "livemode": false, + "metadata": { + "remote_realm_host": "zulip.testserver", + "remote_realm_uuid": "129af42f-9cd2-47a3-9001-d4de8c3824e0" + }, + "name": null, + "next_invoice_sequence": 2, + "object": "customer", + "phone": null, + "preferred_locales": [], + "shipping": null, + "tax_exempt": "none", + "test_clock": null +} diff --git a/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Event.list.1.json b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Event.list.1.json new file mode 100644 index 0000000000..878dd4cf6f --- /dev/null +++ b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Event.list.1.json @@ -0,0 +1,60 @@ +{ + "data": [ + { + "api_version": "2020-08-27", + "created": 1000000000, + "data": { + "object": { + "address": null, + "balance": 0, + "created": 1000000000, + "currency": null, + "default_currency": null, + "default_source": null, + "delinquent": false, + "description": "zulip.testserver 129af42f-9cd", + "discount": null, + "email": "hamlet@zulip.com", + "id": "cus_NORMALIZED0001", + "invoice_prefix": "NORMA01", + "invoice_settings": { + "custom_fields": null, + "default_payment_method": "pm_1OU9PaDEQaroqDjsGx03hXTa", + "footer": null, + "rendering_options": null + }, + "livemode": false, + "metadata": { + "remote_realm_host": "zulip.testserver", + "remote_realm_uuid": "129af42f-9cd2-47a3-9001-d4de8c3824e0" + }, + "name": null, + "next_invoice_sequence": 1, + "object": "customer", + "phone": null, + "preferred_locales": [], + "shipping": null, + "tax_exempt": "none", + "test_clock": null + }, + "previous_attributes": { + "invoice_settings": { + "default_payment_method": null + } + } + }, + "id": "evt_1OU9PcDEQaroqDjsqoMm18D8", + "livemode": false, + "object": "event", + "pending_webhooks": 0, + "request": { + "id": "req_NORMALIZED0001", + "idempotency_key": "e7512bf5-d006-41a5-b0cb-f135543022f8" + }, + "type": "customer.updated" + } + ], + "has_more": true, + "object": "list", + "url": "/v1/events" +} diff --git a/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Event.list.2.json b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Event.list.2.json new file mode 100644 index 0000000000..1a23db83aa --- /dev/null +++ b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Event.list.2.json @@ -0,0 +1,447 @@ +{ + "data": [ + { + "api_version": "2020-08-27", + "created": 1000000000, + "data": { + "object": { + "amount": 176000, + "amount_capturable": 0, + "amount_details": { + "tip": {} + }, + "amount_received": 176000, + "application": null, + "application_fee_amount": null, + "automatic_payment_methods": null, + "canceled_at": null, + "cancellation_reason": null, + "capture_method": "automatic", + "charges": { + "data": [ + { + "amount": 176000, + "amount_captured": 176000, + "amount_refunded": 0, + "application": null, + "application_fee": null, + "application_fee_amount": null, + "balance_transaction": "txn_NORMALIZED00000000000001", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null + }, + "calculated_statement_descriptor": "ZULIP BUSINESS", + "captured": true, + "created": 1000000000, + "currency": "usd", + "customer": "cus_NORMALIZED0001", + "description": "Upgrade to Zulip Business, $80.0 x 25 - $20.0 x 12", + "destination": null, + "dispute": null, + "disputed": false, + "failure_balance_transaction": null, + "failure_code": null, + "failure_message": null, + "fraud_details": {}, + "id": "ch_NORMALIZED00000000000001", + "invoice": null, + "livemode": false, + "metadata": { + "billing_modality": "charge_automatically", + "billing_schedule": "1", + "license_management": "automatic", + "licenses": "25", + "plan_tier": "104", + "price_per_license": "8000", + "remote_realm_host": "zulip.testserver", + "remote_realm_user_email": "hamlet@zulip.com", + "remote_realm_user_id": "1", + "seat_count": "25", + "type": "upgrade" + }, + "object": "charge", + "on_behalf_of": null, + "order": null, + "outcome": { + "network_status": "approved_by_network", + "reason": null, + "risk_level": "normal", + "risk_score": 0, + "seller_message": "Payment complete.", + "type": "authorized" + }, + "paid": true, + "payment_intent": "pi_NORMALIZED00000000000001", + "payment_method": "pm_1OU9PaDEQaroqDjsGx03hXTa", + "payment_method_details": { + "card": { + "amount_authorized": 176000, + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "pass" + }, + "country": "US", + "exp_month": 1, + "exp_year": 2025, + "extended_authorization": { + "status": "disabled" + }, + "fingerprint": "NORMALIZED000001", + "funding": "credit", + "incremental_authorization": { + "status": "unavailable" + }, + "installments": null, + "last4": "4242", + "mandate": null, + "multicapture": { + "status": "unavailable" + }, + "network": "visa", + "network_token": { + "used": false + }, + "overcapture": { + "maximum_amount_capturable": 176000, + "status": "unavailable" + }, + "three_d_secure": null, + "wallet": null + }, + "type": "card" + }, + "radar_options": {}, + "receipt_email": "hamlet@zulip.com", + "receipt_number": null, + "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xN3ZUa3dERVFhcm9xRGpzKPDI0KwGMgaRXB2GAD46LBb47AYa1xUOejFMFbZh7zV034r-wXlvvKnsMIJ-Z37lKiYYWut535AhxLha", + "refunded": false, + "refunds": { + "data": [], + "has_more": false, + "object": "list", + "total_count": 0, + "url": "/v1/charges/ch_NORMALIZED00000000000001/refunds" + }, + "review": null, + "shipping": null, + "source": null, + "source_transfer": null, + "statement_descriptor": "Zulip Business", + "statement_descriptor_suffix": null, + "status": "succeeded", + "transfer_data": null, + "transfer_group": null + } + ], + "has_more": false, + "object": "list", + "total_count": 1, + "url": "/v1/charges?payment_intent=pi_NORMALIZED00000000000001" + }, + "client_secret": "pi_NORMALIZED00000000000001_secret_McKpCnN1iYSvPzaFuXX8l8tiw", + "confirmation_method": "automatic", + "created": 1000000000, + "currency": "usd", + "customer": "cus_NORMALIZED0001", + "description": "Upgrade to Zulip Business, $80.0 x 25 - $20.0 x 12", + "id": "pi_NORMALIZED00000000000001", + "invoice": null, + "last_payment_error": null, + "latest_charge": "ch_NORMALIZED00000000000001", + "livemode": false, + "metadata": { + "billing_modality": "charge_automatically", + "billing_schedule": "1", + "license_management": "automatic", + "licenses": "25", + "plan_tier": "104", + "price_per_license": "8000", + "remote_realm_host": "zulip.testserver", + "remote_realm_user_email": "hamlet@zulip.com", + "remote_realm_user_id": "1", + "seat_count": "25", + "type": "upgrade" + }, + "next_action": null, + "object": "payment_intent", + "on_behalf_of": null, + "payment_method": "pm_1OU9PaDEQaroqDjsGx03hXTa", + "payment_method_configuration_details": null, + "payment_method_options": { + "card": { + "installments": null, + "mandate_options": null, + "network": null, + "request_three_d_secure": "automatic" + } + }, + "payment_method_types": [ + "card" + ], + "processing": null, + "receipt_email": "hamlet@zulip.com", + "review": null, + "setup_future_usage": null, + "shipping": null, + "source": null, + "statement_descriptor": "Zulip Business", + "statement_descriptor_suffix": null, + "status": "succeeded", + "transfer_data": null, + "transfer_group": null + } + }, + "id": "evt_3OU9PfDEQaroqDjs0ntBcgEj", + "livemode": false, + "object": "event", + "pending_webhooks": 0, + "request": { + "id": "req_NORMALIZED0002", + "idempotency_key": "49e94d0e-f884-4533-a417-a117f1cab05d" + }, + "type": "payment_intent.succeeded" + }, + { + "api_version": "2020-08-27", + "created": 1000000000, + "data": { + "object": { + "amount": 176000, + "amount_captured": 176000, + "amount_refunded": 0, + "application": null, + "application_fee": null, + "application_fee_amount": null, + "balance_transaction": "txn_NORMALIZED00000000000001", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null + }, + "calculated_statement_descriptor": "ZULIP BUSINESS", + "captured": true, + "created": 1000000000, + "currency": "usd", + "customer": "cus_NORMALIZED0001", + "description": "Upgrade to Zulip Business, $80.0 x 25 - $20.0 x 12", + "destination": null, + "dispute": null, + "disputed": false, + "failure_balance_transaction": null, + "failure_code": null, + "failure_message": null, + "fraud_details": {}, + "id": "ch_NORMALIZED00000000000001", + "invoice": null, + "livemode": false, + "metadata": { + "billing_modality": "charge_automatically", + "billing_schedule": "1", + "license_management": "automatic", + "licenses": "25", + "plan_tier": "104", + "price_per_license": "8000", + "remote_realm_host": "zulip.testserver", + "remote_realm_user_email": "hamlet@zulip.com", + "remote_realm_user_id": "1", + "seat_count": "25", + "type": "upgrade" + }, + "object": "charge", + "on_behalf_of": null, + "order": null, + "outcome": { + "network_status": "approved_by_network", + "reason": null, + "risk_level": "normal", + "risk_score": 0, + "seller_message": "Payment complete.", + "type": "authorized" + }, + "paid": true, + "payment_intent": "pi_NORMALIZED00000000000001", + "payment_method": "pm_1OU9PaDEQaroqDjsGx03hXTa", + "payment_method_details": { + "card": { + "amount_authorized": 176000, + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "pass" + }, + "country": "US", + "exp_month": 1, + "exp_year": 2025, + "extended_authorization": { + "status": "disabled" + }, + "fingerprint": "NORMALIZED000001", + "funding": "credit", + "incremental_authorization": { + "status": "unavailable" + }, + "installments": null, + "last4": "4242", + "mandate": null, + "multicapture": { + "status": "unavailable" + }, + "network": "visa", + "network_token": { + "used": false + }, + "overcapture": { + "maximum_amount_capturable": 176000, + "status": "unavailable" + }, + "three_d_secure": null, + "wallet": null + }, + "type": "card" + }, + "radar_options": {}, + "receipt_email": "hamlet@zulip.com", + "receipt_number": null, + "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xN3ZUa3dERVFhcm9xRGpzKPDI0KwGMgbOmZ2BLf46LBb9wsB2sIbC-5qTRN7Me-qxWT0ovjZLXPPYrMnM9jh431aGUFOQD4dDMclx", + "refunded": false, + "refunds": { + "data": [], + "has_more": false, + "object": "list", + "total_count": 0, + "url": "/v1/charges/ch_NORMALIZED00000000000001/refunds" + }, + "review": null, + "shipping": null, + "source": null, + "source_transfer": null, + "statement_descriptor": "Zulip Business", + "statement_descriptor_suffix": null, + "status": "succeeded", + "transfer_data": null, + "transfer_group": null + } + }, + "id": "evt_3OU9PfDEQaroqDjs0ZbaWess", + "livemode": false, + "object": "event", + "pending_webhooks": 0, + "request": { + "id": "req_NORMALIZED0002", + "idempotency_key": "49e94d0e-f884-4533-a417-a117f1cab05d" + }, + "type": "charge.succeeded" + }, + { + "api_version": "2020-08-27", + "created": 1000000000, + "data": { + "object": { + "amount": 176000, + "amount_capturable": 0, + "amount_details": { + "tip": {} + }, + "amount_received": 0, + "application": null, + "application_fee_amount": null, + "automatic_payment_methods": null, + "canceled_at": null, + "cancellation_reason": null, + "capture_method": "automatic", + "charges": { + "data": [], + "has_more": false, + "object": "list", + "total_count": 0, + "url": "/v1/charges?payment_intent=pi_NORMALIZED00000000000001" + }, + "client_secret": "pi_NORMALIZED00000000000001_secret_McKpCnN1iYSvPzaFuXX8l8tiw", + "confirmation_method": "automatic", + "created": 1000000000, + "currency": "usd", + "customer": "cus_NORMALIZED0001", + "description": "Upgrade to Zulip Business, $80.0 x 25 - $20.0 x 12", + "id": "pi_NORMALIZED00000000000001", + "invoice": null, + "last_payment_error": null, + "latest_charge": null, + "livemode": false, + "metadata": { + "billing_modality": "charge_automatically", + "billing_schedule": "1", + "license_management": "automatic", + "licenses": "25", + "plan_tier": "104", + "price_per_license": "8000", + "remote_realm_host": "zulip.testserver", + "remote_realm_user_email": "hamlet@zulip.com", + "remote_realm_user_id": "1", + "seat_count": "25", + "type": "upgrade" + }, + "next_action": null, + "object": "payment_intent", + "on_behalf_of": null, + "payment_method": null, + "payment_method_configuration_details": null, + "payment_method_options": { + "card": { + "installments": null, + "mandate_options": null, + "network": null, + "request_three_d_secure": "automatic" + } + }, + "payment_method_types": [ + "card" + ], + "processing": null, + "receipt_email": "hamlet@zulip.com", + "review": null, + "setup_future_usage": null, + "shipping": null, + "source": null, + "statement_descriptor": "Zulip Business", + "statement_descriptor_suffix": null, + "status": "requires_payment_method", + "transfer_data": null, + "transfer_group": null + } + }, + "id": "evt_3OU9PfDEQaroqDjs0KnTwM15", + "livemode": false, + "object": "event", + "pending_webhooks": 0, + "request": { + "id": "req_NORMALIZED0002", + "idempotency_key": "49e94d0e-f884-4533-a417-a117f1cab05d" + }, + "type": "payment_intent.created" + } + ], + "has_more": false, + "object": "list", + "url": "/v1/events" +} diff --git a/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Event.list.3.json b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Event.list.3.json new file mode 100644 index 0000000000..49f2408e18 --- /dev/null +++ b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Event.list.3.json @@ -0,0 +1,1085 @@ +{ + "data": [ + { + "api_version": "2020-08-27", + "created": 1000000000, + "data": { + "object": { + "account_country": "US", + "account_name": "Kandra Labs, Inc.", + "account_tax_ids": null, + "amount_due": 0, + "amount_paid": 0, + "amount_remaining": 0, + "amount_shipping": 0, + "application": null, + "application_fee_amount": null, + "attempt_count": 0, + "attempted": true, + "auto_advance": false, + "automatic_tax": { + "enabled": false, + "status": null + }, + "billing_reason": "manual", + "charge": null, + "collection_method": "charge_automatically", + "created": 1000000000, + "currency": "usd", + "custom_fields": null, + "customer": "cus_NORMALIZED0001", + "customer_address": null, + "customer_email": "hamlet@zulip.com", + "customer_name": null, + "customer_phone": null, + "customer_shipping": null, + "customer_tax_exempt": "none", + "customer_tax_ids": [], + "default_payment_method": null, + "default_source": null, + "default_tax_rates": [], + "description": null, + "discount": null, + "discounts": [], + "due_date": null, + "effective_at": 1000000000, + "ending_balance": 0, + "footer": null, + "from_invoice": null, + "hosted_invoice_url": "https://invoice.stripe.com/i/acct_NORMALIZED000001/test_NORMALIZED01a3dERVFhcm9xRGpzLF9QSWt2TDdZa2t2OXRpNDlvb1N5SjRtaDhJc3FUSEczLDk0NzQ4Mjc20200QUrGT3fA?s=ap", + "id": "in_NORMALIZED00000000000001", + "invoice_pdf": "https://pay.stripe.com/invoice/acct_NORMALIZED000001/test_NORMALIZED01a3dERVFhcm9xRGpzLF9QSWt2TDdZa2t2OXRpNDlvb1N5SjRtaDhJc3FUSEczLDk0NzQ4Mjc20200QUrGT3fA/pdf?s=ap", + "last_finalization_error": null, + "latest_revision": null, + "lines": { + "data": [ + { + "amount": -24000, + "amount_excluding_tax": -24000, + "currency": "usd", + "description": "$2000/month new customer discount", + "discount_amounts": [], + "discountable": false, + "discounts": [], + "id": "il_NORMALIZED00000000000001", + "invoice_item": "ii_NORMALIZED00000000000001", + "livemode": false, + "metadata": {}, + "object": "line_item", + "period": { + "end": 1000000000, + "start": 1000000000 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000001", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0001", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": -24000, + "unit_amount_decimal": "-24000" + }, + "proration": false, + "proration_details": { + "credited_items": null + }, + "quantity": 1, + "subscription": null, + "tax_amounts": [], + "tax_rates": [], + "type": "invoiceitem", + "unit_amount_excluding_tax": "-24000" + }, + { + "amount": 200000, + "amount_excluding_tax": 200000, + "currency": "usd", + "description": "Zulip Business", + "discount_amounts": [], + "discountable": false, + "discounts": [], + "id": "il_NORMALIZED00000000000002", + "invoice_item": "ii_NORMALIZED00000000000002", + "livemode": false, + "metadata": {}, + "object": "line_item", + "period": { + "end": 1357095845, + "start": 1325473445 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000002", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0002", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": 8000, + "unit_amount_decimal": "8000" + }, + "proration": false, + "proration_details": { + "credited_items": null + }, + "quantity": 25, + "subscription": null, + "tax_amounts": [], + "tax_rates": [], + "type": "invoiceitem", + "unit_amount_excluding_tax": "8000" + }, + { + "amount": -176000, + "amount_excluding_tax": -176000, + "currency": "usd", + "description": "Payment (Card ending in 4242)", + "discount_amounts": [], + "discountable": false, + "discounts": [], + "id": "il_NORMALIZED00000000000003", + "invoice_item": "ii_NORMALIZED00000000000003", + "livemode": false, + "metadata": {}, + "object": "line_item", + "period": { + "end": 1000000000, + "start": 1000000000 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000003", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0003", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": -176000, + "unit_amount_decimal": "-176000" + }, + "proration": false, + "proration_details": { + "credited_items": null + }, + "quantity": 1, + "subscription": null, + "tax_amounts": [], + "tax_rates": [], + "type": "invoiceitem", + "unit_amount_excluding_tax": "-176000" + } + ], + "has_more": false, + "object": "list", + "total_count": 3, + "url": "/v1/invoices/in_NORMALIZED00000000000001/lines" + }, + "livemode": false, + "metadata": {}, + "next_payment_attempt": null, + "number": "NORMALI-0001", + "object": "invoice", + "on_behalf_of": null, + "paid": true, + "paid_out_of_band": false, + "payment_intent": null, + "payment_settings": { + "default_mandate": null, + "payment_method_options": null, + "payment_method_types": null + }, + "period_end": 1000000000, + "period_start": 1000000000, + "post_payment_credit_notes_amount": 0, + "pre_payment_credit_notes_amount": 0, + "quote": null, + "receipt_number": null, + "rendering": { + "amount_tax_display": null, + "pdf": { + "page_size": "letter" + } + }, + "rendering_options": null, + "shipping_cost": null, + "shipping_details": null, + "starting_balance": 0, + "statement_descriptor": "Zulip Business", + "status": "paid", + "status_transitions": { + "finalized_at": 1000000000, + "marked_uncollectible_at": null, + "paid_at": 1000000000, + "voided_at": null + }, + "subscription": null, + "subscription_details": { + "metadata": null + }, + "subtotal": 0, + "subtotal_excluding_tax": 0, + "tax": null, + "test_clock": null, + "total": 0, + "total_discount_amounts": [], + "total_excluding_tax": 0, + "total_tax_amounts": [], + "transfer_data": null, + "webhooks_delivered_at": 1000000000 + } + }, + "id": "evt_1OU9PkDEQaroqDjsk9SIR62x", + "livemode": false, + "object": "event", + "pending_webhooks": 0, + "request": { + "id": "req_NORMALIZED0003", + "idempotency_key": "3993f5c2-ee06-4eb7-8ea9-7f902bd12012" + }, + "type": "invoice.finalized" + }, + { + "api_version": "2020-08-27", + "created": 1000000000, + "data": { + "object": { + "account_country": "US", + "account_name": "Kandra Labs, Inc.", + "account_tax_ids": null, + "amount_due": 0, + "amount_paid": 0, + "amount_remaining": 0, + "amount_shipping": 0, + "application": null, + "application_fee_amount": null, + "attempt_count": 0, + "attempted": true, + "auto_advance": false, + "automatic_tax": { + "enabled": false, + "status": null + }, + "billing_reason": "manual", + "charge": null, + "collection_method": "charge_automatically", + "created": 1000000000, + "currency": "usd", + "custom_fields": null, + "customer": "cus_NORMALIZED0001", + "customer_address": null, + "customer_email": "hamlet@zulip.com", + "customer_name": null, + "customer_phone": null, + "customer_shipping": null, + "customer_tax_exempt": "none", + "customer_tax_ids": [], + "default_payment_method": null, + "default_source": null, + "default_tax_rates": [], + "description": null, + "discount": null, + "discounts": [], + "due_date": null, + "effective_at": 1000000000, + "ending_balance": 0, + "footer": null, + "from_invoice": null, + "hosted_invoice_url": "https://invoice.stripe.com/i/acct_NORMALIZED000001/test_NORMALIZED01a3dERVFhcm9xRGpzLF9QSWt2TDdZa2t2OXRpNDlvb1N5SjRtaDhJc3FUSEczLDk0NzQ4Mjc20200QUrGT3fA?s=ap", + "id": "in_NORMALIZED00000000000001", + "invoice_pdf": "https://pay.stripe.com/invoice/acct_NORMALIZED000001/test_NORMALIZED01a3dERVFhcm9xRGpzLF9QSWt2TDdZa2t2OXRpNDlvb1N5SjRtaDhJc3FUSEczLDk0NzQ4Mjc20200QUrGT3fA/pdf?s=ap", + "last_finalization_error": null, + "latest_revision": null, + "lines": { + "data": [ + { + "amount": -24000, + "amount_excluding_tax": -24000, + "currency": "usd", + "description": "$2000/month new customer discount", + "discount_amounts": [], + "discountable": false, + "discounts": [], + "id": "il_NORMALIZED00000000000001", + "invoice_item": "ii_NORMALIZED00000000000001", + "livemode": false, + "metadata": {}, + "object": "line_item", + "period": { + "end": 1000000000, + "start": 1000000000 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000001", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0001", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": -24000, + "unit_amount_decimal": "-24000" + }, + "proration": false, + "proration_details": { + "credited_items": null + }, + "quantity": 1, + "subscription": null, + "tax_amounts": [], + "tax_rates": [], + "type": "invoiceitem", + "unit_amount_excluding_tax": "-24000" + }, + { + "amount": 200000, + "amount_excluding_tax": 200000, + "currency": "usd", + "description": "Zulip Business", + "discount_amounts": [], + "discountable": false, + "discounts": [], + "id": "il_NORMALIZED00000000000002", + "invoice_item": "ii_NORMALIZED00000000000002", + "livemode": false, + "metadata": {}, + "object": "line_item", + "period": { + "end": 1357095845, + "start": 1325473445 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000002", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0002", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": 8000, + "unit_amount_decimal": "8000" + }, + "proration": false, + "proration_details": { + "credited_items": null + }, + "quantity": 25, + "subscription": null, + "tax_amounts": [], + "tax_rates": [], + "type": "invoiceitem", + "unit_amount_excluding_tax": "8000" + }, + { + "amount": -176000, + "amount_excluding_tax": -176000, + "currency": "usd", + "description": "Payment (Card ending in 4242)", + "discount_amounts": [], + "discountable": false, + "discounts": [], + "id": "il_NORMALIZED00000000000003", + "invoice_item": "ii_NORMALIZED00000000000003", + "livemode": false, + "metadata": {}, + "object": "line_item", + "period": { + "end": 1000000000, + "start": 1000000000 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000003", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0003", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": -176000, + "unit_amount_decimal": "-176000" + }, + "proration": false, + "proration_details": { + "credited_items": null + }, + "quantity": 1, + "subscription": null, + "tax_amounts": [], + "tax_rates": [], + "type": "invoiceitem", + "unit_amount_excluding_tax": "-176000" + } + ], + "has_more": false, + "object": "list", + "total_count": 3, + "url": "/v1/invoices/in_NORMALIZED00000000000001/lines" + }, + "livemode": false, + "metadata": {}, + "next_payment_attempt": null, + "number": "NORMALI-0001", + "object": "invoice", + "on_behalf_of": null, + "paid": true, + "paid_out_of_band": false, + "payment_intent": null, + "payment_settings": { + "default_mandate": null, + "payment_method_options": null, + "payment_method_types": null + }, + "period_end": 1000000000, + "period_start": 1000000000, + "post_payment_credit_notes_amount": 0, + "pre_payment_credit_notes_amount": 0, + "quote": null, + "receipt_number": null, + "rendering": { + "amount_tax_display": null, + "pdf": { + "page_size": "letter" + } + }, + "rendering_options": null, + "shipping_cost": null, + "shipping_details": null, + "starting_balance": 0, + "statement_descriptor": "Zulip Business", + "status": "paid", + "status_transitions": { + "finalized_at": 1000000000, + "marked_uncollectible_at": null, + "paid_at": 1000000000, + "voided_at": null + }, + "subscription": null, + "subscription_details": { + "metadata": null + }, + "subtotal": 0, + "subtotal_excluding_tax": 0, + "tax": null, + "test_clock": null, + "total": 0, + "total_discount_amounts": [], + "total_excluding_tax": 0, + "total_tax_amounts": [], + "transfer_data": null, + "webhooks_delivered_at": 1000000000 + }, + "previous_attributes": { + "attempted": false, + "auto_advance": true, + "effective_at": null, + "ending_balance": null, + "hosted_invoice_url": null, + "invoice_pdf": null, + "next_payment_attempt": 1000000000, + "number": null, + "paid": false, + "rendering": { + "pdf": { + "page_size": "auto" + } + }, + "status": "draft", + "status_transitions": { + "finalized_at": null, + "paid_at": null + } + } + }, + "id": "evt_1OU9PkDEQaroqDjswpXhc0BW", + "livemode": false, + "object": "event", + "pending_webhooks": 0, + "request": { + "id": "req_NORMALIZED0003", + "idempotency_key": "3993f5c2-ee06-4eb7-8ea9-7f902bd12012" + }, + "type": "invoice.updated" + }, + { + "api_version": "2020-08-27", + "created": 1000000000, + "data": { + "object": { + "account_country": "US", + "account_name": "Kandra Labs, Inc.", + "account_tax_ids": null, + "amount_due": 0, + "amount_paid": 0, + "amount_remaining": 0, + "amount_shipping": 0, + "application": null, + "application_fee_amount": null, + "attempt_count": 0, + "attempted": false, + "auto_advance": true, + "automatic_tax": { + "enabled": false, + "status": null + }, + "billing_reason": "manual", + "charge": null, + "collection_method": "charge_automatically", + "created": 1000000000, + "currency": "usd", + "custom_fields": null, + "customer": "cus_NORMALIZED0001", + "customer_address": null, + "customer_email": "hamlet@zulip.com", + "customer_name": null, + "customer_phone": null, + "customer_shipping": null, + "customer_tax_exempt": "none", + "customer_tax_ids": [], + "default_payment_method": null, + "default_source": null, + "default_tax_rates": [], + "description": null, + "discount": null, + "discounts": [], + "due_date": null, + "effective_at": null, + "ending_balance": null, + "footer": null, + "from_invoice": null, + "hosted_invoice_url": null, + "id": "in_NORMALIZED00000000000001", + "invoice_pdf": null, + "last_finalization_error": null, + "latest_revision": null, + "lines": { + "data": [ + { + "amount": -24000, + "amount_excluding_tax": -24000, + "currency": "usd", + "description": "$2000/month new customer discount", + "discount_amounts": [], + "discountable": false, + "discounts": [], + "id": "il_NORMALIZED00000000000001", + "invoice_item": "ii_NORMALIZED00000000000001", + "livemode": false, + "metadata": {}, + "object": "line_item", + "period": { + "end": 1000000000, + "start": 1000000000 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000001", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0001", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": -24000, + "unit_amount_decimal": "-24000" + }, + "proration": false, + "proration_details": { + "credited_items": null + }, + "quantity": 1, + "subscription": null, + "tax_amounts": [], + "tax_rates": [], + "type": "invoiceitem", + "unit_amount_excluding_tax": "-24000" + }, + { + "amount": 200000, + "amount_excluding_tax": 200000, + "currency": "usd", + "description": "Zulip Business", + "discount_amounts": [], + "discountable": false, + "discounts": [], + "id": "il_NORMALIZED00000000000002", + "invoice_item": "ii_NORMALIZED00000000000002", + "livemode": false, + "metadata": {}, + "object": "line_item", + "period": { + "end": 1357095845, + "start": 1325473445 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000002", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0002", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": 8000, + "unit_amount_decimal": "8000" + }, + "proration": false, + "proration_details": { + "credited_items": null + }, + "quantity": 25, + "subscription": null, + "tax_amounts": [], + "tax_rates": [], + "type": "invoiceitem", + "unit_amount_excluding_tax": "8000" + }, + { + "amount": -176000, + "amount_excluding_tax": -176000, + "currency": "usd", + "description": "Payment (Card ending in 4242)", + "discount_amounts": [], + "discountable": false, + "discounts": [], + "id": "il_NORMALIZED00000000000003", + "invoice_item": "ii_NORMALIZED00000000000003", + "livemode": false, + "metadata": {}, + "object": "line_item", + "period": { + "end": 1000000000, + "start": 1000000000 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000003", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0003", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": -176000, + "unit_amount_decimal": "-176000" + }, + "proration": false, + "proration_details": { + "credited_items": null + }, + "quantity": 1, + "subscription": null, + "tax_amounts": [], + "tax_rates": [], + "type": "invoiceitem", + "unit_amount_excluding_tax": "-176000" + } + ], + "has_more": false, + "object": "list", + "total_count": 3, + "url": "/v1/invoices/in_NORMALIZED00000000000001/lines" + }, + "livemode": false, + "metadata": {}, + "next_payment_attempt": 1000000000, + "number": null, + "object": "invoice", + "on_behalf_of": null, + "paid": false, + "paid_out_of_band": false, + "payment_intent": null, + "payment_settings": { + "default_mandate": null, + "payment_method_options": null, + "payment_method_types": null + }, + "period_end": 1000000000, + "period_start": 1000000000, + "post_payment_credit_notes_amount": 0, + "pre_payment_credit_notes_amount": 0, + "quote": null, + "receipt_number": null, + "rendering": { + "amount_tax_display": null, + "pdf": { + "page_size": "auto" + } + }, + "rendering_options": null, + "shipping_cost": null, + "shipping_details": null, + "starting_balance": 0, + "statement_descriptor": "Zulip Business", + "status": "draft", + "status_transitions": { + "finalized_at": null, + "marked_uncollectible_at": null, + "paid_at": null, + "voided_at": null + }, + "subscription": null, + "subscription_details": { + "metadata": null + }, + "subtotal": 0, + "subtotal_excluding_tax": 0, + "tax": null, + "test_clock": null, + "total": 0, + "total_discount_amounts": [], + "total_excluding_tax": 0, + "total_tax_amounts": [], + "transfer_data": null, + "webhooks_delivered_at": 1000000000 + } + }, + "id": "evt_1OU9PjDEQaroqDjsb64x05g4", + "livemode": false, + "object": "event", + "pending_webhooks": 0, + "request": { + "id": "req_NORMALIZED0004", + "idempotency_key": "790c6934-07bd-435a-88fc-b7c06c0c9d06" + }, + "type": "invoice.created" + }, + { + "api_version": "2020-08-27", + "created": 1000000000, + "data": { + "object": { + "amount": -24000, + "currency": "usd", + "customer": "cus_NORMALIZED0001", + "date": 1000000000, + "description": "$2000/month new customer discount", + "discountable": false, + "discounts": [], + "id": "ii_NORMALIZED00000000000001", + "invoice": null, + "livemode": false, + "metadata": {}, + "object": "invoiceitem", + "period": { + "end": 1000000000, + "start": 1000000000 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000001", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0001", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": -24000, + "unit_amount_decimal": "-24000" + }, + "proration": false, + "quantity": 1, + "subscription": null, + "tax_rates": [], + "test_clock": null, + "unit_amount": -24000, + "unit_amount_decimal": "-24000" + } + }, + "id": "evt_1OU9PiDEQaroqDjsKlUOn1WE", + "livemode": false, + "object": "event", + "pending_webhooks": 0, + "request": { + "id": "req_NORMALIZED0005", + "idempotency_key": "0ce4ef95-53d7-43ec-85c0-f46c30a4848d" + }, + "type": "invoiceitem.created" + }, + { + "api_version": "2020-08-27", + "created": 1000000000, + "data": { + "object": { + "amount": 200000, + "currency": "usd", + "customer": "cus_NORMALIZED0001", + "date": 1000000000, + "description": "Zulip Business", + "discountable": false, + "discounts": [], + "id": "ii_NORMALIZED00000000000002", + "invoice": null, + "livemode": false, + "metadata": {}, + "object": "invoiceitem", + "period": { + "end": 1357095845, + "start": 1325473445 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000002", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0002", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": 8000, + "unit_amount_decimal": "8000" + }, + "proration": false, + "quantity": 25, + "subscription": null, + "tax_rates": [], + "test_clock": null, + "unit_amount": 8000, + "unit_amount_decimal": "8000" + } + }, + "id": "evt_1OU9PiDEQaroqDjsO3AWLetY", + "livemode": false, + "object": "event", + "pending_webhooks": 0, + "request": { + "id": "req_NORMALIZED0006", + "idempotency_key": "8e6488ea-7e79-4fa9-beea-e9107467812c" + }, + "type": "invoiceitem.created" + }, + { + "api_version": "2020-08-27", + "created": 1000000000, + "data": { + "object": { + "amount": -176000, + "currency": "usd", + "customer": "cus_NORMALIZED0001", + "date": 1000000000, + "description": "Payment (Card ending in 4242)", + "discountable": false, + "discounts": [], + "id": "ii_NORMALIZED00000000000003", + "invoice": null, + "livemode": false, + "metadata": {}, + "object": "invoiceitem", + "period": { + "end": 1000000000, + "start": 1000000000 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000003", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0003", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": -176000, + "unit_amount_decimal": "-176000" + }, + "proration": false, + "quantity": 1, + "subscription": null, + "tax_rates": [], + "test_clock": null, + "unit_amount": -176000, + "unit_amount_decimal": "-176000" + } + }, + "id": "evt_1OU9PhDEQaroqDjsEua2CYdO", + "livemode": false, + "object": "event", + "pending_webhooks": 0, + "request": { + "id": "req_NORMALIZED0007", + "idempotency_key": "1a7d3abb-cca5-48b5-be12-a4ef08a3f0a0" + }, + "type": "invoiceitem.created" + }, + { + "api_version": "2020-08-27", + "created": 1000000000, + "data": { + "object": { + "address": null, + "balance": 0, + "created": 1000000000, + "currency": "usd", + "default_currency": "usd", + "default_source": null, + "delinquent": false, + "description": "zulip.testserver 129af42f-9cd", + "discount": null, + "email": "hamlet@zulip.com", + "id": "cus_NORMALIZED0001", + "invoice_prefix": "NORMA01", + "invoice_settings": { + "custom_fields": null, + "default_payment_method": "pm_1OU9PaDEQaroqDjsGx03hXTa", + "footer": null, + "rendering_options": null + }, + "livemode": false, + "metadata": { + "remote_realm_host": "zulip.testserver", + "remote_realm_uuid": "129af42f-9cd2-47a3-9001-d4de8c3824e0" + }, + "name": null, + "next_invoice_sequence": 1, + "object": "customer", + "phone": null, + "preferred_locales": [], + "shipping": null, + "tax_exempt": "none", + "test_clock": null + }, + "previous_attributes": { + "currency": null, + "default_currency": null + } + }, + "id": "evt_1OU9PhDEQaroqDjsSweOubUb", + "livemode": false, + "object": "event", + "pending_webhooks": 0, + "request": { + "id": "req_NORMALIZED0007", + "idempotency_key": "1a7d3abb-cca5-48b5-be12-a4ef08a3f0a0" + }, + "type": "customer.updated" + } + ], + "has_more": false, + "object": "list", + "url": "/v1/events" +} diff --git a/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Event.list.4.json b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Event.list.4.json new file mode 100644 index 0000000000..514704e645 --- /dev/null +++ b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Event.list.4.json @@ -0,0 +1,553 @@ +{ + "data": [ + { + "api_version": "2020-08-27", + "created": 1000000000, + "data": { + "object": { + "account_country": "US", + "account_name": "Kandra Labs, Inc.", + "account_tax_ids": null, + "amount_due": 0, + "amount_paid": 0, + "amount_remaining": 0, + "amount_shipping": 0, + "application": null, + "application_fee_amount": null, + "attempt_count": 0, + "attempted": true, + "auto_advance": false, + "automatic_tax": { + "enabled": false, + "status": null + }, + "billing_reason": "manual", + "charge": null, + "collection_method": "charge_automatically", + "created": 1000000000, + "currency": "usd", + "custom_fields": null, + "customer": "cus_NORMALIZED0001", + "customer_address": null, + "customer_email": "hamlet@zulip.com", + "customer_name": null, + "customer_phone": null, + "customer_shipping": null, + "customer_tax_exempt": "none", + "customer_tax_ids": [], + "default_payment_method": null, + "default_source": null, + "default_tax_rates": [], + "description": null, + "discount": null, + "discounts": [], + "due_date": null, + "effective_at": 1000000000, + "ending_balance": 0, + "footer": null, + "from_invoice": null, + "hosted_invoice_url": "https://invoice.stripe.com/i/acct_NORMALIZED000001/test_NORMALIZED01a3dERVFhcm9xRGpzLF9QSWt2TDdZa2t2OXRpNDlvb1N5SjRtaDhJc3FUSEczLDk0NzQ4Mjc302000mgdSbmN?s=ap", + "id": "in_NORMALIZED00000000000001", + "invoice_pdf": "https://pay.stripe.com/invoice/acct_NORMALIZED000001/test_NORMALIZED01a3dERVFhcm9xRGpzLF9QSWt2TDdZa2t2OXRpNDlvb1N5SjRtaDhJc3FUSEczLDk0NzQ4Mjc302000mgdSbmN/pdf?s=ap", + "last_finalization_error": null, + "latest_revision": null, + "lines": { + "data": [ + { + "amount": -24000, + "amount_excluding_tax": -24000, + "currency": "usd", + "description": "$2000/month new customer discount", + "discount_amounts": [], + "discountable": false, + "discounts": [], + "id": "il_NORMALIZED00000000000001", + "invoice_item": "ii_NORMALIZED00000000000001", + "livemode": false, + "metadata": {}, + "object": "line_item", + "period": { + "end": 1000000000, + "start": 1000000000 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000001", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0001", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": -24000, + "unit_amount_decimal": "-24000" + }, + "proration": false, + "proration_details": { + "credited_items": null + }, + "quantity": 1, + "subscription": null, + "tax_amounts": [], + "tax_rates": [], + "type": "invoiceitem", + "unit_amount_excluding_tax": "-24000" + }, + { + "amount": 200000, + "amount_excluding_tax": 200000, + "currency": "usd", + "description": "Zulip Business", + "discount_amounts": [], + "discountable": false, + "discounts": [], + "id": "il_NORMALIZED00000000000002", + "invoice_item": "ii_NORMALIZED00000000000002", + "livemode": false, + "metadata": {}, + "object": "line_item", + "period": { + "end": 1357095845, + "start": 1325473445 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000002", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0002", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": 8000, + "unit_amount_decimal": "8000" + }, + "proration": false, + "proration_details": { + "credited_items": null + }, + "quantity": 25, + "subscription": null, + "tax_amounts": [], + "tax_rates": [], + "type": "invoiceitem", + "unit_amount_excluding_tax": "8000" + }, + { + "amount": -176000, + "amount_excluding_tax": -176000, + "currency": "usd", + "description": "Payment (Card ending in 4242)", + "discount_amounts": [], + "discountable": false, + "discounts": [], + "id": "il_NORMALIZED00000000000003", + "invoice_item": "ii_NORMALIZED00000000000003", + "livemode": false, + "metadata": {}, + "object": "line_item", + "period": { + "end": 1000000000, + "start": 1000000000 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000003", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0003", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": -176000, + "unit_amount_decimal": "-176000" + }, + "proration": false, + "proration_details": { + "credited_items": null + }, + "quantity": 1, + "subscription": null, + "tax_amounts": [], + "tax_rates": [], + "type": "invoiceitem", + "unit_amount_excluding_tax": "-176000" + } + ], + "has_more": false, + "object": "list", + "total_count": 3, + "url": "/v1/invoices/in_NORMALIZED00000000000001/lines" + }, + "livemode": false, + "metadata": {}, + "next_payment_attempt": null, + "number": "NORMALI-0002", + "object": "invoice", + "on_behalf_of": null, + "paid": true, + "paid_out_of_band": false, + "payment_intent": null, + "payment_settings": { + "default_mandate": null, + "payment_method_options": null, + "payment_method_types": null + }, + "period_end": 1000000000, + "period_start": 1000000000, + "post_payment_credit_notes_amount": 0, + "pre_payment_credit_notes_amount": 0, + "quote": null, + "receipt_number": null, + "rendering": { + "amount_tax_display": null, + "pdf": { + "page_size": "letter" + } + }, + "rendering_options": null, + "shipping_cost": null, + "shipping_details": null, + "starting_balance": 0, + "statement_descriptor": "Zulip Business", + "status": "paid", + "status_transitions": { + "finalized_at": 1000000000, + "marked_uncollectible_at": null, + "paid_at": 1000000000, + "voided_at": null + }, + "subscription": null, + "subscription_details": { + "metadata": null + }, + "subtotal": 0, + "subtotal_excluding_tax": 0, + "tax": null, + "test_clock": null, + "total": 0, + "total_discount_amounts": [], + "total_excluding_tax": 0, + "total_tax_amounts": [], + "transfer_data": null, + "webhooks_delivered_at": 1000000000 + } + }, + "id": "evt_1OU9PlDEQaroqDjsXE86DQ0K", + "livemode": false, + "object": "event", + "pending_webhooks": 0, + "request": { + "id": "req_NORMALIZED0003", + "idempotency_key": "3993f5c2-ee06-4eb7-8ea9-7f902bd12012" + }, + "type": "invoice.payment_succeeded" + }, + { + "api_version": "2020-08-27", + "created": 1000000000, + "data": { + "object": { + "account_country": "US", + "account_name": "Kandra Labs, Inc.", + "account_tax_ids": null, + "amount_due": 0, + "amount_paid": 0, + "amount_remaining": 0, + "amount_shipping": 0, + "application": null, + "application_fee_amount": null, + "attempt_count": 0, + "attempted": true, + "auto_advance": false, + "automatic_tax": { + "enabled": false, + "status": null + }, + "billing_reason": "manual", + "charge": null, + "collection_method": "charge_automatically", + "created": 1000000000, + "currency": "usd", + "custom_fields": null, + "customer": "cus_NORMALIZED0001", + "customer_address": null, + "customer_email": "hamlet@zulip.com", + "customer_name": null, + "customer_phone": null, + "customer_shipping": null, + "customer_tax_exempt": "none", + "customer_tax_ids": [], + "default_payment_method": null, + "default_source": null, + "default_tax_rates": [], + "description": null, + "discount": null, + "discounts": [], + "due_date": null, + "effective_at": 1000000000, + "ending_balance": 0, + "footer": null, + "from_invoice": null, + "hosted_invoice_url": "https://invoice.stripe.com/i/acct_NORMALIZED000001/test_NORMALIZED01a3dERVFhcm9xRGpzLF9QSWt2TDdZa2t2OXRpNDlvb1N5SjRtaDhJc3FUSEczLDk0NzQ4Mjc20200QUrGT3fA?s=ap", + "id": "in_NORMALIZED00000000000001", + "invoice_pdf": "https://pay.stripe.com/invoice/acct_NORMALIZED000001/test_NORMALIZED01a3dERVFhcm9xRGpzLF9QSWt2TDdZa2t2OXRpNDlvb1N5SjRtaDhJc3FUSEczLDk0NzQ4Mjc20200QUrGT3fA/pdf?s=ap", + "last_finalization_error": null, + "latest_revision": null, + "lines": { + "data": [ + { + "amount": -24000, + "amount_excluding_tax": -24000, + "currency": "usd", + "description": "$2000/month new customer discount", + "discount_amounts": [], + "discountable": false, + "discounts": [], + "id": "il_NORMALIZED00000000000001", + "invoice_item": "ii_NORMALIZED00000000000001", + "livemode": false, + "metadata": {}, + "object": "line_item", + "period": { + "end": 1000000000, + "start": 1000000000 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000001", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0001", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": -24000, + "unit_amount_decimal": "-24000" + }, + "proration": false, + "proration_details": { + "credited_items": null + }, + "quantity": 1, + "subscription": null, + "tax_amounts": [], + "tax_rates": [], + "type": "invoiceitem", + "unit_amount_excluding_tax": "-24000" + }, + { + "amount": 200000, + "amount_excluding_tax": 200000, + "currency": "usd", + "description": "Zulip Business", + "discount_amounts": [], + "discountable": false, + "discounts": [], + "id": "il_NORMALIZED00000000000002", + "invoice_item": "ii_NORMALIZED00000000000002", + "livemode": false, + "metadata": {}, + "object": "line_item", + "period": { + "end": 1357095845, + "start": 1325473445 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000002", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0002", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": 8000, + "unit_amount_decimal": "8000" + }, + "proration": false, + "proration_details": { + "credited_items": null + }, + "quantity": 25, + "subscription": null, + "tax_amounts": [], + "tax_rates": [], + "type": "invoiceitem", + "unit_amount_excluding_tax": "8000" + }, + { + "amount": -176000, + "amount_excluding_tax": -176000, + "currency": "usd", + "description": "Payment (Card ending in 4242)", + "discount_amounts": [], + "discountable": false, + "discounts": [], + "id": "il_NORMALIZED00000000000003", + "invoice_item": "ii_NORMALIZED00000000000003", + "livemode": false, + "metadata": {}, + "object": "line_item", + "period": { + "end": 1000000000, + "start": 1000000000 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000003", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0003", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": -176000, + "unit_amount_decimal": "-176000" + }, + "proration": false, + "proration_details": { + "credited_items": null + }, + "quantity": 1, + "subscription": null, + "tax_amounts": [], + "tax_rates": [], + "type": "invoiceitem", + "unit_amount_excluding_tax": "-176000" + } + ], + "has_more": false, + "object": "list", + "total_count": 3, + "url": "/v1/invoices/in_NORMALIZED00000000000001/lines" + }, + "livemode": false, + "metadata": {}, + "next_payment_attempt": null, + "number": "NORMALI-0002", + "object": "invoice", + "on_behalf_of": null, + "paid": true, + "paid_out_of_band": false, + "payment_intent": null, + "payment_settings": { + "default_mandate": null, + "payment_method_options": null, + "payment_method_types": null + }, + "period_end": 1000000000, + "period_start": 1000000000, + "post_payment_credit_notes_amount": 0, + "pre_payment_credit_notes_amount": 0, + "quote": null, + "receipt_number": null, + "rendering": { + "amount_tax_display": null, + "pdf": { + "page_size": "letter" + } + }, + "rendering_options": null, + "shipping_cost": null, + "shipping_details": null, + "starting_balance": 0, + "statement_descriptor": "Zulip Business", + "status": "paid", + "status_transitions": { + "finalized_at": 1000000000, + "marked_uncollectible_at": null, + "paid_at": 1000000000, + "voided_at": null + }, + "subscription": null, + "subscription_details": { + "metadata": null + }, + "subtotal": 0, + "subtotal_excluding_tax": 0, + "tax": null, + "test_clock": null, + "total": 0, + "total_discount_amounts": [], + "total_excluding_tax": 0, + "total_tax_amounts": [], + "transfer_data": null, + "webhooks_delivered_at": 1000000000 + } + }, + "id": "evt_1OU9PkDEQaroqDjsbyWhoCKi", + "livemode": false, + "object": "event", + "pending_webhooks": 0, + "request": { + "id": "req_NORMALIZED0003", + "idempotency_key": "3993f5c2-ee06-4eb7-8ea9-7f902bd12012" + }, + "type": "invoice.paid" + } + ], + "has_more": false, + "object": "list", + "url": "/v1/events" +} diff --git a/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Event.list.5.json b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Event.list.5.json new file mode 100644 index 0000000000..6d922067af --- /dev/null +++ b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Event.list.5.json @@ -0,0 +1,6 @@ +{ + "data": [], + "has_more": false, + "object": "list", + "url": "/v1/events" +} diff --git a/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Invoice.create.1.json b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Invoice.create.1.json new file mode 100644 index 0000000000..b8669a5c16 --- /dev/null +++ b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Invoice.create.1.json @@ -0,0 +1,258 @@ +{ + "account_country": "US", + "account_name": "Kandra Labs, Inc.", + "account_tax_ids": null, + "amount_due": 0, + "amount_paid": 0, + "amount_remaining": 0, + "amount_shipping": 0, + "application": null, + "application_fee_amount": null, + "attempt_count": 0, + "attempted": false, + "auto_advance": true, + "automatic_tax": { + "enabled": false, + "status": null + }, + "billing_reason": "manual", + "charge": null, + "collection_method": "charge_automatically", + "created": 1000000000, + "currency": "usd", + "custom_fields": null, + "customer": "cus_NORMALIZED0001", + "customer_address": null, + "customer_email": "hamlet@zulip.com", + "customer_name": null, + "customer_phone": null, + "customer_shipping": null, + "customer_tax_exempt": "none", + "customer_tax_ids": [], + "default_payment_method": null, + "default_source": null, + "default_tax_rates": [], + "description": null, + "discount": null, + "discounts": [], + "due_date": null, + "effective_at": null, + "ending_balance": null, + "footer": null, + "from_invoice": null, + "hosted_invoice_url": null, + "id": "in_NORMALIZED00000000000001", + "invoice_pdf": null, + "last_finalization_error": null, + "latest_revision": null, + "lines": { + "data": [ + { + "amount": -24000, + "amount_excluding_tax": -24000, + "currency": "usd", + "description": "$2000/month new customer discount", + "discount_amounts": [], + "discountable": false, + "discounts": [], + "id": "il_NORMALIZED00000000000001", + "invoice_item": "ii_NORMALIZED00000000000001", + "livemode": false, + "metadata": {}, + "object": "line_item", + "period": { + "end": 1000000000, + "start": 1000000000 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000001", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0001", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": -24000, + "unit_amount_decimal": "-24000" + }, + "proration": false, + "proration_details": { + "credited_items": null + }, + "quantity": 1, + "subscription": null, + "tax_amounts": [], + "tax_rates": [], + "type": "invoiceitem", + "unit_amount_excluding_tax": "-24000" + }, + { + "amount": 200000, + "amount_excluding_tax": 200000, + "currency": "usd", + "description": "Zulip Business", + "discount_amounts": [], + "discountable": false, + "discounts": [], + "id": "il_NORMALIZED00000000000002", + "invoice_item": "ii_NORMALIZED00000000000002", + "livemode": false, + "metadata": {}, + "object": "line_item", + "period": { + "end": 1357095845, + "start": 1325473445 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000002", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0002", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": 8000, + "unit_amount_decimal": "8000" + }, + "proration": false, + "proration_details": { + "credited_items": null + }, + "quantity": 25, + "subscription": null, + "tax_amounts": [], + "tax_rates": [], + "type": "invoiceitem", + "unit_amount_excluding_tax": "8000" + }, + { + "amount": -176000, + "amount_excluding_tax": -176000, + "currency": "usd", + "description": "Payment (Card ending in 4242)", + "discount_amounts": [], + "discountable": false, + "discounts": [], + "id": "il_NORMALIZED00000000000003", + "invoice_item": "ii_NORMALIZED00000000000003", + "livemode": false, + "metadata": {}, + "object": "line_item", + "period": { + "end": 1000000000, + "start": 1000000000 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000003", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0003", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": -176000, + "unit_amount_decimal": "-176000" + }, + "proration": false, + "proration_details": { + "credited_items": null + }, + "quantity": 1, + "subscription": null, + "tax_amounts": [], + "tax_rates": [], + "type": "invoiceitem", + "unit_amount_excluding_tax": "-176000" + } + ], + "has_more": false, + "object": "list", + "total_count": 3, + "url": "/v1/invoices/in_NORMALIZED00000000000001/lines" + }, + "livemode": false, + "metadata": {}, + "next_payment_attempt": 1000000000, + "number": null, + "object": "invoice", + "on_behalf_of": null, + "paid": false, + "paid_out_of_band": false, + "payment_intent": null, + "payment_settings": { + "default_mandate": null, + "payment_method_options": null, + "payment_method_types": null + }, + "period_end": 1000000000, + "period_start": 1000000000, + "post_payment_credit_notes_amount": 0, + "pre_payment_credit_notes_amount": 0, + "quote": null, + "receipt_number": null, + "rendering": { + "amount_tax_display": null, + "pdf": { + "page_size": "auto" + } + }, + "rendering_options": null, + "shipping_cost": null, + "shipping_details": null, + "starting_balance": 0, + "statement_descriptor": "Zulip Business", + "status": "draft", + "status_transitions": { + "finalized_at": null, + "marked_uncollectible_at": null, + "paid_at": null, + "voided_at": null + }, + "subscription": null, + "subscription_details": { + "metadata": null + }, + "subtotal": 0, + "subtotal_excluding_tax": 0, + "tax": null, + "test_clock": null, + "total": 0, + "total_discount_amounts": [], + "total_excluding_tax": 0, + "total_tax_amounts": [], + "transfer_data": null, + "webhooks_delivered_at": 1000000000 +} diff --git a/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Invoice.finalize_invoice.1.json b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Invoice.finalize_invoice.1.json new file mode 100644 index 0000000000..735ac024ff --- /dev/null +++ b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Invoice.finalize_invoice.1.json @@ -0,0 +1,258 @@ +{ + "account_country": "US", + "account_name": "Kandra Labs, Inc.", + "account_tax_ids": null, + "amount_due": 0, + "amount_paid": 0, + "amount_remaining": 0, + "amount_shipping": 0, + "application": null, + "application_fee_amount": null, + "attempt_count": 0, + "attempted": true, + "auto_advance": false, + "automatic_tax": { + "enabled": false, + "status": null + }, + "billing_reason": "manual", + "charge": null, + "collection_method": "charge_automatically", + "created": 1000000000, + "currency": "usd", + "custom_fields": null, + "customer": "cus_NORMALIZED0001", + "customer_address": null, + "customer_email": "hamlet@zulip.com", + "customer_name": null, + "customer_phone": null, + "customer_shipping": null, + "customer_tax_exempt": "none", + "customer_tax_ids": [], + "default_payment_method": null, + "default_source": null, + "default_tax_rates": [], + "description": null, + "discount": null, + "discounts": [], + "due_date": null, + "effective_at": 1000000000, + "ending_balance": 0, + "footer": null, + "from_invoice": null, + "hosted_invoice_url": "https://invoice.stripe.com/i/acct_NORMALIZED000001/test_NORMALIZED01a3dERVFhcm9xRGpzLF9QSWt2TDdZa2t2OXRpNDlvb1N5SjRtaDhJc3FUSEczLDk0NzQ4Mjc20200QUrGT3fA?s=ap", + "id": "in_NORMALIZED00000000000001", + "invoice_pdf": "https://pay.stripe.com/invoice/acct_NORMALIZED000001/test_NORMALIZED01a3dERVFhcm9xRGpzLF9QSWt2TDdZa2t2OXRpNDlvb1N5SjRtaDhJc3FUSEczLDk0NzQ4Mjc20200QUrGT3fA/pdf?s=ap", + "last_finalization_error": null, + "latest_revision": null, + "lines": { + "data": [ + { + "amount": -24000, + "amount_excluding_tax": -24000, + "currency": "usd", + "description": "$2000/month new customer discount", + "discount_amounts": [], + "discountable": false, + "discounts": [], + "id": "il_NORMALIZED00000000000001", + "invoice_item": "ii_NORMALIZED00000000000001", + "livemode": false, + "metadata": {}, + "object": "line_item", + "period": { + "end": 1000000000, + "start": 1000000000 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000001", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0001", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": -24000, + "unit_amount_decimal": "-24000" + }, + "proration": false, + "proration_details": { + "credited_items": null + }, + "quantity": 1, + "subscription": null, + "tax_amounts": [], + "tax_rates": [], + "type": "invoiceitem", + "unit_amount_excluding_tax": "-24000" + }, + { + "amount": 200000, + "amount_excluding_tax": 200000, + "currency": "usd", + "description": "Zulip Business", + "discount_amounts": [], + "discountable": false, + "discounts": [], + "id": "il_NORMALIZED00000000000002", + "invoice_item": "ii_NORMALIZED00000000000002", + "livemode": false, + "metadata": {}, + "object": "line_item", + "period": { + "end": 1357095845, + "start": 1325473445 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000002", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0002", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": 8000, + "unit_amount_decimal": "8000" + }, + "proration": false, + "proration_details": { + "credited_items": null + }, + "quantity": 25, + "subscription": null, + "tax_amounts": [], + "tax_rates": [], + "type": "invoiceitem", + "unit_amount_excluding_tax": "8000" + }, + { + "amount": -176000, + "amount_excluding_tax": -176000, + "currency": "usd", + "description": "Payment (Card ending in 4242)", + "discount_amounts": [], + "discountable": false, + "discounts": [], + "id": "il_NORMALIZED00000000000003", + "invoice_item": "ii_NORMALIZED00000000000003", + "livemode": false, + "metadata": {}, + "object": "line_item", + "period": { + "end": 1000000000, + "start": 1000000000 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000003", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0003", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": -176000, + "unit_amount_decimal": "-176000" + }, + "proration": false, + "proration_details": { + "credited_items": null + }, + "quantity": 1, + "subscription": null, + "tax_amounts": [], + "tax_rates": [], + "type": "invoiceitem", + "unit_amount_excluding_tax": "-176000" + } + ], + "has_more": false, + "object": "list", + "total_count": 3, + "url": "/v1/invoices/in_NORMALIZED00000000000001/lines" + }, + "livemode": false, + "metadata": {}, + "next_payment_attempt": null, + "number": "NORMALI-0002", + "object": "invoice", + "on_behalf_of": null, + "paid": true, + "paid_out_of_band": false, + "payment_intent": null, + "payment_settings": { + "default_mandate": null, + "payment_method_options": null, + "payment_method_types": null + }, + "period_end": 1000000000, + "period_start": 1000000000, + "post_payment_credit_notes_amount": 0, + "pre_payment_credit_notes_amount": 0, + "quote": null, + "receipt_number": null, + "rendering": { + "amount_tax_display": null, + "pdf": { + "page_size": "letter" + } + }, + "rendering_options": null, + "shipping_cost": null, + "shipping_details": null, + "starting_balance": 0, + "statement_descriptor": "Zulip Business", + "status": "paid", + "status_transitions": { + "finalized_at": 1000000000, + "marked_uncollectible_at": null, + "paid_at": 1000000000, + "voided_at": null + }, + "subscription": null, + "subscription_details": { + "metadata": null + }, + "subtotal": 0, + "subtotal_excluding_tax": 0, + "tax": null, + "test_clock": null, + "total": 0, + "total_discount_amounts": [], + "total_excluding_tax": 0, + "total_tax_amounts": [], + "transfer_data": null, + "webhooks_delivered_at": 1000000000 +} diff --git a/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Invoice.list.1.json b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Invoice.list.1.json new file mode 100644 index 0000000000..e39960ab72 --- /dev/null +++ b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--Invoice.list.1.json @@ -0,0 +1,6 @@ +{ + "data": [], + "has_more": false, + "object": "list", + "url": "/v1/invoices" +} diff --git a/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--InvoiceItem.create.1.json b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--InvoiceItem.create.1.json new file mode 100644 index 0000000000..c351f1fdd5 --- /dev/null +++ b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--InvoiceItem.create.1.json @@ -0,0 +1,47 @@ +{ + "amount": -176000, + "currency": "usd", + "customer": "cus_NORMALIZED0001", + "date": 1000000000, + "description": "Payment (Card ending in 4242)", + "discountable": false, + "discounts": [], + "id": "ii_NORMALIZED00000000000003", + "invoice": null, + "livemode": false, + "metadata": {}, + "object": "invoiceitem", + "period": { + "end": 1000000000, + "start": 1000000000 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000003", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0003", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": -176000, + "unit_amount_decimal": "-176000" + }, + "proration": false, + "quantity": 1, + "subscription": null, + "tax_rates": [], + "test_clock": null, + "unit_amount": -176000, + "unit_amount_decimal": "-176000" +} diff --git a/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--InvoiceItem.create.2.json b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--InvoiceItem.create.2.json new file mode 100644 index 0000000000..f6b553cfa6 --- /dev/null +++ b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--InvoiceItem.create.2.json @@ -0,0 +1,47 @@ +{ + "amount": 200000, + "currency": "usd", + "customer": "cus_NORMALIZED0001", + "date": 1000000000, + "description": "Zulip Business", + "discountable": false, + "discounts": [], + "id": "ii_NORMALIZED00000000000002", + "invoice": null, + "livemode": false, + "metadata": {}, + "object": "invoiceitem", + "period": { + "end": 1357095845, + "start": 1325473445 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000002", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0002", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": 8000, + "unit_amount_decimal": "8000" + }, + "proration": false, + "quantity": 25, + "subscription": null, + "tax_rates": [], + "test_clock": null, + "unit_amount": 8000, + "unit_amount_decimal": "8000" +} diff --git a/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--InvoiceItem.create.3.json b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--InvoiceItem.create.3.json new file mode 100644 index 0000000000..6053241978 --- /dev/null +++ b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--InvoiceItem.create.3.json @@ -0,0 +1,47 @@ +{ + "amount": -24000, + "currency": "usd", + "customer": "cus_NORMALIZED0001", + "date": 1000000000, + "description": "$2000/month new customer discount", + "discountable": false, + "discounts": [], + "id": "ii_NORMALIZED00000000000001", + "invoice": null, + "livemode": false, + "metadata": {}, + "object": "invoiceitem", + "period": { + "end": 1000000000, + "start": 1000000000 + }, + "plan": null, + "price": { + "active": false, + "billing_scheme": "per_unit", + "created": 1000000000, + "currency": "usd", + "custom_unit_amount": null, + "id": "price_NORMALIZED00000000000001", + "livemode": false, + "lookup_key": null, + "metadata": {}, + "nickname": null, + "object": "price", + "product": "prod_NORMALIZED0001", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": -24000, + "unit_amount_decimal": "-24000" + }, + "proration": false, + "quantity": 1, + "subscription": null, + "tax_rates": [], + "test_clock": null, + "unit_amount": -24000, + "unit_amount_decimal": "-24000" +} diff --git a/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--PaymentIntent.create.1.json b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--PaymentIntent.create.1.json new file mode 100644 index 0000000000..f339119071 --- /dev/null +++ b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--PaymentIntent.create.1.json @@ -0,0 +1,198 @@ +{ + "amount": 176000, + "amount_capturable": 0, + "amount_details": { + "tip": {} + }, + "amount_received": 176000, + "application": null, + "application_fee_amount": null, + "automatic_payment_methods": null, + "canceled_at": null, + "cancellation_reason": null, + "capture_method": "automatic", + "charges": { + "data": [ + { + "amount": 176000, + "amount_captured": 176000, + "amount_refunded": 0, + "application": null, + "application_fee": null, + "application_fee_amount": null, + "balance_transaction": "txn_NORMALIZED00000000000001", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null + }, + "calculated_statement_descriptor": "ZULIP BUSINESS", + "captured": true, + "created": 1000000000, + "currency": "usd", + "customer": "cus_NORMALIZED0001", + "description": "Upgrade to Zulip Business, $80.0 x 25 - $20.0 x 12", + "destination": null, + "dispute": null, + "disputed": false, + "failure_balance_transaction": null, + "failure_code": null, + "failure_message": null, + "fraud_details": {}, + "id": "ch_NORMALIZED00000000000001", + "invoice": null, + "livemode": false, + "metadata": { + "billing_modality": "charge_automatically", + "billing_schedule": "1", + "license_management": "automatic", + "licenses": "25", + "plan_tier": "104", + "price_per_license": "8000", + "remote_realm_host": "zulip.testserver", + "remote_realm_user_email": "hamlet@zulip.com", + "remote_realm_user_id": "1", + "seat_count": "25", + "type": "upgrade" + }, + "object": "charge", + "on_behalf_of": null, + "order": null, + "outcome": { + "network_status": "approved_by_network", + "reason": null, + "risk_level": "normal", + "risk_score": 0, + "seller_message": "Payment complete.", + "type": "authorized" + }, + "paid": true, + "payment_intent": "pi_NORMALIZED00000000000001", + "payment_method": "pm_1OU9PaDEQaroqDjsGx03hXTa", + "payment_method_details": { + "card": { + "amount_authorized": 176000, + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "pass" + }, + "country": "US", + "exp_month": 1, + "exp_year": 2025, + "extended_authorization": { + "status": "disabled" + }, + "fingerprint": "NORMALIZED000001", + "funding": "credit", + "incremental_authorization": { + "status": "unavailable" + }, + "installments": null, + "last4": "4242", + "mandate": null, + "multicapture": { + "status": "unavailable" + }, + "network": "visa", + "network_token": { + "used": false + }, + "overcapture": { + "maximum_amount_capturable": 176000, + "status": "unavailable" + }, + "three_d_secure": null, + "wallet": null + }, + "type": "card" + }, + "radar_options": {}, + "receipt_email": "hamlet@zulip.com", + "receipt_number": null, + "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xN3ZUa3dERVFhcm9xRGpzKPDI0KwGMgaF6JVKD5E6LBaZuBuD-BSaBxaBypvMqmkOIyBPGzZl_1-taAFtqQKUqUTnW2orKtxz9GWV", + "refunded": false, + "refunds": { + "data": [], + "has_more": false, + "object": "list", + "total_count": 0, + "url": "/v1/charges/ch_NORMALIZED00000000000001/refunds" + }, + "review": null, + "shipping": null, + "source": null, + "source_transfer": null, + "statement_descriptor": "Zulip Business", + "statement_descriptor_suffix": null, + "status": "succeeded", + "transfer_data": null, + "transfer_group": null + } + ], + "has_more": false, + "object": "list", + "total_count": 1, + "url": "/v1/charges?payment_intent=pi_NORMALIZED00000000000001" + }, + "client_secret": "pi_NORMALIZED00000000000001_secret_McKpCnN1iYSvPzaFuXX8l8tiw", + "confirmation_method": "automatic", + "created": 1000000000, + "currency": "usd", + "customer": "cus_NORMALIZED0001", + "description": "Upgrade to Zulip Business, $80.0 x 25 - $20.0 x 12", + "id": "pi_NORMALIZED00000000000001", + "invoice": null, + "last_payment_error": null, + "latest_charge": "ch_NORMALIZED00000000000001", + "livemode": false, + "metadata": { + "billing_modality": "charge_automatically", + "billing_schedule": "1", + "license_management": "automatic", + "licenses": "25", + "plan_tier": "104", + "price_per_license": "8000", + "remote_realm_host": "zulip.testserver", + "remote_realm_user_email": "hamlet@zulip.com", + "remote_realm_user_id": "1", + "seat_count": "25", + "type": "upgrade" + }, + "next_action": null, + "object": "payment_intent", + "on_behalf_of": null, + "payment_method": "pm_1OU9PaDEQaroqDjsGx03hXTa", + "payment_method_configuration_details": null, + "payment_method_options": { + "card": { + "installments": null, + "mandate_options": null, + "network": null, + "request_three_d_secure": "automatic" + } + }, + "payment_method_types": [ + "card" + ], + "processing": null, + "receipt_email": "hamlet@zulip.com", + "review": null, + "setup_future_usage": null, + "shipping": null, + "source": null, + "statement_descriptor": "Zulip Business", + "statement_descriptor_suffix": null, + "status": "succeeded", + "transfer_data": null, + "transfer_group": null +} diff --git a/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--SetupIntent.create.1.json b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--SetupIntent.create.1.json new file mode 100644 index 0000000000..2d44c876a7 --- /dev/null +++ b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--SetupIntent.create.1.json @@ -0,0 +1,34 @@ +{ + "application": null, + "automatic_payment_methods": null, + "cancellation_reason": null, + "client_secret": "seti_1OU9PaDEQaroqDjsDMwQmYCF_secret_PIkvI7Ljxne4VO0O0Zq0PSzUMrpmH1K", + "created": 1000000000, + "customer": "cus_NORMALIZED0001", + "description": null, + "flow_directions": null, + "id": "seti_1OU9PaDEQaroqDjsDMwQmYCF", + "last_setup_error": null, + "latest_attempt": "setatt_1OU9PaDEQaroqDjseSBd0NiZ", + "livemode": false, + "mandate": null, + "metadata": {}, + "next_action": null, + "object": "setup_intent", + "on_behalf_of": null, + "payment_method": "pm_1OU9PaDEQaroqDjsGx03hXTa", + "payment_method_configuration_details": null, + "payment_method_options": { + "card": { + "mandate_options": null, + "network": null, + "request_three_d_secure": "automatic" + } + }, + "payment_method_types": [ + "card" + ], + "single_use_mandate": null, + "status": "succeeded", + "usage": "off_session" +} diff --git a/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--SetupIntent.list.1.json b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--SetupIntent.list.1.json new file mode 100644 index 0000000000..2f0dae694d --- /dev/null +++ b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--SetupIntent.list.1.json @@ -0,0 +1,41 @@ +{ + "data": [ + { + "application": null, + "automatic_payment_methods": null, + "cancellation_reason": null, + "client_secret": "seti_1OU9PZDEQaroqDjsdaFQm7hZ_secret_PIkvo4ZbD6U4X6AzaDJz9VGG01IrPtr", + "created": 1000000000, + "customer": "cus_NORMALIZED0001", + "description": null, + "flow_directions": null, + "id": "seti_1OU9PZDEQaroqDjsdaFQm7hZ", + "last_setup_error": null, + "latest_attempt": null, + "livemode": false, + "mandate": null, + "metadata": {}, + "next_action": null, + "object": "setup_intent", + "on_behalf_of": null, + "payment_method": null, + "payment_method_configuration_details": null, + "payment_method_options": { + "card": { + "mandate_options": null, + "network": null, + "request_three_d_secure": "automatic" + } + }, + "payment_method_types": [ + "card" + ], + "single_use_mandate": null, + "status": "requires_payment_method", + "usage": "off_session" + } + ], + "has_more": true, + "object": "list", + "url": "/v1/setup_intents" +} diff --git a/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--SetupIntent.retrieve.1.json b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--SetupIntent.retrieve.1.json new file mode 100644 index 0000000000..2d44c876a7 --- /dev/null +++ b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--SetupIntent.retrieve.1.json @@ -0,0 +1,34 @@ +{ + "application": null, + "automatic_payment_methods": null, + "cancellation_reason": null, + "client_secret": "seti_1OU9PaDEQaroqDjsDMwQmYCF_secret_PIkvI7Ljxne4VO0O0Zq0PSzUMrpmH1K", + "created": 1000000000, + "customer": "cus_NORMALIZED0001", + "description": null, + "flow_directions": null, + "id": "seti_1OU9PaDEQaroqDjsDMwQmYCF", + "last_setup_error": null, + "latest_attempt": "setatt_1OU9PaDEQaroqDjseSBd0NiZ", + "livemode": false, + "mandate": null, + "metadata": {}, + "next_action": null, + "object": "setup_intent", + "on_behalf_of": null, + "payment_method": "pm_1OU9PaDEQaroqDjsGx03hXTa", + "payment_method_configuration_details": null, + "payment_method_options": { + "card": { + "mandate_options": null, + "network": null, + "request_three_d_secure": "automatic" + } + }, + "payment_method_types": [ + "card" + ], + "single_use_mandate": null, + "status": "succeeded", + "usage": "off_session" +} diff --git a/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--checkout.Session.create.1.json b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--checkout.Session.create.1.json new file mode 100644 index 0000000000..fb71160798 --- /dev/null +++ b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--checkout.Session.create.1.json @@ -0,0 +1,74 @@ +{ + "after_expiration": null, + "allow_promotion_codes": null, + "amount_subtotal": null, + "amount_total": null, + "automatic_tax": { + "enabled": false, + "status": null + }, + "billing_address_collection": null, + "cancel_url": "http://selfhosting.testserver/realm/129af42f-9cd2-47a3-9001-d4de8c3824e0/upgrade/?manual_license_management=false&tier=1", + "client_reference_id": null, + "client_secret": null, + "consent": null, + "consent_collection": null, + "created": 1000000000, + "currency": null, + "currency_conversion": null, + "custom_fields": [], + "custom_text": { + "after_submit": null, + "shipping_address": null, + "submit": null, + "terms_of_service_acceptance": null + }, + "customer": "cus_NORMALIZED0001", + "customer_creation": null, + "customer_details": { + "address": null, + "email": "hamlet@zulip.com", + "name": null, + "phone": null, + "tax_exempt": null, + "tax_ids": null + }, + "customer_email": null, + "expires_at": 1000000000, + "id": "cs_test_NORMALIZED02njN6b3kQG5LfNXeL4DMA67XBGb6rjIYdBXQzGlRZocJfBa", + "invoice": null, + "invoice_creation": null, + "livemode": false, + "locale": null, + "metadata": { + "remote_realm_user_id": "1", + "type": "card_update" + }, + "mode": "setup", + "object": "checkout.session", + "payment_intent": null, + "payment_link": null, + "payment_method_collection": "always", + "payment_method_configuration_details": null, + "payment_method_options": {}, + "payment_method_types": [ + "card" + ], + "payment_status": "no_payment_required", + "phone_number_collection": { + "enabled": false + }, + "recovered_from": null, + "setup_intent": "seti_1OU9PZDEQaroqDjsdaFQm7hZ", + "shipping": null, + "shipping_address_collection": null, + "shipping_options": [], + "shipping_rate": null, + "status": "open", + "submit_type": null, + "subscription": null, + "success_url": "http://selfhosting.testserver/realm/129af42f-9cd2-47a3-9001-d4de8c3824e0/billing/event_status?stripe_session_id={CHECKOUT_SESSION_ID}", + "total_details": null, + "ui_mode": "hosted", + "url": "https://checkout.stripe.com/c/pay/cs_test_NORMALIZED02njN6b3kQG5LfNXeL4DMA67XBGb6rjIYdBXQzGlRZocJfBa#fid1d2BpamRhQ2prcSc%2FJ1ZqcHdmYCVWZGt2JVV3aicpJ2R1bE5gfCc%2FJ3VuWnFgdnFaXVRmMU5zNkldQTY9SnNRY09XZml2UXNQJyknY3dqaFZgd3Ngdyc%2FcXdwYCknaWR8anBxUXx1YCc%2FJ3Zsa2JpYFpmamlwaGsnKSdga2RnaWBVaWRmYG1qaWFgd3YnP3F3cGB4JSUl" +} diff --git a/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--checkout.Session.list.1.json b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--checkout.Session.list.1.json new file mode 100644 index 0000000000..fcdaa77678 --- /dev/null +++ b/corporate/tests/stripe_fixtures/migrate_customer_server_to_realms_and_upgrade--checkout.Session.list.1.json @@ -0,0 +1,81 @@ +{ + "data": [ + { + "after_expiration": null, + "allow_promotion_codes": null, + "amount_subtotal": null, + "amount_total": null, + "automatic_tax": { + "enabled": false, + "status": null + }, + "billing_address_collection": null, + "cancel_url": "http://selfhosting.testserver/realm/129af42f-9cd2-47a3-9001-d4de8c3824e0/upgrade/?manual_license_management=false&tier=1", + "client_reference_id": null, + "client_secret": null, + "consent": null, + "consent_collection": null, + "created": 1000000000, + "currency": null, + "currency_conversion": null, + "custom_fields": [], + "custom_text": { + "after_submit": null, + "shipping_address": null, + "submit": null, + "terms_of_service_acceptance": null + }, + "customer": "cus_NORMALIZED0001", + "customer_creation": null, + "customer_details": { + "address": null, + "email": "hamlet@zulip.com", + "name": null, + "phone": null, + "tax_exempt": null, + "tax_ids": null + }, + "customer_email": null, + "expires_at": 1000000000, + "id": "cs_test_NORMALIZED02njN6b3kQG5LfNXeL4DMA67XBGb6rjIYdBXQzGlRZocJfBa", + "invoice": null, + "invoice_creation": null, + "livemode": false, + "locale": null, + "metadata": { + "remote_realm_user_id": "1", + "type": "card_update" + }, + "mode": "setup", + "object": "checkout.session", + "payment_intent": null, + "payment_link": null, + "payment_method_collection": "always", + "payment_method_configuration_details": null, + "payment_method_options": {}, + "payment_method_types": [ + "card" + ], + "payment_status": "no_payment_required", + "phone_number_collection": { + "enabled": false + }, + "recovered_from": null, + "setup_intent": "seti_1OU9PZDEQaroqDjsdaFQm7hZ", + "shipping": null, + "shipping_address_collection": null, + "shipping_options": [], + "shipping_rate": null, + "status": "open", + "submit_type": null, + "subscription": null, + "success_url": "http://selfhosting.testserver/realm/129af42f-9cd2-47a3-9001-d4de8c3824e0/billing/event_status?stripe_session_id={CHECKOUT_SESSION_ID}", + "total_details": null, + "ui_mode": "hosted", + "url": "https://checkout.stripe.com/c/pay/cs_test_NORMALIZED02njN6b3kQG5LfNXeL4DMA67XBGb6rjIYdBXQzGlRZocJfBa#fid1d2BpamRhQ2prcSc%2FJ1ZqcHdmYCVWZGt2JVV3aicpJ2R1bE5gfCc%2FJ3VuWnFgdnFaXVRmMU5zNkldQTY9SnNRY09XZml2UXNQJyknY3dqaFZgd3Ngdyc%2FcXdwYCknaWR8anBxUXx1YCc%2FJ3Zsa2JpYFpmamlwaGsnKSdga2RnaWBVaWRmYG1qaWFgd3YnP3F3cGB4JSUl" + } + ], + "has_more": true, + "object": "list", + "url": "/v1/checkout/sessions" +} diff --git a/corporate/tests/test_stripe.py b/corporate/tests/test_stripe.py index e7543e2260..ccb0dbc116 100644 --- a/corporate/tests/test_stripe.py +++ b/corporate/tests/test_stripe.py @@ -5997,6 +5997,112 @@ class TestRemoteRealmBillingFlow(StripeTestCase, RemoteRealmBillingTestCase): result = self.client_get(f"{billing_base_url}/sponsorship/", subdomain="selfhosting") self.assert_in_success_response(["Zulip is sponsoring a free", "Community"], result) + @responses.activate + @mock_stripe() + def test_migrate_customer_server_to_realms_and_upgrade(self, *mocks: Mock) -> None: + remote_server = RemoteZulipServer.objects.get(hostname="demo.example.com") + server_billing_session = RemoteServerBillingSession(remote_server=remote_server) + + # Migrate server to legacy plan. + with time_machine.travel(self.now, tick=False): + start_date = timezone_now() + end_date = add_months(start_date, months=3) + server_billing_session.migrate_customer_to_legacy_plan(start_date, end_date) + + server_customer = server_billing_session.get_customer() + assert server_customer is not None + server_customer_plan = get_current_plan_by_customer(server_customer) + assert server_customer_plan is not None + self.assertEqual(server_customer_plan.tier, CustomerPlan.TIER_SELF_HOSTED_LEGACY) + self.assertEqual(server_customer_plan.status, CustomerPlan.ACTIVE) + self.assertEqual(remote_server.plan_type, RemoteZulipServer.PLAN_TYPE_SELF_MANAGED_LEGACY) + + # Upload data. Performs customer migration from server to realms. + with time_machine.travel(self.now, tick=False): + self.add_mock_response() + send_server_data_to_push_bouncer(consider_usage_statistics=False) + + remote_server.refresh_from_db() + server_customer_plan.refresh_from_db() + self.assertEqual(server_customer_plan.status, CustomerPlan.ENDED) + self.assertEqual(remote_server.plan_type, RemoteZulipServer.PLAN_TYPE_SELF_MANAGED) + + remote_realms = RemoteRealm.objects.filter( + server=remote_server, + plan_type=RemoteRealm.PLAN_TYPE_SELF_MANAGED_LEGACY, + is_system_bot_realm=False, + ) + for remote_realm in remote_realms: + customer = Customer.objects.get(remote_realm=remote_realm) + customer_plan = get_current_plan_by_customer(customer) + assert customer_plan is not None + self.assertEqual(customer_plan.tier, CustomerPlan.TIER_SELF_HOSTED_LEGACY) + self.assertEqual(customer_plan.status, CustomerPlan.ACTIVE) + + self.login("hamlet") + hamlet = self.example_user("hamlet") + billing_base_url = self.billing_session.billing_base_url + + # Login + result = self.execute_remote_billing_authentication_flow(hamlet) + self.assertEqual(result.status_code, 302) + self.assertEqual(result["Location"], f"{billing_base_url}/plans/") + + # upgrade to business plan + with time_machine.travel(self.now, tick=False): + result = self.client_get(f"{billing_base_url}/upgrade/", subdomain="selfhosting") + self.assertEqual(result.status_code, 200) + self.assert_in_success_response(["Add card", "Purchase Zulip Business"], result) + + with time_machine.travel(self.now, tick=False): + stripe_customer = self.add_card_and_upgrade() + + zulip_realm_customer = Customer.objects.get(stripe_customer_id=stripe_customer.id) + zulip_realm_plan = CustomerPlan.objects.get( + customer=zulip_realm_customer, status=CustomerPlan.ACTIVE + ) + self.assertEqual(zulip_realm_plan.tier, CustomerPlan.TIER_SELF_HOSTED_BUSINESS) + + realm_user_count = UserProfile.objects.filter( + realm=hamlet.realm, is_bot=False, is_active=True + ).count() + licenses = max( + realm_user_count, self.billing_session.min_licenses_for_plan(zulip_realm_plan.tier) + ) + with time_machine.travel(self.now + timedelta(days=1), tick=False): + response = self.client_get(f"{billing_base_url}/billing/", subdomain="selfhosting") + for substring in [ + "Zulip Business", + "Number of licenses", + f"{licenses} (managed automatically)", + "Your plan will automatically renew on", + "January 2, 2013", + f"${80 * licenses:,.2f}", + "Visa ending in 4242", + "Update card", + ]: + self.assert_in_response(substring, response) + + # Login again + result = self.execute_remote_billing_authentication_flow( + hamlet, first_time_login=False, expect_tos=False, confirm_tos=False + ) + self.assertEqual(result.status_code, 302) + self.assertEqual(result["Location"], f"{billing_base_url}/billing/") + + # Downgrade + with self.assertLogs("corporate.stripe", "INFO") as m: + with time_machine.travel(self.now + timedelta(days=7), tick=False): + response = self.client_billing_patch( + "/billing/plan", + {"status": CustomerPlan.DOWNGRADE_AT_END_OF_CYCLE}, + ) + expected_log = f"INFO:corporate.stripe:Change plan status: Customer.id: {zulip_realm_customer.id}, CustomerPlan.id: {zulip_realm_plan.id}, status: {CustomerPlan.DOWNGRADE_AT_END_OF_CYCLE}" + self.assertEqual(m.output[0], expected_log) + self.assert_json_success(response) + zulip_realm_plan.refresh_from_db() + self.assertEqual(zulip_realm_plan.licenses_at_next_renewal(), None) + @override_settings(PUSH_NOTIFICATION_BOUNCER_URL="https://push.zulip.org.example.com") class TestRemoteServerBillingFlow(StripeTestCase, RemoteServerTestCase): diff --git a/corporate/views/billing_page.py b/corporate/views/billing_page.py index b58a1d397a..b91716779b 100644 --- a/corporate/views/billing_page.py +++ b/corporate/views/billing_page.py @@ -264,7 +264,7 @@ def update_plan_for_remote_realm( "licenses_at_next_renewal", json_validator=check_int, default=None ), schedule: Optional[int] = REQ("schedule", json_validator=check_int, default=None), -) -> HttpResponse: # nocoverage +) -> HttpResponse: update_plan_request = UpdatePlanRequest( status=status, licenses=licenses, diff --git a/zilencer/views.py b/zilencer/views.py index 28832e857b..b001d806d8 100644 --- a/zilencer/views.py +++ b/zilencer/views.py @@ -822,7 +822,7 @@ def update_remote_realm_data_for_server( RemoteRealmAuditLog.objects.bulk_create(remote_realm_audit_logs) -def get_human_user_realm_uuids(realms: List[RealmDataForAnalytics]) -> List[UUID]: # nocoverage +def get_human_user_realm_uuids(realms: List[RealmDataForAnalytics]) -> List[UUID]: billable_realm_uuids = [] for realm in realms: # TODO: Remove the `zulipinternal` string_id check once no server is on 8.0-beta. @@ -831,7 +831,7 @@ def get_human_user_realm_uuids(realms: List[RealmDataForAnalytics]) -> List[UUID or realm.deactivated or realm.host.startswith("zulipinternal.") or (settings.DEVELOPMENT and realm.host.startswith("analytics.")) - ): + ): # nocoverage continue billable_realm_uuids.append(realm.uuid)