Commit Graph

19029 Commits

Author SHA1 Message Date
dependabot[bot]
735c3ce022 Bump rubocop from 1.8.0 to 1.8.1
Bumps [rubocop](https://github.com/rubocop-hq/rubocop) from 1.8.0 to 1.8.1.
- [Release notes](https://github.com/rubocop-hq/rubocop/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop/compare/v1.8.0...v1.8.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-12 05:47:39 +00:00
dependabot[bot]
c635c0f541 Bump shoulda-matchers from 4.4.1 to 4.5.0
Bumps [shoulda-matchers](https://github.com/thoughtbot/shoulda-matchers) from 4.4.1 to 4.5.0.
- [Release notes](https://github.com/thoughtbot/shoulda-matchers/releases)
- [Changelog](https://github.com/thoughtbot/shoulda-matchers/blob/master/CHANGELOG.md)
- [Commits](https://github.com/thoughtbot/shoulda-matchers/compare/v4.4.1...v4.5.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-12 05:46:41 +00:00
Andy Brett
67e5825739 add specs for content sanitizer 2021-01-11 21:34:59 -08:00
Andy Brett
5723a79409 check for content.present? 2021-01-11 21:21:24 -08:00
Matt-Yorkley
ca4de40fa2 Associate all adjustments with an order
This change is introduced in the adjustments updates from Spree 2.2 and used heavily in new scopes and methods (not included here).
2021-01-11 17:35:35 +00:00
Jean-Baptiste Bellet
8399b82bfd rename component to spinner
A name for a "thing" rather a state
2021-01-11 16:49:56 +01:00
Matt-Yorkley
46ff247bc9 Ensure ShippingMethod#destroy is using soft-deletion
25f5c2daf8

We've already applied some of the changes in this commit during previous Spree upgrade work, but there were a couple of bits missing.
2021-01-11 15:46:38 +00:00
Jean-Baptiste Bellet
26edd83a54 do not include inside a javascript asset
I made a mistake by using it inside a javascript asset
revert part of commit e34050f7c
2021-01-11 16:33:44 +01:00
Jean-Baptiste Bellet
71dc5a8ff0 remove trailing space 2021-01-11 16:29:13 +01:00
Jean-Baptiste Bellet
e34050f7cb add wrapper to show/hide loading spinner 2021-01-11 16:23:22 +01:00
Jean-Baptiste Bellet
544a7407e3 specify max-width to not overflow parent element 2021-01-11 16:22:47 +01:00
Jean-Baptiste Bellet
1b4254a5cf Revert "replace code by reusable component"
This reverts commit 4d953abbe9.
2021-01-11 16:12:17 +01:00
Pau Perez
33c72ecab0 Defend from nil BETA_TESTERS var 2021-01-11 15:55:34 +01:00
Pau Perez
dfed20d634 Consider awaiting_return, returned in balance
These states are reached when the order is complete and shipped. An
admin can create a new return authorization, which will set the order in
`awaiting_return` state. It's only after, when we call
`return_authorization#receive` that the return authorization moves to
`received` state and the order to `returned`.

You can do so from the UI by editing the return authorization and
clicking on Receive. However, we didn't find any order in such state in
UK, FR and AU. The UX is quite obfuscated. That must be why no users
clicked on it.

The `returned` state cannot count for the balance as is, since some of
the products are returned to the shop. That's enough for now.
2021-01-11 15:50:19 +01:00
Pau Perez
aa3fc71626 Consider resumed & payment orders in balance
These order states are already taken care of because they fall in the
`WHEN state IS NOT NULL` case.
2021-01-11 15:50:19 +01:00
Pau Perez
5018e88a34 Consider all states prior to checkout in balance 2021-01-11 15:50:19 +01:00
Pau Perez
398467e7ed Hide new balance impl. under feature toggle
This makes it possible to deploy it without releasing it to users since
the toggle is not enabled for anyone.

It aims to make the balance calculation consistent across pages.
2021-01-11 15:50:19 +01:00
Pau Perez
2e9bae0ea5 Move relation includes out of query object
This query object is meant to be reusable but those includes are
context-specific and will likely not be needed when reusing the query
elsewhere. If we keep them there, chances are next dev might not notice
it and will introduce a performance regression.
2021-01-11 15:50:19 +01:00
Pau Perez
46d997406a Filter out cart orders when fetching customers
We only care about non-cart orders and skipping carts, saves PostgreSQL
query planner to go through thousands of records in production use cases
(my food hub).

We go from

```sql
 ->  Index Scan using index_spree_orders_on_customer_id on spree_orders  (cost=0.42..12049.45 rows=152002 width=15) (actual time=0.015..11.703 rows=13867 loops=1)
```

to

```sql
->  Index Scan using index_spree_orders_on_customer_id on spree_orders  (cost=0.42..12429.46 rows=10802 width=15) (actual time=0.025..17.705 rows=9954 loops=1)
```
2021-01-11 15:50:19 +01:00
Pau Perez
539c5d067a Update order payment_total when voiding a payment
As is, `payment_total` is only increased after successfully processing
a payment and never updated. This inconsistency breaks
`CustomerWithBalance` which relies on it.

Needless to say that if we keep this denormalized column, we better make
it consistent. I investigated current Spree's master branch (709e686cc0)
and they also realized it was broken. Now `Payment` runs the following
from the `after_save` `update_order` callback.

```rb
order.updater.update_payment_total if completed? || void?
```

I also took the chance to rearrange tests a bit.
2021-01-11 15:50:19 +01:00
Pau Perez
04930877dd Test that payment_total is stored after payment
CustomerWithBalance totally relies on `spree_orders.payment_total` so we
better cover it with tests.
2021-01-11 15:50:19 +01:00
Pau Perez
93cdca85c6 Return 0 balance when the customer has no orders 2021-01-11 15:50:19 +01:00
Pau Perez
96a91969c9 Extract balance-specific serializer
So we only show the customer balance where really needed. Aggregating
the balance can be costly. Also, we avoid defensive coding.
2021-01-11 15:50:19 +01:00
Pau Perez
9d0dd968b1 Test customer balance query with guest orders
Guest orders also have an associated customer record that is created
by Spree::Order#ensure_customer at checkout. Subsequent orders will use
that one due to Spree::Order#associate_customer.
2021-01-11 15:50:19 +01:00
Pau Perez
d8872bc785 Explain why Arel can't be used in statement 2021-01-11 15:50:19 +01:00
Pau Perez
1e9a1f340e Don't consider order total when it is canceled 2021-01-11 15:50:19 +01:00
Pau Perez
e404225de0 Extract query object 2021-01-11 15:50:19 +01:00
Pau Perez
d62ab06504 Refactor DB query to aggregate customer balance
It's simpler and many orders of magnitude more efficient to ask the DB
to aggregate the customer balance based on their orders. It removes
a nasty N+1.

The resulting SQL query is:

```sql
SELECT customers.*, SUM(spree_orders.total - spree_orders.payment_total) AS balance
FROM "customers"
INNER JOIN "spree_orders"
    ON "spree_orders"."customer_id" = "customers"."id"
WHERE "customers"."enterprise_id" = 1
    AND (completed_at IS NOT NULL)
    AND (state != 'canceled')
GROUP BY customers.id
ORDER BY email;
```
2021-01-11 15:50:19 +01:00
Pau Pérez Fabregat
ad6165c446 Merge pull request #6480 from openfoodfoundation/dependabot/bundler/paper_trail-10.3.1
Bump paper_trail from 7.1.3 to 10.3.1
2021-01-11 12:02:34 +01:00
Jean-Baptiste Bellet
6f24ecd973 replace code by reusable component
There is no need to add .text-center as it's already on the parent component
2021-01-11 11:20:00 +01:00
Jean-Baptiste Bellet
4d953abbe9 replace code by reusable component
in a js file
2021-01-11 11:18:54 +01:00
Jean-Baptiste Bellet
b02b36b8e8 replace code by reusable component 2021-01-11 11:18:34 +01:00
Jean-Baptiste Bellet
776a61d1d9 create loading spinner reusable component 2021-01-11 11:17:33 +01:00
Andy Brett
ffeea631b3 add spec for exceeding available quantity 2021-01-09 18:49:53 -08:00
Andy Brett
c8c576ce38 keep size attribute 2021-01-09 17:49:47 -08:00
Bryan Mutai
eef6396de3 Add max attribute to item counter input 2021-01-09 17:36:35 -08:00
dependabot[bot]
b6a115e271 Bump paper_trail from 7.1.3 to 10.3.1
Bumps [paper_trail](https://github.com/airblade/paper_trail) from 7.1.3 to 10.3.1.
- [Release notes](https://github.com/airblade/paper_trail/releases)
- [Changelog](https://github.com/paper-trail-gem/paper_trail/blob/master/CHANGELOG.md)
- [Commits](https://github.com/airblade/paper_trail/compare/v7.1.3...v10.3.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-09 22:50:08 +00:00
Andy Brett
c12abf8057 Merge pull request #6617 from Matt-Yorkley/stock-items-variant-deletion
Stock items and variant deletion
2021-01-09 12:12:24 -08:00
Andy Brett
9cc0f74314 Merge pull request #6620 from mkllnk/6616-emphasize-qty-button-disabled
Emphasize disabled Add button when out of stock
2021-01-09 11:34:57 -08:00
Matt-Yorkley
e5be249f2c Update comment on #expire_current_order 2021-01-09 13:26:30 +00:00
Matt-Yorkley
f9f830e0e1 Bring in Paypal certificates hack via new initializer 2021-01-09 13:26:30 +00:00
Matt-Yorkley
c07a4fcb5e Remove data-hooks from views 2021-01-09 13:26:30 +00:00
Matt-Yorkley
8439b68b36 Update code comment and link 2021-01-09 13:26:30 +00:00
Matt-Yorkley
09b7512cd8 Remove dead code around unused payment_method_field data-hook 2021-01-09 13:26:30 +00:00
Matt-Yorkley
2e5810d64d Fix more Rubocop offences 2021-01-09 13:26:30 +00:00
Matt-Yorkley
bf47db1792 Fix missing route in Spree::OrdersController
I'm not sure why this spec started failing. Fixes:

```
Spree::OrdersController viewing cart when an item is in the cart the page provides the right registration path
     Failure/Error: expect(subject.registration_path).to eq registration_path

     ActionController::UrlGenerationError:
       No route matches {:action=>"index", :controller=>"registration"}
     # ./spec/controllers/spree/orders_controller_spec.rb:140:in `block (5 levels) in <top (required)>'
```
2021-01-09 13:26:30 +00:00
Matt-Yorkley
83f58368c7 Fix class-loading issue in test suite
Fixes:

```
Failure/Error: include Spree::Core::ControllerHelpers::Auth

NameError:
  uninitialized constant Spree::Core::ControllerHelpers::Auth
# ./lib/spree/api/controller_setup.rb:19:in `block in included'
# ./lib/spree/api/controller_setup.rb:5:in `class_eval'
# ./lib/spree/api/controller_setup.rb:5:in `included'
# ./app/controllers/api/base_controller.rb:9:in `include'
# ./app/controllers/api/base_controller.rb:9:in `<class:BaseController>'
# ./app/controllers/api/base_controller.rb:6:in `<module:Api>'
# ./app/controllers/api/base_controller.rb:5:in `<top (required)>'
# ./app/controllers/api/products_controller.rb:5:in `<module:Api>'
# ./app/controllers/api/products_controller.rb:4:in `<top (required)>'
# ./spec/controllers/api/products_controller_spec.rb:6:in `<top (required)>'
```
2021-01-09 13:26:30 +00:00
Matt-Yorkley
c34ae0af4b Bring in paypal-sdk-merchant gem dependency 2021-01-09 13:26:30 +00:00
Matt-Yorkley
3487898f68 Remove better_spree_paypal_express gem 2021-01-09 13:24:51 +00:00
Matt-Yorkley
618738db69 Fix more Rubocop offences 2021-01-09 13:22:25 +00:00