The `Spree::Admin::OrdersController`'s test file quite long (as well as
the controller itself) but it'll grow more in the upcoming commits.
That's just a symptom of that controller having too many
responsibilities. It does much more than CRUD on `Spree::Order` (the
Rails convention).
Things like invoices are an entity on their own and would better fit
into a `InvoicesController`. Hopefully, splitting up the tests is hint
for the next dev to do that.
The configuration can go into the central .simplecov file and then we
just need to `require` simplecov to start the coverage process. This
also avoids duplicating the config if we want to start simplecov from
the rails server to cover the lines used in by the server in feature
specs.
https://github.com/simplecov-ruby/simplecov#using-simplecov-for-centralized-config
For some reason the order objects were stale here when calling order.update! from either a payment or shipment callback, which was overwriting those states as nil on the order.
The removed test here was checking for adjustments that have an amount of zero and are eligible. If the amount is zero, it will already be marked as ineligible.
This new class lets us [Branch by
abstraction](https://www.martinfowler.com/bliki/BranchByAbstraction.html)
by encapsulating an order's balance. As a result, that's the only place
where we need to check the feature toggle, instead of every place where
`#outstanding_balance` is called (quite some). That would be very hard
to review and it'd be more likely to introduce bugs.
What I like about this is that we also managed to group together the
data and logic that we had spread in a few places and have it nicely
encapsulated. So, where we had a number, we'll now have an object.
Once we fully change all `#outstanding_balance` consumers to use this
new abstraction we'll be able to remove the methods this class replaces.
These are: `Spree::Order#outstanding_balance?`,
`Spree::Order#display_oustanding_balance` and
`OrderHelper.outstanding_balance_label`.
This is just the first step. I'll follow this up with a PR per
page/mailer/whatever where we use the balance to replace it with an
instance of `OrderBalance`. That is, splitting up what I explored in
https://github.com/openfoodfoundation/openfoodnetwork/pull/6959 but in
very small and manageable pieces.
The CI build can't find the downloaded file and fails like:
```
2) enterprise fee summaries csv downloads smoke test for generation of report based on permissions when logged in as enterprise user generates file with data for the enterprise
Failure/Error: sleep 0.1 until downloaded?
Timeout::Error:
execution expired
# ./spec/support/downloads_helper.rb:34:in `sleep'
# ./spec/support/downloads_helper.rb:34:in `block in wait_for_download'
# ./spec/support/downloads_helper.rb:33:in `wait_for_download'
# ./spec/support/downloads_helper.rb:11:in `downloaded_filename'
# ./engines/order_management/spec/features/order_management/reports/enterprise_fee_summaries_spec.rb:119:in `block (5 levels) in <top (required)>'
# ./engines/order_management/spec/features/order_management/reports/enterprise_fee_summaries_spec.rb:80:in `block (4 levels) in <top (required)>'
# ./spec/support/downloads_helper.rb:22:in `with_empty_downloads_folder'
# ./engines/order_management/spec/features/order_management/reports/enterprise_fee_summaries_spec.rb:80:in `block (3 levels) in <top (required)>'
```
No need to slow down the build with partial coverage analysis that won't
be merged in a single report for the whole build.
Also, this makes builds fail because we are not running the whole suite.