Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion core/lib/workarea/configuration/sidekiq.rb
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,14 @@ def configure_workarea!
end

def configure_plugins!
ActiveJob::Base.queue_adapter = :sidekiq
# Ensure ActiveJob-backed features (notably ActionMailer deliver_later)
# enqueue through Sidekiq by default.
#
# Don't override the :test adapter in test suites, since Workarea relies
# on ActiveJob's test adapter helpers (perform_enqueued_jobs, etc.).
unless ActiveJob::Base.queue_adapter.is_a?(ActiveJob::QueueAdapters::TestAdapter)
ActiveJob::Base.queue_adapter = :sidekiq
end

# Sidekiq 7 enables strict argument checking by default, but Workarea
# commonly passes BSON::ObjectId and other non-JSON-native types.
Expand Down
77 changes: 77 additions & 0 deletions core/test/lib/workarea/configuration/sidekiq_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
module Workarea
module Configuration
class SidekiqTest < TestCase
class EnqueueTestJob < ActiveJob::Base
queue_as :default
def perform; end
end
# ---------------------------------------------------------------------------
# SIDEKIQ_DEFAULTS resolution
# ---------------------------------------------------------------------------
Expand Down Expand Up @@ -95,6 +99,79 @@ def test_sidekiq_defaults_timeout_matches_resolved_value_when_no_env
expected = (defaults[:timeout] || defaults['timeout']).to_i
assert_equal expected, Configuration::Sidekiq.timeout
end

# ---------------------------------------------------------------------------
# ActiveJob adapter compatibility
# ---------------------------------------------------------------------------

def test_configure_plugins_does_not_override_test_adapter
require 'active_job/queue_adapters/test_adapter'

original_adapter = ActiveJob::Base.queue_adapter_name.to_s.to_sym
ActiveJob::Base.queue_adapter = ActiveJob::QueueAdapters::TestAdapter.new

Workarea::Configuration::Sidekiq.configure_plugins!

assert_equal 'test', ActiveJob::Base.queue_adapter_name.to_s
ensure
ActiveJob::Base.queue_adapter = original_adapter
end
end

class SidekiqActiveJobAdapterTest < ::Minitest::Test
class EnqueueTestJob < ActiveJob::Base
queue_as :default
def perform; end
end

def setup
@original_adapter = ActiveJob::Base.queue_adapter_name.to_s.to_sym
end

def teardown
ActiveJob::Base.queue_adapter = @original_adapter
end

def test_configure_plugins_sets_sidekiq_adapter_when_not_using_test_adapter
ActiveJob::Base.queue_adapter = :async
refute ActiveJob::Base.queue_adapter.is_a?(ActiveJob::QueueAdapters::TestAdapter)

Workarea::Configuration::Sidekiq.configure_plugins!

assert_equal 'sidekiq', ActiveJob::Base.queue_adapter_name.to_s
end

def test_active_job_enqueues_into_sidekiq_queue
require 'sidekiq/testing'

::Sidekiq::Testing.fake! do
::Sidekiq::Worker.clear_all

ActiveJob::Base.queue_adapter = :async
Workarea::Configuration::Sidekiq.configure_plugins!

assert_equal 'sidekiq', ActiveJob::Base.queue_adapter_name.to_s

assert_equal 0, ::Sidekiq::Worker.jobs.size

EnqueueTestJob.perform_later

assert_equal 1, ::Sidekiq::Worker.jobs.size
end
end

def test_configure_plugins_emits_no_deprecation_warnings
original_deprecated = Warning[:deprecated]
Warning[:deprecated] = true

_stdout, stderr = capture_io do
Workarea::Configuration::Sidekiq.configure_plugins!
end

assert_equal '', stderr
ensure
Warning[:deprecated] = original_deprecated
end
end
end
end
Loading