Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update Subscriptions with WooPayments eligibility as we move to deprecate this functionality #7238

Merged
merged 18 commits into from
Oct 6, 2023

Conversation

james-allan
Copy link
Contributor

@james-allan james-allan commented Sep 20, 2023

Note

This PR reintroduces the changes made in #7117 that were reverted in #7194 when it was decided that deprecating the WCPay Subscriptions feature would come in the next release.

Fixes #6510

Changes proposed in this Pull Request

As part of the Subscriptions Primary Offering project, we need to deprecate the existing WCPay Subscriptions feature so that merchants can opt into the new subscriptions setting.

In this PR we are updating the eligibility of the WCPay Subscriptions so that we:

  • Do not load the Advanced > WCPay Subscription setting on new sites created after the release of the version of WC Pay containing these changes.
  • No longer load subscription functionality on existing sites that have no active Stripe Billing Subscriptions or published subscription products.

To meet these new requirements I've changed is_wcpay_subscriptions_eligible() to only return true when:

  1. Store located in the US
  2. Doesn't have the WC Subscriptions extension active
  3. Has either one of the following:
    1. the store has existing WCPay Subscriptions or,
    2. has published subscription products

Testing instructions

Testing this PR requires toggling the following:

  • Deactivate/activate WooCommerce Subscriptions
  • Update the store's base country to US and non-US
  • Has no published subscription products
  • Has no WCPay subscriptions (with _wcpay_subscription_id metadata)

With that information, here are the testing instructions to toggle through most of the new eligibility cases:

  1. Setup the state of your store so that you have 1 subscription product, 1 WCPay Subscription, WC Subscriptions deactivated, and the store is based in the US
  2. Confirm the Enable Subscriptions with WooPayments setting is found in Payments > Settings > Advanced
  3. Activate Subscriptions, confirm the setting is gone
  4. Deactivate Subscriptions to bring it back
  5. Change the stores base country to a non-US country, confirm the WCPay Subscriptions setting is gone
  6. Change the country back to the US
  7. Set your subscriptions product to private and modify the _wcpay_subscription_id to something like _wcpay_subscription_id_test
  8. Confirm the setting is no longer shown
  9. Set the subscription product back to published, confirm the setting is back.
  10. Put the product back to private and change the metadata on the subscription to bring back the _wcpay_subscription_id meta.
  11. Confirm the WCPay subscription setting is loading.

With these instructions I have tested the following cases:

  • Setting doesn't show if any of the following conditions are met:
    • Has WC Subscriptions active
    • Non-US based store
    • Doesn't have existing subscriptions products
    • Doesn't have any subscriptions with __wcpay_subscriptions_id meta (including pending, canceled, on-hold etc.)
  • Settings only shows when:
    • No WC Subscriptions active, country set to US, no subscriptions but has existing products
    • No WC Subscriptions active, country set to US, has existing subscriptions

  • Run npm run changelog to add a changelog file, choose patch to leave it empty if the change is not significant. You can add multiple changelog files in one PR by running this command a few times.
  • Covered with tests (or have a good reason not to test in description ☝️)
  • Tested on mobile (or does not apply)

Post merge

@botwoo
Copy link
Collaborator

botwoo commented Sep 20, 2023

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 7238 or branch name issue/6510-deprecate-wcpay-subscriptions in your-test.site/wp-admin/admin.php?page=jetpack-beta&plugin=woocommerce-payments

Option 2. Jurassic Ninja - available for logged-in A12s

🚀 Launch a JN site with this branch 🚀

ℹ️ Install this Tampermonkey script to get more options.


Build info:

  • Latest commit: 385e2f8
  • Build time: 2023-10-06 02:38:03 UTC

Note: the build is updated when a new commit is pushed to this PR.

@github-actions
Copy link
Contributor

github-actions bot commented Sep 20, 2023

Size Change: -1 B (0%)

Total Size: 1.42 MB

Filename Size Change
release/woocommerce-payments/dist/settings.js 233 kB -1 B (0%)
ℹ️ View Unchanged
Filename Size
release/woocommerce-payments/assets/css/admin.css 1.04 kB
release/woocommerce-payments/assets/css/success.css 158 B
release/woocommerce-payments/dist/blocks-checkout-rtl.css 1.51 kB
release/woocommerce-payments/dist/blocks-checkout.css 1.51 kB
release/woocommerce-payments/dist/blocks-checkout.js 74.6 kB
release/woocommerce-payments/dist/checkout-rtl.css 440 B
release/woocommerce-payments/dist/checkout.css 441 B
release/woocommerce-payments/dist/checkout.js 28.8 kB
release/woocommerce-payments/dist/index-rtl.css 36.4 kB
release/woocommerce-payments/dist/index.css 36.4 kB
release/woocommerce-payments/dist/index.js 284 kB
release/woocommerce-payments/dist/multi-currency-analytics.js 1.05 kB
release/woocommerce-payments/dist/multi-currency-rtl.css 2.88 kB
release/woocommerce-payments/dist/multi-currency-switcher-block.js 60.2 kB
release/woocommerce-payments/dist/multi-currency.css 2.88 kB
release/woocommerce-payments/dist/multi-currency.js 54.9 kB
release/woocommerce-payments/dist/order-rtl.css 676 B
release/woocommerce-payments/dist/order.css 679 B
release/woocommerce-payments/dist/order.js 41.1 kB
release/woocommerce-payments/dist/payment-gateways-rtl.css 690 B
release/woocommerce-payments/dist/payment-gateways.css 692 B
release/woocommerce-payments/dist/payment-gateways.js 38.5 kB
release/woocommerce-payments/dist/payment-request-rtl.css 146 B
release/woocommerce-payments/dist/payment-request.css 146 B
release/woocommerce-payments/dist/payment-request.js 11.8 kB
release/woocommerce-payments/dist/product-details.js 898 B
release/woocommerce-payments/dist/settings-rtl.css 8.93 kB
release/woocommerce-payments/dist/settings.css 8.94 kB
release/woocommerce-payments/dist/subscription-edit-page.js 669 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal-rtl.css 519 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.css 519 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.js 20.3 kB
release/woocommerce-payments/dist/subscription-product-onboarding-toast.js 693 B
release/woocommerce-payments/dist/subscriptions-empty-state-rtl.css 117 B
release/woocommerce-payments/dist/subscriptions-empty-state.css 117 B
release/woocommerce-payments/dist/subscriptions-empty-state.js 19.5 kB
release/woocommerce-payments/dist/tos-rtl.css 230 B
release/woocommerce-payments/dist/tos.css 231 B
release/woocommerce-payments/dist/tos.js 21.9 kB
release/woocommerce-payments/dist/upe_checkout-rtl.css 440 B
release/woocommerce-payments/dist/upe_checkout.css 441 B
release/woocommerce-payments/dist/upe_checkout.js 34.1 kB
release/woocommerce-payments/dist/upe_split_checkout-rtl.css 440 B
release/woocommerce-payments/dist/upe_split_checkout.css 441 B
release/woocommerce-payments/dist/upe_split_checkout.js 34.6 kB
release/woocommerce-payments/dist/upe_with_deferred_intent_creation_checkout.js 36.8 kB
release/woocommerce-payments/dist/upe-blocks-checkout-rtl.css 1.51 kB
release/woocommerce-payments/dist/upe-blocks-checkout.css 1.51 kB
release/woocommerce-payments/dist/upe-blocks-checkout.js 39.6 kB
release/woocommerce-payments/dist/upe-split-blocks-checkout-rtl.css 1.51 kB
release/woocommerce-payments/dist/upe-split-blocks-checkout.css 1.51 kB
release/woocommerce-payments/dist/upe-split-blocks-checkout.js 41 kB
release/woocommerce-payments/dist/woopay-express-button-rtl.css 146 B
release/woocommerce-payments/dist/woopay-express-button.css 146 B
release/woocommerce-payments/dist/woopay-express-button.js 51.6 kB
release/woocommerce-payments/dist/woopay-rtl.css 3.85 kB
release/woocommerce-payments/dist/woopay.css 3.85 kB
release/woocommerce-payments/dist/woopay.js 71.6 kB
release/woocommerce-payments/includes/subscriptions/assets/css/plugin-page.css 622 B
release/woocommerce-payments/includes/subscriptions/assets/js/plugin-page.js 814 B
release/woocommerce-payments/vendor/automattic/jetpack-assets/build/i18n-loader.js 2.43 kB
release/woocommerce-payments/vendor/automattic/jetpack-assets/src/js/i18n-loader.js 1.01 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-ajax.js 522 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-callables.js 581 B
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/babel.config.js 160 B
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.css 2.32 kB
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.js 13.8 kB
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.rtl.css 2.32 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/about.css 1.2 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin-empty-state.css 291 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin-order-statuses.css 403 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin.css 3.56 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/checkout.css 299 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/modal.css 742 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/view-subscription.css 572 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/wcs-upgrade.css 411 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/admin-pointers.js 544 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/admin.js 9.63 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/jstz.js 6.8 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/jstz.min.js 3.83 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/meta-boxes-coupon.js 544 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/meta-boxes-subscription.js 2.38 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/moment.js 22.1 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/moment.min.js 11.6 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/payment-method-restrictions.js 1.29 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/wcs-meta-boxes-order.js 502 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/payment-methods.js 355 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/single-product.js 429 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/view-subscription.js 1.38 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/wcs-cart.js 781 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/modal.js 1.1 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/wcs-upgrade.js 1.27 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/build/index.css 392 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/build/index.js 3.06 kB

compressed-size-action

* @see WC_Payments_Features::is_wcpay_subscriptions_eligible() for eligibility criteria.
*/
public static function maybe_disable_wcpay_subscriptions_on_update() {
if ( WC_Payments_Features::is_wcpay_subscriptions_enabled() && ! WC_Payments_Features::is_wcpay_subscriptions_eligible() ) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if we need to change this to also disable this feature if the Woo Subscriptions plugin is active.

Imagine there's a site that has used WCPay Subscriptions in the past, installed Woo Subscriptions, if they deactivate Woo Subscriptions do we want them to automatically switch to using WCPay Subscriptions feature?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In line with the discussion here (p1695182789067919/1695179380.867469-slack-C055WHLA98D), Brent agrees and we'll disable the WCPay Subscriptions feature if its enabled and the Woo Subscriptions plugin is already active at the time of next WooPayments update.

@james-allan
Copy link
Contributor Author

james-allan commented Sep 26, 2023

I ran through the following scenarios when testing this PR:

  • WCPay subscriptions previously enabled
    • Disabled for stores with no products or subscriptions.
    • Left enabled for stores with at least 1 product.
    • Left enabled for stores with at least 1 subscription.
    • Disabled on sites with at least 1 Stripe Billing Subscription but Woo Subscriptions
      enabled.
    • Disabled on sites with no Stripe Billing Subscriptions but Woo Subscriptions enabled.
  • WCPay subscriptions previously disabled - no change.

In terms of the impact of these changes. The result should be:

  • If you weren't using it - no change.
  • If it is enabled:
    • But you have the Woo Subscriptions plugin - it's disabled. Any existing Stripe Billing subscriptions can be served by Woo Subscriptions. Disabling Woo Subscriptions won't restore WCPay Subscriptions functionality. Doing so would have disproportionate impacts on the site. Disabling Woo Subscriptions while you have Stripe Billing subscriptions will still display an appropriate notice. See Update the deactivate Woo Subscriptions plugin notice #7240
    • You don't have Woo Subscriptions and you don't have WCPay Subscriptions - its disabled. The site wasn't using it.
    • You don't have Woo Subscriptions and do have WCPay Subscriptions - no change (it's left enabled).

I'll need to see what impact this has on GlobalStep testing. I suspect this change might disable this feature preventing them from testing WCPay subscription flows in the critical flows.

@james-allan
Copy link
Contributor Author

I'll need to see what impact this has on GlobalStep testing. I suspect this change might disable this feature preventing them from testing WCPay subscription flows in the critical flows.

The critical flows testing instructions specially asks the tester to enable the WCPay subscriptions feature via the dev tools plugin: https://github.com/Automattic/woocommerce-payments/wiki/WC-Pay-Subscriptions-critical-flows-testing-instructions#enable-wc-pay-subscriptions

This means that even though this setting is being removed and deprecated Global step can still access this feature for testing via dev tools.

Copy link
Contributor

@mattallan mattallan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In 0e8dfb6 I've pushed up a change which moves the disabling of the legacy WCPay Subscriptions feature to the main payments class to fix an issue where if you had the legacy wcpay subscription feature enabled & Woo Subscriptions activated with no Stripe Billing subscriptions, the feature was not being disabled.

This was because this code was inside a class that was no longer loading.

On the latest changes I've ran through the following checks:

  • WCPay subscriptions previously enabled
    • Disabled for stores with no products or subscriptions.
    • Left enabled for stores with at least 1 product.
    • Left enabled for stores with at least 1 subscription.
    • Disabled on sites with at least 1 Stripe Billing Subscription but Woo Subscriptions enabled.
  • Disabled on sites with no Stripe Billing Subscriptions but Woo Subscriptions enabled.
  • WCPay subscriptions previously disabled - no change.

Worth noting we also discussed hooking onto the Woo Subscriptions plugin activation and disabling the WCPay Subscriptions feature there as well however we couldn't find a clean way to hook onto that event so we're going to leave it.

Copy link
Contributor

@mattallan mattallan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@james-allan as we discussed, I've moved the code which used the WooPayments updated hook to now be inside the main payments class and ran through all of the checks again to confirm we're turning off the legacy WCPay Subscriptions feature correctly.

Approving this to be merged.

@james-allan james-allan added this pull request to the merge queue Oct 6, 2023
Merged via the queue into develop with commit 42d58a5 Oct 6, 2023
26 of 27 checks passed
@james-allan james-allan deleted the issue/6510-deprecate-wcpay-subscriptions branch October 6, 2023 02:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Deprecate subscriptions functionality bundled in WC Payments
3 participants