Commit Graph

321 Commits

Author SHA1 Message Date
rahsheen
7a5b273e71 update specs 2025-11-22 10:51:17 -05:00
rahsheen
0b6e7593db Set oc.opened at nil when cloning service 2025-11-22 10:51:17 -05:00
Maikel Linke
6c313a1b5a Remove duplicate include of TimeHelpers in specs 2025-09-05 14:30:46 +10:00
Maikel Linke
94b75540e4 Replace Timecop with Rails' time helpers
Rails 4.1 added time helpers but we never bothered using them. But now
I'm getting rid of the Timecop dependency and use standard helpers.

Beware though that the new helpers always freeze time. When you travel
to a certain date then the clock stops ticking while Timecop maintained
the passing of time.

The freezing of time could cause problems if you are trying to enforce a
timeout. But all current specs don't seem affected.

In most cases, the freezing will make it easier to avoid flaky specs.
2025-08-22 16:57:04 +10:00
Carlos Chitty
3153e99497 Update OpenOrderCycleJob test "syncing remote products" to expect 58 queries instead of 59
The main point of the test is to alert us if the query count increased (https://github.com/openfoodfoundation/openfoodnetwork/pull/13232#discussion_r2199896280).
The missing query in rails 7.1:

Spree::StockItem Load  SELECT "spree_stock_items"."id", "spree_stock_items"."variant_id", "spree_stock_items"."count_on_hand", "spree_stock_items"."created_at", "spree_stock_items"."updated_at", "spree_stock_items"."backorderable", "spree_stock_items"."deleted_at", "spree_stock_items"."lock_version" FROM "spree_stock_items" WHERE "spree_stock_items"."id" = $1 LIMIT $2 FOR UPDATE
2025-08-07 17:44:52 +02:00
Maikel Linke
dd6d1ea64b Provide open port for private address test 2025-07-24 14:19:32 +10:00
cyrillefr
5788698e8e Fixes RSpecRailsInferredSpecType offenses in jobs & mailers 2025-05-20 12:57:11 +02:00
Filipe
d8fa3e2a19 Merge pull request #13292 from mkllnk/oc-notify
Process order cycle emails individually to avoid duplicates
2025-05-08 13:15:00 +01:00
Maikel Linke
8daa01e228 Process OC emails individually to avoid duplicates
Errors or delays can cause multiple duplicate emails to the same
suppliers.
2025-05-02 16:58:00 +10:00
Gaetan Craig-Riou
b29345007d Increase query count to take into account tag query 2025-04-22 13:57:55 +10:00
Maikel Linke
1a5b6bbc8f Reset stock for unavailable products on OC open 2025-03-27 14:40:50 +11:00
Maikel Linke
177a910aac Disable printing expected error 2025-03-25 10:38:35 +11:00
Maikel Linke
973d1be90b Style EmptyBlock 2025-03-25 10:38:35 +11:00
Maikel Linke
7abaaed5b6 Make test fail when we are not locking 2025-03-25 10:38:35 +11:00
Maikel Linke
dcedffac2f Ensure we wait for all threads in spec 2025-03-25 10:38:34 +11:00
David Cook
ff7c23c8f9 Rename OrderCycleOpenedJob
This name better reflects what it's doing.

As this job is scheduled automatically by Sidekiq, I think there shouldn't be any jobs with the old name in redis. So I didn't bother keeping a placholder for the old name.

And Clean up unused include
2025-03-25 10:38:34 +11:00
David Cook
6738101ebd Raise error if record not found, and don't retry too many times
After 10 minutes, I'd consider that it failed to open the order cycle. Who would want their products to sync, or get a notification at a random time during the order cycle?

Best viewed with whitespace ignored.
2025-03-25 10:38:34 +11:00
David Cook
801beadb67 Reduce specificy of test
I guess we lose some of the detail in the db.
2025-03-25 10:38:34 +11:00
David Cook
4400b74f7e Explicitly set timecop freeze time
and in that case, might as well define it once at the top.

But it didn't help with spec failures.. see next commit
2025-03-25 10:38:34 +11:00
David Cook
23dc0f7298 Change concurrency check to be based on order_cycle.opened_at
Being based on the DB value should be more robust.

This prevents an order cycle from being "opened" when it's already open. But note that the order cycle can become "unopened" (see OrderCycle#reset_opened_at).

Nice to see the database query count drop, but I must confess I don't know why!
2025-03-25 10:38:34 +11:00
David Cook
eff8fdb28b Move to new job
And re-organise specs.

TOFIX: concurrency test now fails. why?

Use correct testing methods
2025-03-25 10:38:34 +11:00
David Cook
a8490a9b11 Record the exact event time for the webhook
There might be a delay before it gets sent, so it's better to record the time the event occurred at.
It would have been simpler to just add it to the data hash, but I felt it was an important detail for an event and should be at the top level along with event name.

In the case of order cycle opening, this is the same as opened_at. I've included this in the payload for clarity too.
2025-03-25 10:38:30 +11:00
David Cook
5b21c81ca5 Synchronise remote products when order cycle opens
I considered pre-loading the variant and product with includes, But can't do that here because it's a polymorphic relationship.
2025-03-25 10:27:47 +11:00
Gaetan Craig-Riou
bdced0b9e2 Merge pull request #13207 from mkllnk/dfc-missing-product
Gracefully handle product missing from catalog
2025-03-24 10:12:48 +11:00
cyrillefr
e26d591d24 Fixes some rubocop linting offenses - part VI 2025-03-12 21:23:49 +01:00
Maikel Linke
2f5667a294 Gracefully handle product missing from catalog 2025-03-12 12:56:08 +11:00
Maikel Linke
884206b4ed Place new backorder when there's none to amend 2025-01-09 13:28:09 +11:00
Maikel
5f486bd611 Merge pull request #13036 from chahmedejaz/bugfix/13024-dfc-catalog-syncs-for-blank-cart
Fix DFC catalog syncs for blank cart
2025-01-08 12:53:19 +11:00
Maikel Linke
ddaeff7c53 Use DfcCatalog in offer broker 2025-01-07 11:03:34 +11:00
Maikel Linke
d5c3e94b24 OfferBroker needs only catalog URL, no other URLs 2024-12-12 15:45:42 +11:00
Ahmed Ejaz
b6eca58798 13024: fix dfc catalog sync for blank cart 2024-12-12 04:28:15 +05:00
Maikel Linke
fcbaefb2c8 Update each backorder only once in bulk cancel 2024-12-11 12:40:46 +11:00
Maikel Linke
4fa4eb1b4e Move backorder update code to re-usable class 2024-12-11 12:40:46 +11:00
Maikel Linke
d16cd8c84e Amend backorder completely
Update every single order line to reflect local orders and stock levels.

New cases supported:

* Add lines for orders created by an admin.
* Create backorder line after increase of local line item quantity.
* Adjust local stock after variant has been removed from order cycle.
2024-12-11 12:40:46 +11:00
Maikel Linke
c4c95d472e Use defined DFC orders states 2024-11-29 16:16:42 +11:00
Maikel Linke
46048dcd18 Handle empty backorder
Backorder can become empty after a customer cancels their order. Then we
don't want to fail but also don't need to place an order.
2024-11-19 15:53:59 +11:00
Maikel Linke
8098131dba Store link to open backorder
We don't use the link yet, but it's there.
2024-11-19 15:53:59 +11:00
Maikel Linke
e0638b1765 Amend backorder after cancellations
The new job class blends code from the BackorderJob and the
CompleteBackorderJob for the specific case of adjusting quantities after
an order has been cancelled.

I would like to write a more general class which can be used for any
order amendmends but this was the quickest solution to cater for
currently running pilots.
2024-10-24 17:08:50 +11:00
Maikel Linke
9c7105e764 Handle case of BackorderJob having no work 2024-10-17 15:39:32 +11:00
Maikel Linke
71ca292c92 Synchronise stock with DFC catalog during checkout
This will delay the checkout request by a few seconds if there's stock
to sync. But we minimise the chance of missing reduced stock from orders
on another platform.

We still have a gap between the checkout and placing a backorder. In
that time we can't guarantee enough stock. But let's tackle that after
the pilot.
2024-10-09 14:47:07 +11:00
Maikel Linke
664f324db6 Sync stock of multiple linked catalogs
And the logic becomes a bit simpler.
2024-10-08 16:37:35 +11:00
Maikel Linke
61aa02b3c3 Sync stock with DFC catalog after cart update 2024-10-04 16:25:17 +10:00
Maikel Linke
f8bd0a1cc7 Adjust backorder for stock controlled items
We aggregate quantities over the whole order cycle to account for
cancelations and order adjustments by admins.
2024-10-03 15:58:53 +10:00
Maikel Linke
09de223c93 Backorder stock controlled products 2024-10-03 13:30:16 +10:00
Maikel Linke
74c80c9fff Prepare BackorderJob for stock controlled items
We want to trigger the backordering for any linked product now. So let's
do that check early and then select the variants in the background.
It means less data passed to the job and less space for race conditions.
2024-10-03 13:28:20 +10:00
Maikel Linke
11f3bbc566 Remove leftover recording 2024-10-03 13:28:17 +10:00
Maikel Linke
51b3770188 Keep failed backorder job in dead set
From Sidekiq's view, the job is successful when we rescue an error and
it will discard it. But we want the option to inspect the job and retry
it. Failing jobs are also reported to Bugsnag automatically.

I didn't specify `retry: false` because that discards the job as well.
But `retry: 0` should sent it straight to the dead set. No automatic
retries but it's treated like a failed job.
2024-09-26 14:32:55 +10:00
Maikel Linke
989a6d57e0 Notify user of failed backorder completion 2024-09-26 14:32:55 +10:00
Maikel Linke
495634b60c Send error notification to owner 2024-09-26 14:32:55 +10:00
Maikel Linke
49fd1dc4a6 Report backorder errors instead of failing checkout 2024-09-26 14:32:55 +10:00