From 739df4be014a99d8cf2694ecca69d24341111176 Mon Sep 17 00:00:00 2001 From: David Cook Date: Fri, 4 Nov 2022 16:43:27 +1100 Subject: [PATCH] 4. OrderCycleOpenedJob triggers webhook --- app/jobs/order_cycle_opened_job.rb | 17 ++++++++++++++ config/sidekiq.yml | 2 ++ spec/jobs/order_cycle_opened_job_spec.rb | 30 ++++++++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 app/jobs/order_cycle_opened_job.rb create mode 100644 spec/jobs/order_cycle_opened_job_spec.rb diff --git a/app/jobs/order_cycle_opened_job.rb b/app/jobs/order_cycle_opened_job.rb new file mode 100644 index 0000000000..0b9dfceb44 --- /dev/null +++ b/app/jobs/order_cycle_opened_job.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +# Trigger jobs for any order cycles that recently opened +class OrderCycleOpenedJob < ApplicationJob + def perform + recently_opened_order_cycles.each do |order_cycle| + OrderCycleWebhookService.create_webhook_job(order_cycle, 'order_cycle.opened') + end + end + + private + + def recently_opened_order_cycles + OrderCycle + .where(orders_open_at: 1.hour.ago..Time.zone.now) + end +end diff --git a/config/sidekiq.yml b/config/sidekiq.yml index c58aca0333..eab2b061db 100644 --- a/config/sidekiq.yml +++ b/config/sidekiq.yml @@ -15,5 +15,7 @@ every: "5m" SubscriptionConfirmJob: every: "5m" + OrderCycleOpenedJob: + every: "5m" OrderCycleClosingJob: every: "5m" diff --git a/spec/jobs/order_cycle_opened_job_spec.rb b/spec/jobs/order_cycle_opened_job_spec.rb new file mode 100644 index 0000000000..b36a18e94e --- /dev/null +++ b/spec/jobs/order_cycle_opened_job_spec.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe OrderCycleOpenedJob do + let(:oc_opened_before) { + create(:order_cycle, orders_open_at: Time.zone.now - 1.hour) + } + let(:oc_opened_now) { + create(:order_cycle, orders_open_at: Time.zone.now) + } + let(:oc_opening_soon) { + create(:order_cycle, orders_open_at: Time.zone.now + 1.minute) + } + + it "enqueues jobs for recently opened order cycles only" do + expect(OrderCycleWebhookService) + .to receive(:create_webhook_job).with(oc_opened_now, 'order_cycle.opened') + + expect(OrderCycleWebhookService) + .to_not receive(:create_webhook_job).with(oc_opened_before, 'order_cycle.opened') + + expect(OrderCycleWebhookService) + .to_not receive(:create_webhook_job).with(oc_opening_soon, 'order_cycle.opened') + + OrderCycleOpenedJob.perform_now + end + + pending "doesn't trigger jobs open more than once" +end