mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
115 lines
2.5 KiB
Ruby
115 lines
2.5 KiB
Ruby
|
require 'isolation/abstract_unit'
|
||
|
require 'rack/test'
|
||
|
|
||
|
module ApplicationTests
|
||
|
class GeneratorsTest < ActiveSupport::TestCase
|
||
|
include ActiveSupport::Testing::Isolation
|
||
|
|
||
|
def setup
|
||
|
build_app
|
||
|
boot_rails
|
||
|
end
|
||
|
|
||
|
def teardown
|
||
|
teardown_app
|
||
|
end
|
||
|
|
||
|
def app_const
|
||
|
@app_const ||= Class.new(Rails::Application)
|
||
|
end
|
||
|
|
||
|
test "the queue is a TestQueue in test mode" do
|
||
|
app("test")
|
||
|
assert_kind_of Rails::Queueing::TestQueue, Rails.application.queue
|
||
|
assert_kind_of Rails::Queueing::TestQueue, Rails.queue
|
||
|
end
|
||
|
|
||
|
test "the queue is a Queue in development mode" do
|
||
|
app("development")
|
||
|
assert_kind_of Queue, Rails.application.queue
|
||
|
assert_kind_of Queue, Rails.queue
|
||
|
end
|
||
|
|
||
|
test "in development mode, an enqueued job will be processed in a separate thread" do
|
||
|
app("development")
|
||
|
current = Thread.current
|
||
|
|
||
|
job = Struct.new(:origin, :target).new(Thread.current)
|
||
|
def job.run
|
||
|
self.target = Thread.current
|
||
|
end
|
||
|
|
||
|
Rails.queue.push job
|
||
|
sleep 0.1
|
||
|
|
||
|
assert job.target, "The job was run"
|
||
|
assert_not_equal job.origin, job.target
|
||
|
end
|
||
|
|
||
|
test "in test mode, explicitly draining the queue will process it in a separate thread" do
|
||
|
app("test")
|
||
|
current = Thread.current
|
||
|
|
||
|
job = Struct.new(:origin, :target).new(Thread.current)
|
||
|
def job.run
|
||
|
self.target = Thread.current
|
||
|
end
|
||
|
|
||
|
Rails.queue.push job
|
||
|
Rails.queue.drain
|
||
|
|
||
|
assert job.target, "The job was run"
|
||
|
assert_not_equal job.origin, job.target
|
||
|
end
|
||
|
|
||
|
test "in test mode, the queue can be observed" do
|
||
|
app("test")
|
||
|
|
||
|
job = Class.new(Struct.new(:id)) do
|
||
|
def run
|
||
|
end
|
||
|
end
|
||
|
|
||
|
jobs = (1..10).map do |id|
|
||
|
job.new(id)
|
||
|
end
|
||
|
|
||
|
jobs.each do |job|
|
||
|
Rails.queue.push job
|
||
|
end
|
||
|
|
||
|
assert_equal jobs, Rails.queue.contents
|
||
|
end
|
||
|
|
||
|
test "a custom queue implementation can be provided" do
|
||
|
add_to_env_config "production", <<-RUBY
|
||
|
require "my_queue"
|
||
|
config.queue = MyQueue
|
||
|
RUBY
|
||
|
|
||
|
app_file "lib/my_queue.rb", <<-RUBY
|
||
|
class MyQueue
|
||
|
def push(job)
|
||
|
job.run
|
||
|
end
|
||
|
end
|
||
|
RUBY
|
||
|
|
||
|
app("production")
|
||
|
|
||
|
assert_kind_of MyQueue, Rails.queue
|
||
|
|
||
|
job = Class.new(Struct.new(:id, :ran)) do
|
||
|
def run
|
||
|
self.ran = true
|
||
|
end
|
||
|
end
|
||
|
|
||
|
job1 = job.new(1)
|
||
|
Rails.queue.push job1
|
||
|
|
||
|
assert_equal true, job1.ran
|
||
|
end
|
||
|
end
|
||
|
end
|