-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
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
Call empty only on unshipped orders #5418
base: main
Are you sure you want to change the base?
Call empty only on unshipped orders #5418
Conversation
Code fails with a 500 on admin because of the order shipping status. The change triggers @order.empty! only when the shipping status is false.
The test interacts with the headless browser, but manipulates the order behind the scenes to simulate the shipping of the order in a second tab
Thanks a lot, @nirnaeth! ❤️ Maybe unrelated to this fix: is emptying a completed order (whether it's shipped or not) something that could make sense in some scenarios? I can't figure out why someone would want to do that, so maybe we should just avoid it if the order is completed, instead of checking if it's shipped only. |
by looking at the issue, I think this is more a case of an accident. You happen to have 2 tabs open and you complete the order in one. I don't think it's something really intentional. happy to close the PR if you feel this is a non-problem or change the PR according to new specs :) |
@@ -46,7 +46,9 @@ def create | |||
|
|||
def empty | |||
authorize! :update, @order, order_token | |||
@order.empty! | |||
|
|||
@order.empty! unless @order.shipped? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@order.empty! unless @order.shipped? | |
@order.empty! unless @order.completed? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@kennyadsl I think we currently allow emptying a complete order as long as it's not been shipped. I'm thinking it may make sense in some instances, but they're probably just corner cases, so we may prefer to change behavior and privilege what makes generally more sense.
@nirnaeth my comment was a bit twisted actually, this is what I meant: https://github.com/solidusio/solidus/pull/5418/files#r1348457754. I don't think anyone wants to empty a completed order, as they don't want to empty a shipped order. Does it make sense? |
@nirnaeth thanks for working on this! ❤️ I've checked out the code, now the API call succeeds with a 200 and the order is not emptied, so no 500 error anymore 🎉. Unfortunately, there's no error message shown and cart items disappear from the page, just as if it was emptied for real, so this may be confusing for users. For this reason, I'm thinking a more clear approach may be to fail with a 422 HTTP error and show an error message to the user, what do you think? |
gotcha, let me see if the change you suggested fix both cases. |
makes perfect sense! mine was the minimum to get to the goal of not having a 500, but I do agree it makes more sense for UX to have a proper message explaining what's going on. let me see what I can do :) |
Hey @nirnaeth thanks for the contribution. I pulled down your changes and made a few changes, and then pushed them back up here: https://github.com/nvandoorn/solidus/tree/empty_cart_error_with_shipped_order Changes are as follows:
You're welcome to pull my branch and push here, or I can open a new pull request if you would prefer. |
Summary
Fixes #4438.
The change triggers
@order.empty!
only when the shipping status is false.The 500 is not triggered from the FE, but only from the BE. Nevertheless I tested manually for both cases.
Notes:
admin/order/xxxxxx/edit
), directions are welcome.Checklist