require File.dirname(__FILE__) + '/test_helper'
# Pull in the server test_helper from resque
require 'resque/server/test_helper.rb'
context "on GET to /schedule" do
setup { get "/schedule" }
should_respond_with_success
end
context "on GET to /schedule with scheduled jobs" do
setup do
ENV['rails_env'] = 'production'
Resque.schedule = {'some_ivar_job' => {'cron' => "* * * * *", 'class' => 'SomeIvarJob', 'args' => "/tmp", 'rails_env' => 'production'},
'some_other_job' => {'every' => ['5m'], 'queue' => 'high', 'class' => 'SomeOtherJob', 'args' => {'b' => 'blah'}}}
Resque::Scheduler.load_schedule!
get "/schedule"
end
should_respond_with_success
test 'see the scheduled job' do
assert last_response.body.include?('SomeIvarJob')
end
end
context "on GET to /delayed" do
setup { get "/delayed" }
should_respond_with_success
end
def resque_schedule
{
'job_without_params' => {
'cron' => "* * * * *",
'class' => 'JobWithoutParams',
'args' => {"host" => 'localhost'},
'rails_env' => 'production'},
'job_with_params' => {
'cron' => "* * * * *",
'class' => 'JobWithParams',
'args' => {"host" => 'localhost'},
'parameters' => {
'log_level' => {
'description' => 'The level of logging',
'default' => 'warn'
}
}
}
}
end
context "POST /schedule/requeue" do
setup do
Resque.schedule = resque_schedule
Resque::Scheduler.load_schedule!
end
test 'job without params' do
# Regular jobs without params should redirect to /overview
job_name = 'job_without_params'
Resque::Scheduler.stubs(:enqueue_from_config).once.with(Resque.schedule[job_name])
post '/schedule/requeue', {'job_name' => job_name}
follow_redirect!
assert_equal "http://example.org/overview", last_request.url
assert last_response.ok?
end
test 'job with params' do
# If a job has params defined,
# it should render the template with a form for the job params
job_name = 'job_with_params'
post '/schedule/requeue', {'job_name' => job_name}
assert last_response.ok?, last_response.errors
assert last_response.body.include?("This job requires parameters")
assert last_response.body.include?("")
Resque.schedule[job_name]['parameters'].each do |param_name, param_config|
assert last_response.body.include?(
"(?)")
assert last_response.body.include?(
"")
end
end
end
context "POST /schedule/requeue_with_params" do
setup do
Resque.schedule = resque_schedule
Resque::Scheduler.load_schedule!
end
test 'job with params' do
job_name = 'job_with_params'
log_level = 'error'
job_config = Resque.schedule[job_name]
args = job_config['args'].merge({'log_level' => log_level})
job_config = job_config.merge({'args' => args})
Resque::Scheduler.stubs(:enqueue_from_config).once.with(job_config)
post '/schedule/requeue_with_params', {
'job_name' => job_name,
'log_level' => log_level
}
follow_redirect!
assert_equal "http://example.org/overview", last_request.url
assert last_response.ok?, last_response.errors
end
end