Commit Graph

234 Commits

Author SHA1 Message Date
Neal Chambers
5b6f45931c Fix Layout/LineLength 2023-06-26 13:06:56 +09:00
Maikel Linke
828b2f6f44 Replace too long list of arguments with keywords
Rubocop was complaining about too many arguments. But
`ApplicationJob#perform` needs all arguments handled in one call. While
we could allow the `perform` method generally to have more arguments,
there could be other methods called `perform` which should still be
scrutinised. Instead, it seems acceptable to me to have more arguments
as long as they are clearly named as keyword arguments. Rails uses this
a lot to document all options including their default values, for
example in Active Storage. It's better then bundling several arguments
in an undocumented hash just to reduce the number of given arguments.

And once we upgraded to Ruby 3.1, we can clean the method calls up as
well. `call(user: user)` becomes `call(user:)` without repetition.
2023-06-09 14:44:54 +10:00
Maikel Linke
3fa62ceccf Simplify background report spec after rspec fix
The rspec-rails gem had an issue which was fixed in the last release.
Now we can remove my workaround and simplify the spec.
2023-05-29 13:25:44 +10:00
Maikel Linke
860fe85af9 Add report download link to email notification
I added a system spec to verify that the download link can be generated
within the mailer in a background job. ActiveStorage is a bit particular
when it comes to genererating URLs and depending on the situation it may
generate a redirect URL, a proxy URL or link directly to the storage.
But we want a redirect URL here.
2023-05-15 19:41:45 +02:00
Maikel Linke
cf5a8a26ce Notify only about slow reports
It would be annoying to get an email for reports which display on the
screen immediately.
2023-05-15 19:41:45 +02:00
Maikel Linke
1f4af7f990 Send (dummy) email when background report is done
I'll fill it out in future commits.
2023-05-15 19:41:45 +02:00
Maikel Linke
915bd19d7b Remove useless email test setup
We always deliver emails these days.
2023-04-20 12:18:04 +10:00
Maikel Linke
9998025687 Remove useless test header setup for emails
Once upon a time we needed a helper to set the `from` header of emails.
This is now set in the ApplicationMailer and not necessary any more.
2023-04-20 12:15:34 +10:00
Maikel Linke
ebb15781d5 Store report's filename within the blob
For future downloads outside the ReportsController.
2023-04-14 11:29:35 +10:00
Maikel Linke
028c4f4281 Simplify ReportJob by extracting model for result
This makes the code heaps simpler.
2023-04-14 11:29:35 +10:00
Maikel Linke
ef7dfa3b4f Store reports with Active Storage
This will enable us to offer download links and clean them up
automatically.
2023-04-14 11:29:35 +10:00
Maikel Linke
12848acf21 Fix typo 2023-04-14 11:29:35 +10:00
Maikel Linke
4f751c2711 Leverage test helpers for enqueued jobs
The production code calls `perform_later` and it's better to do the same
in specs. Handy test helper allow us to control the execution.

Credit to https://github.com/cyrillefr.
2023-04-14 11:29:35 +10:00
Neal Chambers
940f806e5f Fix Rubocop Layout/LineLength 2023-04-04 09:44:15 +09:00
David Cook
9d5ca2255b Apply suggestions from code review
Co-authored-by: Maikel <maikel@email.org.au>
2023-03-07 15:38:50 +11:00
David Cook
3d81a6e280 Prevent creating duplicate webhook notifications [migration]
Using the clever concurrency testing borrowed from SubscriptionPlacementJob, but I thought a shorter pause time (just 100ms) would be sufficient.

I considered doing this with a new 'state' field (upcoming/open/close), but decided to keep it simple.
2023-03-07 15:38:50 +11:00
David Cook
739df4be01 4. OrderCycleOpenedJob triggers webhook 2023-03-07 15:38:50 +11:00
David Cook
de9546587a Prevent webhooks to private addresses (SSRF) [add gem]
Best reviewed with whitespace hidden.

Unfortunately the spec isn't allowed in CI. But it worked on my environment, I promise.
I chose `xit` so that it doesn't run unnecessarily. Perhaps we could use `pending` instead, which would execute, and notify us if it suddenly started working one day. But I doubt it.
2023-03-07 15:38:50 +11:00
David Cook
9741935955 Raise error on server error
And thus retry later.
I tried to test that it actually retries, or ensuring the job remained in the queue to be retried, but couldn't get it to work.
2023-03-07 15:38:50 +11:00
David Cook
9d19f37fec 1. Add WebhookDeliveryJob
This job is responsible for delivering a payload for one webhook event only. It allows the action to run asynchronously (and not slow down the calling process).
2023-03-07 15:38:50 +11:00
Maikel Linke
a177f4c066 Add feature to render reports in the background
This is supposed to lower the memory footprint of all Puma workers. The
reports code will occupy needed memory in one Sidekiq worker instead of
in several Puma processes.

The current code doesn't limit the execution time yet. We either need a
way to terminate the report rendering after a while or send an email
with a link to access a rendered report.
2023-01-18 23:12:26 +00:00
Matt-Yorkley
54e1a8807a Use mails_sent flag for tracking mails 2022-01-12 11:44:21 +00:00
Filipe
da703b2d95 Merge pull request #8615 from jibees/8559-enable-sort-orders-by-order-full-name
Enable sorting orders by order full name
2022-01-11 11:27:36 +00:00
Filipe
13d04c367d Merge pull request #8636 from Matt-Yorkley/stripe-auth-emails
Stripe auth email sending; quick tidy up
2022-01-04 11:01:47 +00:00
Filipe
b256696544 Merge pull request #8549 from mkllnk/deprecate-stripe-connect
Hide old "Stripe" (StripeConnect) payment method type, keep new Stripe SCA
2021-12-23 21:33:42 +00:00
Matt-Yorkley
887879f410 Create job for handling of closing order cycles 2021-12-23 20:41:49 +01:00
Maikel Linke
60adaf3646 Disallow StripeConnect in subscriptions 2021-12-20 15:00:14 +11:00
Matt-Yorkley
68af9b6e80 Only email the hub about authorization required when necessary
This is needed in subscriptions, but in the backoffice the hub manager gets a notification in the UI, so the email is not needed.
2021-12-17 19:03:23 +00:00
Matt-Yorkley
438c205d87 Add basic test to SubscriptionConfirmJob spec 2021-12-17 12:38:09 +00:00
Matt-Yorkley
45beefc533 Keep the order of passed argument
Do not retrieve the orders list sorted by completed_at but by the order_ids array itself

Add BulkInvoiceJob spec and cover sorting behaviour
2021-12-16 09:33:38 +01:00
Maikel Linke
9b6c9bd773 Synchronise processing of proxy orders 2021-12-14 11:33:16 +11:00
Maikel Linke
7fdc2fdea2 Spec duplicate subscription order issue #8606 2021-12-14 11:33:16 +11:00
Maikel
a3c31f7d86 Revert "Kill stripe connect" 2021-09-20 08:39:34 +10:00
Nihal
98a879a0e9 Restore removed spec to profile_storer_spec 2021-09-10 14:43:34 +05:30
Luis Ramos
0c240cee9a A few more removals of stripe connect related code 2021-09-10 14:43:34 +05:30
Luis Ramos
f90e34bb47 Adapt specs to use stripe_sca_payment_method factory and delete stripe_connect_payment_method 2021-09-10 14:43:34 +05:30
Pau Perez
1125ac635b Make test not too dangerously play with time
We could get hurt and introduce flakiness in the build.
2021-06-23 13:47:42 +02:00
Pau Perez
1f3560e964 Pass in the order when it's already initialized
At `CapQuantity`'s instantiation time the proxy's order is not yet
initialized, and so `CapQuantity` was checking against nil all the time.

This went unnoticed because the job's specs were not integration-level
tests and were stubbing way too many things.
2021-06-23 13:47:42 +02:00
Pau Perez
648023750b Move tests exercising the service to its spec file
These are bypassing the job to only test the service, so there's no
point on doing that. They can test the service alone.
2021-06-23 13:45:43 +02:00
Pau Perez
827faef690 Fix call to #record_and_log_error 2021-06-21 10:30:12 +02:00
Pau Perez
b69aeae892 Rename PlaceOrder to PlaceProxyOrder
As discussed in
https://github.com/openfoodfoundation/openfoodnetwork/pull/7281#discussion_r650183813.
2021-06-21 10:30:12 +02:00
Pau Perez
f92ca964db Improve service name
As discussed in
https://github.com/openfoodfoundation/openfoodnetwork/pull/7281#discussion_r650069982.
2021-06-21 10:30:12 +02:00
Pau Perez
f61cdb6608 Extract CapQuantityAndStoreChanges service
This is a responsiblity of its own that makes the job's tests really
complex.
2021-06-21 09:49:07 +02:00
Pau Perez
fcb013eb2a Extract subs placement job logic into new service
While doing that we pass stock changes to the service but we
lazy-evaluate them. This way we don't fetch all this data from DB when
it might not be used due to an early return.

Also, this makes it possible to save the stock-related logic for later.

Finally, when changing things to rely on `#initialize_order`'s boolean
return value I noticed though, that we were evaluating
`proxy_order.order` too early.  When instantiating the service object it
won't exist yet.
2021-06-21 09:47:49 +02:00
Luis Ramos
23627c5453 Run rubocop -a (safe corrections) removing all exceptions so all possible fixes are applied
9290 issues fixed
2021-06-17 22:19:26 +01:00
Pau Perez
74a8b3038a Split ConfirmOrderJob to avoid blocking a worker
This unties this two email notifications so that they are picked up by
a DJ worker independently. This should avoid the blocking the worker experiences (remember we
still have a single one in all instances) when waiting between the two
deliveries. See the flamegraph:
https://app.datadoghq.com/apm/traces?end=1622015605459&paused=true&query=env%3Aproduction%20service%3Adelayed_job%20operation_name%3Adelayed_job%20resource_name%3AConfirmOrderJob%20%40duration%3A%3E%3D5s&start=1622009898303&streamTraces=true&trace=AQAAAXmngbg_woqc_QAAAABBWG1uZ2IwVkFBRHVDbWJkN25QTUVuY28&traceID=2916038355421570548&spanID=2005781139590273685.

Overall, both operations may take longer but other jobs can be processed
in between. Also, if any of the two fails, the other won't be affected.
2021-06-01 11:43:00 +02:00
Matt-Yorkley
53e3e2b66d Remove outdated Job test helpers
This logic around testing jobs is already handled by integrations with ActiveJob since Rails 4.2
2021-05-29 16:37:06 +01:00
Luis Ramos
b2e97fe1d2 Rename order.update! to order.update_order! and adjustment.update! to adjustment.update_adjustment! 2021-05-19 09:54:22 -07:00
Andy Brett
4f246da79f add feature spec 2021-04-28 11:25:43 -07:00
Andy Brett
61a39311b4 improve specs 2021-03-29 22:51:40 -07:00