Commit Graph

73 Commits

Author SHA1 Message Date
Rishi Gupta
4aa2ac1b52 billing: Add functions for automatic invoicing of plans. 2019-01-28 16:04:11 -08:00
Rishi Gupta
421cda0e34 billing: Adding invoicing fields to CustomerPlan. 2019-01-28 16:04:11 -08:00
Rishi Gupta
fe280fc38c billing: Create StripeTestCase. 2019-01-28 16:04:11 -08:00
Rishi Gupta
83a7595feb billing: Update next_renewal_date to take an event_time.
Also changes a < into a <= in add_plan_renewal_to_license_ledger_if_needed.
2019-01-28 16:04:11 -08:00
Rishi Gupta
7c11fe819a billing: Update license ledger when users are added and removed. 2019-01-28 16:04:11 -08:00
Rishi Gupta
ad7a7b246e billing: Move license management from CustomerPlan into its own table. 2019-01-19 16:00:44 +05:30
Rishi Gupta
112eb01728 billing: Remove PLAN_NAMES and other legacy code. 2019-01-18 11:46:17 +05:30
Rishi Gupta
955dfc6397 billing: Remove references to Realm.has_seat_based_plan. 2018-12-24 10:27:56 -08:00
Rishi Gupta
653416ab23 billing: Update /billing to work with new subscription model. 2018-12-23 00:18:21 -08:00
Rishi Gupta
e7220fd71f billing: Do subscription management in-house instead of with Stripe Billing.
This is a major rewrite of the billing system. It moves subscription
information off of stripe Subscriptions and into a local CustomerPlan
table.

To keep this manageable, it leaves several things unimplemented
(downgrading, etc), and a variety of other TODOs in the code. There are also
some known regressions, e.g. error-handling on /upgrade is broken.
2018-12-22 13:39:30 -08:00
Rishi Gupta
5633049292 billing: Restructure validation of upgrade parameters. 2018-12-22 13:30:15 -08:00
Rishi Gupta
b4a28f3147 billing: Rename seat_count to licenses where appropriate. 2018-12-22 13:30:15 -08:00
Rishi Gupta
7ab1406962 billing: Prepare for moving Plan to CustomerPlan.billing_schedule. 2018-12-22 13:30:15 -08:00
Rishi Gupta
7b5d15d254 billing: Move discount to local Customer object.
A lot of the seemingly unrelated test fixture changes are because we're
removing a query to stripe in the upgrade path, in cases when the user's
realm has an existing Customer object.
2018-12-22 13:30:15 -08:00
Rishi Gupta
8ec91fc42d billing: Remove process_downgrade. 2018-12-22 13:30:15 -08:00
Rishi Gupta
84a31ca800 billing: Remove BillingProcessor.
Leaving the model in place, so that we can do the database migration by
hand.
2018-12-22 13:30:15 -08:00
Vishnu Ks
0fd6ff722b billing: Migrate /upgrade endpoint to JSON.
The fixture changes are because self.upgrade formerly used to cause a page load
of /billing, which in turn calls Customer.retrieve.

If we ran the full test suite with GENERATE_STRIPE_FIXTURES=True, we would
likely see several more Customer.retrieve.N.json's being deleted. But
keeping them there for now to keep the diff small.
2018-12-13 17:01:12 -08:00
Rishi Gupta
b245c661da billing: Change do_change_plan_type to take a realm instead of a user.
More often than not, changes in plan type are not directly due to user
action.
2018-12-13 13:26:24 -08:00
Vishnu Ks
a8113ae296 billing: Remove dont_mock argument from mock_stripe. 2018-12-04 12:19:57 -08:00
Rishi Gupta
c21a05a3b1 billing: Zero out timestamps that aren't being tested.
f52e9d1 ended up not going far enough. Keeping f52e9d1 in place in case we
ever want to go back to that sort of solution.

Also removes the keep argument from test_billing_quantity_changes_end_to_end,
since that test is actually testing the arguments to
stripe.Subscription.save(), not what is returned by Stripe.
2018-12-03 16:25:21 -08:00
Rishi Gupta
2453ab2a21 billing: Normalize a few more fields in normalize_fixture_data. 2018-12-03 16:24:16 -08:00
Rishi Gupta
84f7a779c4 billing: Take advantage of re match notation in normalize_fixture_data.
No change in behavior; just visual code cleanup.
2018-12-03 16:24:16 -08:00
Rishi Gupta
f52e9d143b billing: Further normalize timestamps in tests.
Hopefully this will make it easier still to look at diffs with
GENERATE_STRIPE_FIXTURES = True.
2018-12-03 16:24:16 -08:00
Vishnu Ks
24917f2e9b billing: Maintain a global list of stripe functions to mock.
Looks like payment_method_string was missing a Customer.save before. Not
sure how it was passing tests in that case.
2018-12-03 11:38:54 -08:00
Vishnu Ks
0191bb593a billing: Make test functions accept *mocks instead of separate args. 2018-12-02 13:42:38 -08:00
Vishnu Ks
48618adf13 billing: Normalize several additional keys in mock_stripe.
Reran every test with GENERATE_STRIPE_FIXTURES = True, which also caused a
few fixtures to get updates unrelated to these changes (likely due to API
updates that hadn't been previously applied).
2018-12-02 13:32:19 -08:00
Rishi Gupta
c9c842ae2b billing: Add randomness to idempotency key while testing.
Makes it easier to test or regenerate fixtures for
test_billing_quantity_changes_end_to_end with generate=True.
2018-11-30 23:14:52 -08:00
Rishi Gupta
c59da02936 billing: Reflect discounts on /upgrade. 2018-11-30 11:19:07 -08:00
Rishi Gupta
16b7737da3 billing: Fix enforcement of seat_count in tests. 2018-11-30 11:19:07 -08:00
Rishi Gupta
5a47ac96de billing: Fix test flake in test_payment_method_string. 2018-11-30 11:19:07 -08:00
Rishi Gupta
5fdc2e5161 billing: Ensure seat_count is always 8 in billing tests. 2018-11-28 23:08:27 -08:00
Rishi Gupta
f3ecb05762 billing: Rename stripeToken to stripe_token.
When we started the billing system we started by following conventions used
in the Stripe documentation, but in hindsight it makes more sense to follow
conventions used in the Zulip codebase.
2018-11-28 22:29:29 -08:00
Rishi Gupta
d302fae31b billing: Rename self.quantity to self.seat_count in tests. 2018-11-28 22:29:29 -08:00
Rishi Gupta
10d3d94a2a billing: Use common pathway for upgrading in tests. 2018-11-28 22:29:29 -08:00
Rishi Gupta
b3b1b47fb0 billing: Remove references to legacy stripe_fixtures.json. 2018-11-28 22:29:29 -08:00
Rishi Gupta
053778fdd7 billing: Update test_billing_quantity_changes_end_to_end to use mock_stripe. 2018-11-28 22:29:29 -08:00
Rishi Gupta
191d8101a3 billing: Update test_redirect_for_billing_home.
The part that was removed is better tested in many other tests, like
test_initial_upgrade.
2018-11-28 10:45:00 -08:00
Rishi Gupta
f0538293de billing: Update test_replace_payment_source to use mock_stripe. 2018-11-28 10:45:00 -08:00
Rishi Gupta
698aeddc85 billing: Delete test_subscribe_customer_to_second_plan.
This used to be a more likely codepath, before we introduced
Customer.has_billing_relationship. It is no longer literally impossible to
hit this race condition, so I'm not deleting the code, but it's unlikely
enough that it's not worth figuring out how to test it.
2018-11-28 10:45:00 -08:00
Rishi Gupta
33ec86aa00 billing: Delete test_extract_current_subscription.
Already better tested by the upgrade and downgrade tests using mock_stripe.

Note that the line that was removed is actually not possible to reach, since
canceled subscriptions aren't shown on the Customer object.
2018-11-28 10:45:00 -08:00
Vishnu Ks
8343ed6ceb billing: Use mock_stripe in test_downgrade_with_money_owed. 2018-11-26 15:59:19 -08:00
Vishnu Ks
a8b95ff801 billing: Use mock_stripe in test_downgrade_with_no_subscription. 2018-11-26 15:16:26 -08:00
Vishnu Ks
1ec9097f55 billing: Use mock_stripe in test_downgrade. 2018-11-26 14:59:46 -08:00
Vishnu Ks
a2c0ec207e billing: Use mock_stripe in test_attach_discount_to_realm. 2018-11-26 14:59:46 -08:00
Rishi Gupta
e2838a49db billing: Delete fixture data before regenerating it. 2018-11-26 14:59:46 -08:00
Rishi Gupta
0dffb58797 billing: Fix fixture_files_for_function including too many files.
Previously, this function would return the fixture files for any test that
had the test's name as a prefix.
2018-11-26 14:59:45 -08:00
Vishnu Ks
189e5e1fbd billing: Add frontend for upgrading by invoice. 2018-11-24 11:56:13 -08:00
Rishi Gupta
6afbc2726f billing: Add billing_modality to upgrade form. 2018-11-24 11:56:13 -08:00
Rishi Gupta
08daefa4a3 billing: Update payment method string to incorporate billing by invoice.
Also fixes a bug in process_initial_upgrade. If you have a card on file
(e.g. from a previous subscription), and try to upgrade by billing by
invoice, neither the if nor the elif condition applies.
2018-11-24 11:56:13 -08:00
Rishi Gupta
99506b486a billing: Add backend for paying by invoice. 2018-11-17 23:08:48 -08:00