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

Hide the transaction details refund menu for non-refundable disputes #7962

Merged
merged 7 commits into from
Jan 4, 2024

Conversation

Jinksi
Copy link
Member

@Jinksi Jinksi commented Jan 3, 2024

Fixes #7960

Changes proposed in this Pull Request

This PR hides the refund menu on the transaction details screen when it has a non-refundable dispute.

It introduces a new dispute utility function isRefundable() to determine if a dispute status is eligible or not. Dispute statuses that are refundable and should show the refund dropdown: won, warning_needs_response, warning_under_review, warning_closed.

export const isRefundable = ( status: DisputeStatus ): boolean => {
// Refundable dispute statuses are one of `warning_needs_response`, `warning_under_review`, `warning_closed` or `won`.
return isInquiry( { status } ) || 'won' === status;
};

Transaction with a dispute not eligible for refund – refund menu is not rendered

image

Transaction with a dispute eligible for refund – refund menu is rendered

image

Testing instructions

Ensure the refund menu does not appear on the transaction details screen:

  • Active or lost disputes – as a shopper, use the card 4000000000000259 at checkout.

Ensure the refund menu appears on the transaction details screen:

  • Any non-disputed transactions.
  • Inquiries – as a shopper, use the card 4000000000001976 at checkout.
  • "Won" disputes – as a merchant, provide winning evidence by submitting the challenge form with winning_evidence in the “Additional details” field.

  • 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 Jan 3, 2024

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 7962 or branch name fix/7960-transaction-refund-eligible-disputes-only 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: 7b47bf0
  • Build time: 2024-01-04 22:39:09 UTC

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

Copy link
Contributor

github-actions bot commented Jan 3, 2024

Size Change: +22 B (0%)

Total Size: 1.27 MB

Filename Size Change
release/woocommerce-payments/dist/index.js 289 kB +22 B (0%)
ℹ️ View Unchanged
Filename Size
release/woocommerce-payments/assets/css/admin.css 1.06 kB
release/woocommerce-payments/assets/css/success.css 158 B
release/woocommerce-payments/dist/blocks-checkout-rtl.css 1.8 kB
release/woocommerce-payments/dist/blocks-checkout.css 1.8 kB
release/woocommerce-payments/dist/blocks-checkout.js 85.5 kB
release/woocommerce-payments/dist/checkout-rtl.css 318 B
release/woocommerce-payments/dist/checkout.css 319 B
release/woocommerce-payments/dist/checkout.js 37 kB
release/woocommerce-payments/dist/index-rtl.css 37.8 kB
release/woocommerce-payments/dist/index.css 37.9 kB
release/woocommerce-payments/dist/multi-currency-analytics.js 1.05 kB
release/woocommerce-payments/dist/multi-currency-rtl.css 3.4 kB
release/woocommerce-payments/dist/multi-currency-switcher-block.js 60.7 kB
release/woocommerce-payments/dist/multi-currency.css 3.4 kB
release/woocommerce-payments/dist/multi-currency.js 55.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 42.3 kB
release/woocommerce-payments/dist/payment-gateways-rtl.css 1.31 kB
release/woocommerce-payments/dist/payment-gateways.css 1.31 kB
release/woocommerce-payments/dist/payment-gateways.js 39.5 kB
release/woocommerce-payments/dist/payment-request-rtl.css 153 B
release/woocommerce-payments/dist/payment-request.css 153 B
release/woocommerce-payments/dist/payment-request.js 13.4 kB
release/woocommerce-payments/dist/product-details.js 919 B
release/woocommerce-payments/dist/settings-rtl.css 10.4 kB
release/woocommerce-payments/dist/settings.css 10.4 kB
release/woocommerce-payments/dist/settings.js 234 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.5 kB
release/woocommerce-payments/dist/subscription-product-onboarding-toast.js 710 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.6 kB
release/woocommerce-payments/dist/tos-rtl.css 230 B
release/woocommerce-payments/dist/tos.css 231 B
release/woocommerce-payments/dist/tos.js 22 kB
release/woocommerce-payments/dist/woopay-express-button-rtl.css 153 B
release/woocommerce-payments/dist/woopay-express-button.css 153 B
release/woocommerce-payments/dist/woopay-express-button.js 52.5 kB
release/woocommerce-payments/dist/woopay-rtl.css 4.18 kB
release/woocommerce-payments/dist/woopay.css 4.19 kB
release/woocommerce-payments/dist/woopay.js 71.9 kB
release/woocommerce-payments/includes/subscriptions/assets/css/plugin-page.css 622 B
release/woocommerce-payments/includes/subscriptions/assets/js/plugin-page.js 812 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.03 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.6 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.4 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.52 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.05 kB

compressed-size-action

// Refund menu is not rendered
expect(
screen.queryByRole( 'button', {
name: /Translation actions/i,
Copy link
Member Author

Choose a reason for hiding this comment

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

Note that the label for the refund menu button is Translation actions – I've opened #7964 to correct this label.

@Jinksi Jinksi marked this pull request as ready for review January 3, 2024 04:34
@Jinksi Jinksi requested a review from a team January 3, 2024 04:34
@Jinksi
Copy link
Member Author

Jinksi commented Jan 3, 2024

Requesting an optional review from @mgascam @KarlisJ since you were mentioned in the issue thread and have a good understanding of the new refund menu flow.

Copy link
Contributor

@kalessil kalessil left a comment

Choose a reason for hiding this comment

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

LGTM (code review only).

Copy link
Contributor

@KarlisJ KarlisJ left a comment

Choose a reason for hiding this comment

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

Thank you @Jinksi for handling this!

Functionally the changes are looking good, hence I'm approving the PR.

However, as Vlad already mentioned there's a slight misconception that the menu is meant only for refund related actions.

While it's true for now, the idea is that we'll be able to add more transaction related actions to the menu in the future. I didn't want to over-engineer things initially but now seeing that that some confusion is already there, I'm re-thinking that decision.

Ideally, we should have extract an array for refund actions and show the menu only if any action is available. Something like this:

const refundActions = [];
// populate refund actions based on conditions.
// this is where we would add more actions in the future.
const controlActions = [...refundActions];
const showControlMenu = !! refundActions.length;

This way it's clear for the future selves how to add more actions to the controls and the visibility of controls menu will be handled automatically. And we we'll be able to keep the logic in single place out from the template.

@Jinksi
Copy link
Member Author

Jinksi commented Jan 3, 2024

we'll be able to add more transaction related actions to the menu in the future

Ah, yes I did assume this was for refunds only. I think your initial approach was correct – it's OK for the small refactor to occur if or when new transaction actions are added.

I've renamed the var showRefundMenu to showControlMenu and added a comment indicating that the menu may include other actions in the future in d767dc1.

@KarlisJ
Copy link
Contributor

KarlisJ commented Jan 4, 2024

@Jinksi Thank you for addressing this. I like the simplicity of your last commit. You address the confusion without any over-engineering.

@Jinksi
Copy link
Member Author

Jinksi commented Jan 4, 2024

Failing shopper e2e tests are unrelated (see failing tests on all PRs https://github.com/Automattic/woocommerce-payments/actions/workflows/e2e-pull-request.yml).

Adding to merge queue

@Jinksi Jinksi added this pull request to the merge queue Jan 4, 2024
Merged via the queue into develop with commit 2a86138 Jan 4, 2024
27 of 28 checks passed
@Jinksi Jinksi deleted the fix/7960-transaction-refund-eligible-disputes-only branch January 4, 2024 23:15
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.

Disputed transactions should not show refund actions if they are not refundable
4 participants