Commit Graph

16553 Commits

Author SHA1 Message Date
Luis Ramos
0359d103b2 Improve code comments on dodgy and/but critical checkout process method 2020-07-30 17:18:34 +01:00
Luis Ramos
e739c5185e Add specs to verify that Spree::Core::Gateway exceptions are handled correctly 2020-07-29 23:56:52 +01:00
Luis Ramos
2136eecd09 Avoid reloading the payment every time, so that in-memory data is not wiped out
When checkout fails and the payment states dont match (inside the if), in-memory data of the failed payment can be lost but updating the payment state is the fundamental part here so that further checkout attempts work. We may improve this update statement so that all the data of the failed payment is persisted
2020-07-29 22:50:30 +01:00
Luis Ramos
9e9e0d0bd8 Remove rescue_from and just add the rescue to the edit action, the update action has a different logic where there is a generic rescue StandardError after the GatewayError rescue 2020-07-29 22:50:25 +01:00
Luis Ramos
da4abf6617 Add a comment to explain the necessity of the first rescue in the update action 2020-07-29 22:50:20 +01:00
Luis Ramos
ad00971ca8 Improve readability and add bugsnag error (now in the checkout_failed method) when checkout_fails while handling stripe redirect 2020-07-29 22:50:18 +01:00
Maikel Linke
fe0c04b650 Complete renaming of AdvanceOrderService to OrderWorkflow 2020-07-29 12:24:18 +10:00
Luis Ramos
07005594ff Move payments persistence code to order workflow service 2020-07-28 23:56:43 +01:00
Luis Ramos
ac5882e3e6 Refactor OrderWorkflow 2020-07-28 23:55:36 +01:00
Luis Ramos
9cbcf14485 Move shipping method id setting code to OrderWorkflow service 2020-07-28 23:50:47 +01:00
Luis Ramos
c3f99050fd Move advance_order_state from checkout_controller to OrderWorkflow service 2020-07-28 23:43:07 +01:00
Luis Ramos
26eee4631f Rename AdvanceOrderService to OrderWorkflow 2020-07-28 23:40:49 +01:00
Luis Ramos
734fce5ce7 Add code to persist payments after failed payments. The state machine
rollbacks the transactions, with this we keep record of what went wrong.
2020-07-28 23:29:49 +01:00
Luis Ramos
e80337a458 Transpec checkout_spec 2020-07-28 23:29:49 +01:00
Luis Ramos
51de5269dc Fix specs in checkout_spec 2020-07-28 23:29:49 +01:00
Luis Ramos
e99f0dc6b7 Rubocop autocorrect and easy rubocop issues 2020-07-28 23:29:49 +01:00
Luis Ramos
d8a96c9d34 Bring order checkout workflow and some of its specs from spree_core 2020-07-28 23:29:49 +01:00
Luis Ramos
ec0d06af54 Reuse update_failed method as the code needed is exactly the same 2020-07-25 19:39:46 +01:00
Luis Ramos
b23b707b5d Notify bugsnag and execute post checkout actions (reset to cart state) whenever there's a payment gateway exceeption raised 2020-07-25 19:39:46 +01:00
Luis Ramos
1bf946d124 Reused code in checkout controller, the reponse for the case when there is a stripe exception anywhere is the same as when the update action fails 2020-07-25 19:39:46 +01:00
Luis Ramos
5266d95910 Move method closer to related/similar methods 2020-07-25 19:39:46 +01:00
Luis Ramos
add7bb489f Update all locales with the latest Transifex translations v3.2.0 2020-07-25 13:13:35 +01:00
Luis Ramos
752d9e9bb8 Merge pull request #5806 from openfoodfoundation/bring-in-payment-model
Bring in payment model
2020-07-24 14:52:20 +01:00
Luis Ramos
d93c1684b9 Merge pull request #5780 from coopdevs/handle-credit-validation-errors
Handle credit validation errors
2020-07-24 14:49:52 +01:00
Luis Ramos
603991996f Merge pull request #5799 from luisramos0/calcs_bug
Add migration to fix calculator preferences
2020-07-24 14:22:55 +01:00
Luis Ramos
32d45f6fe5 Merge pull request #5747 from mbudm/issue/5434
Make keyboard UI close on iOS when done searching
2020-07-24 13:25:39 +01:00
Luis Ramos
8f4395a6ea We need to clear Rails cache after updating preferences so that the app picks the new values immediately 2020-07-24 13:17:43 +01:00
Luis Ramos
1b31b727c7 Add migration to fix calculator preferences 2020-07-24 13:17:43 +01:00
Pau Perez
97f551a2dd Replace literal with AR's 4 #not 2020-07-23 20:24:31 +02:00
Pau Perez
357037e429 Recalculate adjustments when invalidating payments
Switching from `#invalidate` to `#update_column` skipped both
validations and callbacks and thus, `#ensure_correct_adjustments` was no
longer called for older payments.
2020-07-23 20:24:31 +02:00
Pau Perez
e6943ce554 Fix simple Rubocop issues 2020-07-23 20:24:31 +02:00
Pau Perez
4d9fbb68d6 Add missing attribute to skip source validation 2020-07-23 20:24:31 +02:00
Pau Perez
813459ee38 Clarify method documentation 2020-07-23 20:24:31 +02:00
Pau Perez
c0f72f89f2 Handle #refund! as we do with #credit! 2020-07-23 20:24:31 +02:00
Pau Perez
0f0a704147 Skip source validation when applying credit
The original payment may not be valid because its credit card may be
expired. Stripe gives this as a valid scenario returning a success and
we should do too.

When creating the credit payment we end up validating all sources in
a chain as follows.

```
Payment being persisted -> source payment -> original credit card.
```

The source payment was valid when created (It would not be persisted
otherwise) but its source card may now be expired, and that's legit.

There was also an issue with the `#invalidate_old_payments` callback. It
was causing the original payment to be validated again and thus the
credit payment failed to be persisted due to the original credit card
being expired. Switching this callback to use `#update_column` skips
validations and so we don't validate the source payment. We only care
about the state there, so it should be fine.
2020-07-23 20:24:31 +02:00
Pau Perez
f2b28a198d Replace before_validation with custom validation
No reason to use a callback when custom validation methods can be
defined.
2020-07-23 20:24:31 +02:00
Pau Perez
f2fd426c4a Fix old Spree specs
Given the importance of this code, it doesn't bring me much confidence.
Apparently, this specs where using a non-existent state by mistake and
this went unnoticed because the payment creation was failing silently in
payment/processing.rb.

This unearthed the fact that our `#ensure_correct_adjustment` needs the
order to be persisted to succeed.
2020-07-23 20:24:31 +02:00
Pau Perez
1c026479f5 Replace spec's syntax to RSpec 3 2020-07-23 20:24:31 +02:00
Pau Perez
73b1b1f172 DRY specs and fix rubocop failures 2020-07-23 20:24:31 +02:00
Pau Perez
59da07de66 Handle all errors when dealing with payment event
This basically catches ActiveRecord::RecordInvalid caused by an invalid
credit record, for instance, but also other situations we haven't
forseen.
2020-07-23 20:24:31 +02:00
Pau Perez
26ed601996 Test the payment controller handles GatewayError
After that, we can TDD a second one that also handles validation errors.
2020-07-23 20:24:31 +02:00
Pau Perez
6ca6938df4 Merge branch 'master' into bring-in-payment-model
* master: (91 commits)
  Bump ddtrace from 0.37.0 to 0.38.0
  Add spec to cover SQL query issue with OCs where the only products from the coordinator inventory are renderer
  Remove unnecessary order statement, the relation will only be used for counting products
  Move select out of scope visible_for because it is breaking exchange_product queries and it's just not needed there. The only other use of this product's scope visible_for is the enterprise serializer so we add the select to it.
  Make OC advanced settings work by permitting the extra parameter
  Remove conflicting and duplicate route
  Bump bugsnag from 6.13.1 to 6.14.0
  Make charges update method update the first pending payment
  Move require_login_then_redirect_to to the only place where it is called
  Make broken spec fail reliably and set it pending
  Updating translations for config/locales/en_GB.yml
  Update all locales with the latest Transifex translations
  Doc defensive coding needed by pin payments
  Make method a little simple by extracting method
  Simplify spec, the 2 minutes wait is not necessary anylonger
  Make unauthorized in ControllerHelpers::Auth the same as in Spree::Admin::BaseController
  Move unauthorized view to HomeController only, all other calls to unauthorized will go through Auth which will redirect to the home controller IF the user is logged in or to login if user is not logged in
  Adapt specs to the move of unauthorized route from the spree routes to the main app routes
  Delete spree_user_signup which is from spree promotions code that we dont use
  Remove try_spree_current_user
  ...
2020-07-23 20:20:43 +02:00
Luis Ramos
6cc91d457e Merge pull request #5796 from coopdevs/remove-conlicting-spree-route
Remove conflicting and duplicate route
2020-07-23 14:29:12 +01:00
Luis Ramos
438aef1e7a Merge pull request #5798 from luisramos0/payment_fees_master
Make charges update method update the first pending payment
2020-07-23 14:23:03 +01:00
Luis Ramos
3dc9548fb3 Merge pull request #5775 from luisramos0/oc_inv_bug
Make OC advanced settings work by permitting the extra parameter and make the OC edit page work with that option activated
2020-07-22 22:23:28 +01:00
Pau Pérez Fabregat
d3296dd5ee Merge pull request #5801 from openfoodfoundation/dependabot/bundler/ddtrace-0.38.0
Bump ddtrace from 0.37.0 to 0.38.0
2020-07-22 17:42:15 +02:00
dependabot-preview[bot]
48efb42b1a Bump ddtrace from 0.37.0 to 0.38.0
Bumps [ddtrace](https://github.com/DataDog/dd-trace-rb) from 0.37.0 to 0.38.0.
- [Release notes](https://github.com/DataDog/dd-trace-rb/releases)
- [Changelog](https://github.com/DataDog/dd-trace-rb/blob/master/CHANGELOG.md)
- [Commits](https://github.com/DataDog/dd-trace-rb/compare/v0.37.0...v0.38.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-21 21:27:14 +00:00
Luis Ramos
e445fc33a1 Add spec to cover SQL query issue with OCs where the only products from the coordinator inventory are renderer 2020-07-21 20:48:16 +01:00
Luis Ramos
aadbc9ed5d Remove unnecessary order statement, the relation will only be used for counting products 2020-07-21 19:44:43 +01:00
Luis Ramos
9b5875a7d1 Move select out of scope visible_for because it is breaking exchange_product queries and it's just not needed there. The only other use of this product's scope visible_for is the enterprise serializer so we add the select to it. 2020-07-21 19:44:43 +01:00