sidekiq-cron 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,12 +1,12 @@
1
1
  <header class='row'>
2
2
  <div class='col-sm-5 pull-left'>
3
- <h3><%=t 'CronJobs' %></h3>
3
+ <h3><%= t('CronJobs') %></h3>
4
4
  </div>
5
5
  <div class='col-sm-7 pull-right' style="margin-top: 20px; margin-bottom: 10px;">
6
6
  <% if @cron_jobs.size > 0 %>
7
7
  <form action="<%= root_path %>cron/__all__/delete" method="post" class="pull-right">
8
8
  <%= csrf_tag if respond_to?(:csrf_tag) %>
9
- <input class="btn btn-small btn-danger" type="submit" name="delete" value="<%= t('DeleteAll') %>" data-confirm="<%= t('AreYouSureDeleteCronJobs') %>">
9
+ <input class="btn btn-small btn-danger" type="submit" name="delete" value="<%= t('DeleteAll') %>" data-confirm="<%= t('AreYouSureDeleteCronJobs') %>" />
10
10
  </form>
11
11
  <form action="<%= root_path %>cron/__all__/disable" method="post" class="pull-right">
12
12
  <%= csrf_tag if respond_to?(:csrf_tag) %>
@@ -18,7 +18,7 @@
18
18
  </form>
19
19
  <form action="<%= root_path %>cron/__all__/enque" method="post" class="pull-right">
20
20
  <%= csrf_tag if respond_to?(:csrf_tag) %>
21
- <input class="btn btn-small" type="submit" name="enque" value="<%= t('EnqueueAll') %>" />
21
+ <input class="btn btn-small" type="submit" name="enque" value="<%= t('EnqueueAll') %>" data-confirm="<%= t('AreYouSureEnqueueCronJobs') %>" />
22
22
  </form>
23
23
  <% end %>
24
24
  </div>
@@ -61,7 +61,7 @@
61
61
  <% if job.status == 'enabled' %>
62
62
  <form action="<%= root_path %>cron/<%= CGI.escape(job.name).gsub('+', '%20') %>/enque" method="post">
63
63
  <%= csrf_tag if respond_to?(:csrf_tag) %>
64
- <input class='btn btn-xs pull-left' type="submit" name="enque" value="<%= t('EnqueueNow') %>"/>
64
+ <input class='btn btn-xs pull-left' type="submit" name="enque" value="<%= t('EnqueueNow') %>" data-confirm="<%= t('AreYouSureEnqueueCronJob', :job => job.name) %>"/>
65
65
  </form>
66
66
  <form action="<%= root_path %>cron/<%= CGI.escape(job.name).gsub('+', '%20') %>/disable" method="post">
67
67
  <%= csrf_tag if respond_to?(:csrf_tag) %>
@@ -15,7 +15,7 @@ header.row
15
15
  input.btn.btn-small.pull-left type="submit" name="enque" value="#{t('EnableAll')}"
16
16
  form.pull-right action="#{root_path}cron/__all__/enque" method="post"
17
17
  = csrf_tag if respond_to?(:csrf_tag)
18
- input.btn.btn-small.pull-left type="submit" name="enque" value="#{t('EnqueueAll')}"
18
+ input.btn.btn-small.pull-left type="submit" name="enque" value="#{t('EnqueueAll')}" data-confirm="#{t('AreYouSureEnqueueCronJobs')}"
19
19
 
20
20
  - if @cron_jobs.size > 0
21
21
 
@@ -59,7 +59,7 @@ header.row
59
59
  -else
60
60
  form action="#{root_path}cron/#{CGI.escape(job.name).gsub('+', '%20')}/enque" method="post"
61
61
  = csrf_tag if respond_to?(:csrf_tag)
62
- input.btn.btn-small.pull-left type="submit" name="enque" value="#{t('EnqueueNow')}"
62
+ input.btn.btn-small.pull-left type="submit" name="enque" value="#{t('EnqueueNow')}" data-confirm="#{t('AreYouSureEnqueueCronJob', :job => job.name)}"
63
63
  form action="#{root_path}cron/#{CGI.escape(job.name).gsub('+', '%20')}/enable" method="post"
64
64
  = csrf_tag if respond_to?(:csrf_tag)
65
65
  input.btn.btn-small.pull-left type="submit" name="enable" value="#{t('Enable')}"
@@ -9,7 +9,7 @@
9
9
  <% cron_job_path = "#{root_path}cron/#{CGI.escape(@job.name).gsub('+', '%20')}" %>
10
10
  <form action="<%= cron_job_path %>/enque?redirect=<%= cron_job_path %>" class="pull-right" method="post">
11
11
  <%= csrf_tag if respond_to?(:csrf_tag) %>
12
- <input class="btn btn-small pull-left" name="enque" type="submit" value="<%= t('EnqueueNow') %>" />
12
+ <input class="btn btn-small pull-left" name="enque" type="submit" value="<%= t('EnqueueNow') %>" data-confirm="<%= t('AreYouSureEnqueueCronJob', :job => @job.name) %>" />
13
13
  </form>
14
14
  <% if @job.status == 'enabled' %>
15
15
  <form action="<%= cron_job_path %>/disable?redirect=<%= cron_job_path %>" class="pull-right" method="post">
@@ -7,7 +7,7 @@ header.row
7
7
  - cron_job_path = "#{root_path}cron/#{CGI.escape(@job.name).gsub('+', '%20')}"
8
8
  form.pull-right action="#{cron_job_path}/enque?redirect=#{cron_job_path}" method="post"
9
9
  = csrf_tag if respond_to?(:csrf_tag)
10
- input.btn.btn-small.pull-left name="enque" type="submit" value="#{t('EnqueueNow')}"
10
+ input.btn.btn-small.pull-left data-confirm="#{t('AreYouSureEnqueueCronJob', :job => @job.name)}" name="enque" type="submit" value="#{t('EnqueueNow')}"
11
11
  - if @job.status == 'enabled'
12
12
  form.pull-right action="#{cron_job_path}/disable?redirect=#{cron_job_path}" method="post"
13
13
  = csrf_tag if respond_to?(:csrf_tag)
@@ -18,7 +18,7 @@ header.row
18
18
  input.btn.btn-small.pull-left name="enable" type="submit" value="#{t('Enable')}"
19
19
  form.pull-right action="#{cron_job_path}/delete" method="post"
20
20
  = csrf_tag if respond_to?(:csrf_tag)
21
- input.btn.btn-danger.btn-small data-confirm="#{t('AreYouSureDeleteCronJob' job =@job.name)}" name="delete" type="submit" value="#{t('Delete')}" /
21
+ input.btn.btn-danger.btn-small data-confirm="#{t('AreYouSureDeleteCronJob', :job => @job.name)}" name="delete" type="submit" value="#{t('Delete')}" /
22
22
 
23
23
  table.table.table-bordered.table-striped
24
24
  tbody
data/lib/sidekiq/cron.rb CHANGED
@@ -4,5 +4,6 @@ require "sidekiq/cron/launcher"
4
4
 
5
5
  module Sidekiq
6
6
  module Cron
7
+ Redis.respond_to?(:exists_returns_integer) && Redis.exists_returns_integer = false
7
8
  end
8
9
  end
data/sidekiq-cron.gemspec CHANGED
@@ -1,129 +1,48 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
5
- # stub: sidekiq-cron 1.2.0 ruby lib
1
+ # frozen_string_literal: true
2
+
3
+ require './lib/sidekiq/cron/version'
6
4
 
7
5
  Gem::Specification.new do |s|
8
6
  s.name = "sidekiq-cron".freeze
9
- s.version = "1.2.0"
7
+ s.version = Sidekiq::Cron::VERSION
10
8
 
11
- s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
- s.require_paths = ["lib".freeze]
13
- s.authors = ["Ondrej Bartas".freeze]
9
+ s.required_ruby_version = ">= 2.5"
10
+ s.require_paths = ["lib"]
11
+ s.authors = ["Ondrej Bartas"]
14
12
  s.date = "2020-04-03"
15
- s.description = "Enables to set jobs to be run in specified time (using CRON notation)".freeze
16
- s.email = "ondrej@bartas.cz".freeze
13
+ s.description = "Enables to set jobs to be run in specified time (using CRON notation)"
14
+ s.email = "ondrej@bartas.cz"
17
15
  s.extra_rdoc_files = [
18
16
  "LICENSE.txt",
19
17
  "README.md"
20
18
  ]
21
- s.files = [
19
+ s.files = Dir.glob('lib/**/*') + Dir.glob('test/**/*') + [
22
20
  ".document",
23
- ".travis.yml",
24
21
  "Changes.md",
25
22
  "Dockerfile",
26
- "Gemfile",
27
- "LICENSE.txt",
28
- "README.md",
29
- "Rakefile",
30
- "VERSION",
31
23
  "config.ru",
32
24
  "docker-compose.yml",
33
25
  "examples/web-cron-ui.png",
34
- "lib/sidekiq-cron.rb",
35
- "lib/sidekiq/cron.rb",
36
- "lib/sidekiq/cron/job.rb",
37
- "lib/sidekiq/cron/launcher.rb",
38
- "lib/sidekiq/cron/locales/de.yml",
39
- "lib/sidekiq/cron/locales/en.yml",
40
- "lib/sidekiq/cron/locales/ja.yml",
41
- "lib/sidekiq/cron/locales/ru.yml",
42
- "lib/sidekiq/cron/locales/zh-CN.yml",
43
- "lib/sidekiq/cron/poller.rb",
44
- "lib/sidekiq/cron/support.rb",
45
- "lib/sidekiq/cron/views/cron.erb",
46
- "lib/sidekiq/cron/views/cron.slim",
47
- "lib/sidekiq/cron/views/cron_show.erb",
48
- "lib/sidekiq/cron/views/cron_show.slim",
49
- "lib/sidekiq/cron/web.rb",
50
- "lib/sidekiq/cron/web_extension.rb",
26
+ "Gemfile",
27
+ "LICENSE.txt",
28
+ "Rakefile",
29
+ "README.md",
51
30
  "sidekiq-cron.gemspec",
52
- "test/integration/performance_test.rb",
53
- "test/test_helper.rb",
54
- "test/unit/job_test.rb",
55
- "test/unit/poller_test.rb",
56
- "test/unit/web_extension_test.rb"
57
31
  ]
58
- s.homepage = "http://github.com/ondrejbartas/sidekiq-cron".freeze
59
- s.licenses = ["MIT".freeze]
60
- s.rubygems_version = "2.5.2.3".freeze
61
- s.summary = "Sidekiq Cron helps to add repeated scheduled jobs".freeze
32
+
33
+ s.homepage = "https://github.com/ondrejbartas/sidekiq-cron"
34
+ s.licenses = ["MIT"]
35
+ s.summary = "Sidekiq Cron helps to add repeated scheduled jobs"
62
36
 
63
- if s.respond_to? :specification_version then
64
- s.specification_version = 4
37
+ s.add_dependency("fugit", ">= 1.1")
38
+ s.add_dependency("sidekiq", ">= 4.2.1")
65
39
 
66
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
67
- s.add_runtime_dependency(%q<sidekiq>.freeze, [">= 4.2.1"])
68
- s.add_runtime_dependency(%q<fugit>.freeze, ["~> 1.1"])
69
- s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
70
- s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
71
- s.add_development_dependency(%q<redis-namespace>.freeze, [">= 1.5.2"])
72
- s.add_development_dependency(%q<shoulda-context>.freeze, [">= 0"])
73
- s.add_development_dependency(%q<rack>.freeze, [">= 0"])
74
- s.add_development_dependency(%q<rack-test>.freeze, [">= 0"])
75
- s.add_development_dependency(%q<jeweler>.freeze, [">= 0"])
76
- s.add_development_dependency(%q<minitest>.freeze, [">= 0"])
77
- s.add_development_dependency(%q<test-unit>.freeze, [">= 0"])
78
- s.add_development_dependency(%q<sdoc>.freeze, [">= 0"])
79
- s.add_development_dependency(%q<slim>.freeze, [">= 0"])
80
- s.add_development_dependency(%q<sinatra>.freeze, [">= 0"])
81
- s.add_development_dependency(%q<mocha>.freeze, [">= 0"])
82
- s.add_development_dependency(%q<coveralls>.freeze, [">= 0"])
83
- s.add_development_dependency(%q<shotgun>.freeze, [">= 0"])
84
- s.add_development_dependency(%q<guard>.freeze, [">= 0"])
85
- s.add_development_dependency(%q<guard-minitest>.freeze, [">= 0"])
86
- else
87
- s.add_dependency(%q<sidekiq>.freeze, [">= 4.2.1"])
88
- s.add_dependency(%q<fugit>.freeze, ["~> 1.1"])
89
- s.add_dependency(%q<bundler>.freeze, [">= 0"])
90
- s.add_dependency(%q<simplecov>.freeze, [">= 0"])
91
- s.add_dependency(%q<redis-namespace>.freeze, [">= 1.5.2"])
92
- s.add_dependency(%q<shoulda-context>.freeze, [">= 0"])
93
- s.add_dependency(%q<rack>.freeze, [">= 0"])
94
- s.add_dependency(%q<rack-test>.freeze, [">= 0"])
95
- s.add_dependency(%q<jeweler>.freeze, [">= 0"])
96
- s.add_dependency(%q<minitest>.freeze, [">= 0"])
97
- s.add_dependency(%q<test-unit>.freeze, [">= 0"])
98
- s.add_dependency(%q<sdoc>.freeze, [">= 0"])
99
- s.add_dependency(%q<slim>.freeze, [">= 0"])
100
- s.add_dependency(%q<sinatra>.freeze, [">= 0"])
101
- s.add_dependency(%q<mocha>.freeze, [">= 0"])
102
- s.add_dependency(%q<coveralls>.freeze, [">= 0"])
103
- s.add_dependency(%q<shotgun>.freeze, [">= 0"])
104
- s.add_dependency(%q<guard>.freeze, [">= 0"])
105
- s.add_dependency(%q<guard-minitest>.freeze, [">= 0"])
106
- end
107
- else
108
- s.add_dependency(%q<sidekiq>.freeze, [">= 4.2.1"])
109
- s.add_dependency(%q<fugit>.freeze, ["~> 1.1"])
110
- s.add_dependency(%q<bundler>.freeze, [">= 0"])
111
- s.add_dependency(%q<simplecov>.freeze, [">= 0"])
112
- s.add_dependency(%q<redis-namespace>.freeze, [">= 1.5.2"])
113
- s.add_dependency(%q<shoulda-context>.freeze, [">= 0"])
114
- s.add_dependency(%q<rack>.freeze, [">= 0"])
115
- s.add_dependency(%q<rack-test>.freeze, [">= 0"])
116
- s.add_dependency(%q<jeweler>.freeze, [">= 0"])
117
- s.add_dependency(%q<minitest>.freeze, [">= 0"])
118
- s.add_dependency(%q<test-unit>.freeze, [">= 0"])
119
- s.add_dependency(%q<sdoc>.freeze, [">= 0"])
120
- s.add_dependency(%q<slim>.freeze, [">= 0"])
121
- s.add_dependency(%q<sinatra>.freeze, [">= 0"])
122
- s.add_dependency(%q<mocha>.freeze, [">= 0"])
123
- s.add_dependency(%q<coveralls>.freeze, [">= 0"])
124
- s.add_dependency(%q<shotgun>.freeze, [">= 0"])
125
- s.add_dependency(%q<guard>.freeze, [">= 0"])
126
- s.add_dependency(%q<guard-minitest>.freeze, [">= 0"])
127
- end
40
+ s.add_development_dependency("minitest", ">= 0")
41
+ s.add_development_dependency("mocha", ">= 0")
42
+ s.add_development_dependency("redis-namespace", ">= 1.5.2")
43
+ s.add_development_dependency("rack", "~> 2.0")
44
+ s.add_development_dependency("rack-test", "~> 1.0")
45
+ s.add_development_dependency("rake", "~> 13.0")
46
+ s.add_development_dependency("shoulda-context", ">= 0")
47
+ s.add_development_dependency("simplecov", ">= 0")
128
48
  end
129
-
@@ -5,8 +5,8 @@ require 'benchmark'
5
5
  describe 'Performance Poller' do
6
6
  X = 10000
7
7
  before do
8
+ REDIS.with { |c| c.respond_to?(:redis) ? c.redis.flushdb : c.flushdb }
8
9
  Sidekiq.redis = REDIS
9
- Redis.current.flushdb
10
10
 
11
11
  #clear all previous saved data from redis
12
12
  Sidekiq.redis do |conn|
@@ -31,7 +31,7 @@ describe 'Performance Poller' do
31
31
  Time.stubs(:now).returns(enqueued_time)
32
32
  end
33
33
 
34
- it 'should enqueue 10000 jobs in less than 40s' do
34
+ it 'should enqueue 10000 jobs in less than 50s' do
35
35
  Sidekiq.redis do |conn|
36
36
  assert_equal 0, conn.llen("queue:default"), 'Queue should be empty'
37
37
  end
@@ -45,6 +45,6 @@ describe 'Performance Poller' do
45
45
  end
46
46
 
47
47
  puts "Performance test finished in #{bench.real}"
48
- assert_operator bench.real, :<, 40
48
+ assert_operator bench.real, :<, 50
49
49
  end
50
50
  end
data/test/test_helper.rb CHANGED
@@ -1,12 +1,4 @@
1
- require 'rubygems'
2
- require 'bundler'
3
- begin
4
- Bundler.setup(:default, :development)
5
- rescue Bundler::BundlerError => e
6
- $stderr.puts e.message
7
- $stderr.puts "Run `bundle install` to install missing gems"
8
- exit e.status_code
9
- end
1
+ $TESTING = true
10
2
 
11
3
  require 'simplecov'
12
4
  SimpleCov.start do
@@ -14,8 +6,6 @@ SimpleCov.start do
14
6
 
15
7
  add_group 'SidekiqCron', 'lib/'
16
8
  end
17
- require 'coveralls'
18
- Coveralls.wear!
19
9
 
20
10
  require "minitest/autorun"
21
11
  require 'shoulda-context'
@@ -26,12 +16,15 @@ ENV['RACK_ENV'] = 'test'
26
16
 
27
17
  #SIDEKIQ Require - need to have sidekiq running!
28
18
  require 'sidekiq'
29
- require 'sidekiq/util'
19
+ require "sidekiq-pro" if ENV['SIDEKIQ_PRO_VERSION']
20
+ require "sidekiq/processor"
21
+ require "sidekiq/fetch"
22
+ require "sidekiq/cli"
23
+
30
24
  require 'sidekiq/web'
31
25
 
32
26
  Sidekiq.logger.level = Logger::ERROR
33
27
 
34
- require 'sidekiq/redis_connection'
35
28
  redis_url = ENV['REDIS_URL'] || 'redis://0.0.0.0:6379'
36
29
  REDIS = Sidekiq::RedisConnection.create(:url => redis_url, :namespace => 'testy')
37
30
 
@@ -46,6 +39,13 @@ require 'sidekiq-cron'
46
39
  require 'sidekiq/cron/web'
47
40
  require 'pp'
48
41
 
42
+ # For testing os symbilize args!
43
+ class Hash
44
+ def symbolize_keys
45
+ transform_keys { |key| key.to_sym rescue key }
46
+ end
47
+ end
48
+
49
49
  class CronTestClass
50
50
  include Sidekiq::Worker
51
51
  sidekiq_options retry: true
@@ -363,6 +363,108 @@ describe "Cron Job" do
363
363
  end
364
364
  end
365
365
 
366
+ describe '#active_job_message - unknown Active Job Worker class' do
367
+ before do
368
+ SecureRandom.stubs(:uuid).returns('XYZ')
369
+ ActiveJob::Base.queue_name_prefix = ''
370
+
371
+ @args = {
372
+ name: 'Test',
373
+ cron: '* * * * *',
374
+ klass: 'UnknownActiveJobCronTestClass',
375
+ active_job: true,
376
+ queue: 'super_queue',
377
+ description: nil,
378
+ args: { foo: 'bar' }
379
+ }
380
+ @job = Sidekiq::Cron::Job.new(@args)
381
+ end
382
+
383
+ it 'should return valid payload for Sidekiq::Client' do
384
+ payload = {
385
+ 'class' => 'ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper',
386
+ 'wrapped' => 'UnknownActiveJobCronTestClass',
387
+ 'queue' => 'super_queue',
388
+ 'description' => nil,
389
+ 'args' => [{
390
+ 'job_class' => 'UnknownActiveJobCronTestClass',
391
+ 'job_id' => 'XYZ',
392
+ 'queue_name' => 'super_queue',
393
+ 'arguments' => [{foo: 'bar'}]
394
+ }]
395
+ }
396
+ assert_equal @job.active_job_message, payload
397
+ end
398
+ end
399
+
400
+ describe '#active_job_message with symbolize_args (hash)' do
401
+ before do
402
+ SecureRandom.stubs(:uuid).returns('XYZ')
403
+ ActiveJob::Base.queue_name_prefix = ''
404
+
405
+ @args = {
406
+ name: 'Test',
407
+ cron: '* * * * *',
408
+ klass: 'ActiveJobCronTestClass',
409
+ queue: 'super_queue',
410
+ description: nil,
411
+ symbolize_args: true,
412
+ args: { 'foo' => 'bar' }
413
+ }
414
+ @job = Sidekiq::Cron::Job.new(@args)
415
+ end
416
+
417
+ it 'should return valid payload for Sidekiq::Client' do
418
+ payload = {
419
+ 'class' => 'ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper',
420
+ 'wrapped' => 'ActiveJobCronTestClass',
421
+ 'queue' => 'super_queue',
422
+ 'description' => nil,
423
+ 'args' => [{
424
+ 'job_class' => 'ActiveJobCronTestClass',
425
+ 'job_id' => 'XYZ',
426
+ 'queue_name' => 'super_queue',
427
+ 'arguments' => [{foo: 'bar'}]
428
+ }]
429
+ }
430
+ assert_equal @job.active_job_message, payload
431
+ end
432
+ end
433
+
434
+ describe '#active_job_message with symbolize_args (array)' do
435
+ before do
436
+ SecureRandom.stubs(:uuid).returns('XYZ')
437
+ ActiveJob::Base.queue_name_prefix = ''
438
+
439
+ @args = {
440
+ name: 'Test',
441
+ cron: '* * * * *',
442
+ klass: 'ActiveJobCronTestClass',
443
+ queue: 'super_queue',
444
+ description: nil,
445
+ symbolize_args: true,
446
+ args: [{ 'foo' => 'bar' }]
447
+ }
448
+ @job = Sidekiq::Cron::Job.new(@args)
449
+ end
450
+
451
+ it 'should return valid payload for Sidekiq::Client' do
452
+ payload = {
453
+ 'class' => 'ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper',
454
+ 'wrapped' => 'ActiveJobCronTestClass',
455
+ 'queue' => 'super_queue',
456
+ 'description' => nil,
457
+ 'args' => [{
458
+ 'job_class' => 'ActiveJobCronTestClass',
459
+ 'job_id' => 'XYZ',
460
+ 'queue_name' => 'super_queue',
461
+ 'arguments' => [{foo: 'bar'}]
462
+ }]
463
+ }
464
+ assert_equal @job.active_job_message, payload
465
+ end
466
+ end
467
+
366
468
  describe '#active_job_message with queue_name_prefix' do
367
469
  before do
368
470
  SecureRandom.stubs(:uuid).returns('XYZ')
@@ -4,8 +4,8 @@ require './test/test_helper'
4
4
 
5
5
  describe 'Cron Poller' do
6
6
  before do
7
+ REDIS.with { |c| c.respond_to?(:redis) ? c.redis.flushdb : c.flushdb }
7
8
  Sidekiq.redis = REDIS
8
- Redis.current.flushdb
9
9
 
10
10
  #clear all previous saved data from redis
11
11
  Sidekiq.redis do |conn|
@@ -1,37 +1,40 @@
1
1
  require './test/test_helper'
2
-
3
- def app
4
- Sidekiq::Web
5
- end
2
+ require 'sidekiq/web'
6
3
 
7
4
  describe 'Cron web' do
8
5
  include Rack::Test::Methods
9
6
 
7
+ TOKEN = SecureRandom.base64(32).freeze
8
+
9
+ def app
10
+ Sidekiq::Web
11
+ end
12
+
10
13
  before do
14
+ env 'rack.session', { csrf: TOKEN }
15
+ env 'HTTP_X_CSRF_TOKEN', TOKEN
16
+ REDIS.with { |c| c.respond_to?(:redis) ? c.redis.flushdb : c.flushdb }
11
17
  Sidekiq.redis = REDIS
12
- Redis.current.flushdb
18
+ end
13
19
 
14
- #clear all previous saved data from redis
15
- Sidekiq.redis do |conn|
16
- conn.keys("cron_job*").each do |key|
17
- conn.del(key)
18
- end
19
- end
20
+ let(:job_name) { "TestNameOfCronJob" }
21
+ let(:cron_job_name) { "TesQueueNameOfCronJob" }
20
22
 
21
- @args = {
22
- name: "TestNameOfCronJob",
23
+ let(:args) do
24
+ {
25
+ name: job_name,
23
26
  cron: "*/2 * * * *",
24
27
  klass: "CronTestClass"
25
28
  }
29
+ end
26
30
 
27
-
28
- @cron_args = {
29
- name: "TesQueueNameOfCronJob",
31
+ let(:cron_args) do
32
+ {
33
+ name: cron_job_name,
30
34
  cron: "*/2 * * * *",
31
35
  klass: "CronQueueTestClass",
32
36
  queue: "cron"
33
37
  }
34
-
35
38
  end
36
39
 
37
40
  it 'display cron web' do
@@ -45,7 +48,7 @@ describe 'Cron web' do
45
48
  end
46
49
 
47
50
  it 'display cron web with cron jobs table' do
48
- Sidekiq::Cron::Job.create(@args)
51
+ Sidekiq::Cron::Job.create(args)
49
52
 
50
53
  get '/cron'
51
54
  assert_equal 200, last_response.status
@@ -55,27 +58,25 @@ describe 'Cron web' do
55
58
  end
56
59
 
57
60
  describe "work with cron job" do
58
-
59
61
  before do
60
- @job = Sidekiq::Cron::Job.new(@args.merge(status: "enabled"))
61
- @job.save
62
- @name = "TestNameOfCronJob"
62
+ @job = Sidekiq::Cron::Job.new(args.merge(status: "enabled"))
63
+ assert @job.save
63
64
 
64
- @cron_job = Sidekiq::Cron::Job.new(@cron_args.merge(status: "enabled"))
65
- @cron_job.save
66
- @cron_job_name = "TesQueueNameOfCronJob"
65
+ @cron_job = Sidekiq::Cron::Job.new(cron_args.merge(status: "enabled"))
66
+ assert @cron_job.save
67
67
  end
68
68
 
69
69
  it 'shows history of a cron job' do
70
70
  @job.enque!
71
- get "/cron/#{@name}"
71
+ get "/cron/#{job_name}"
72
72
 
73
73
  jid =
74
74
  Sidekiq.redis do |conn|
75
- history = conn.lrange Sidekiq::Cron::Job.jid_history_key(@name), 0, -1
75
+ history = conn.lrange Sidekiq::Cron::Job.jid_history_key(job_name), 0, -1
76
76
  Sidekiq.load_json(history.last)['jid']
77
77
  end
78
78
 
79
+ assert jid
79
80
  assert last_response.body.include?(jid)
80
81
  end
81
82
 
@@ -87,18 +88,18 @@ describe 'Cron web' do
87
88
 
88
89
  it "disable and enable all cron jobs" do
89
90
  post "/cron/__all__/disable"
90
- assert_equal Sidekiq::Cron::Job.find(@name).status, "disabled"
91
+ assert_equal Sidekiq::Cron::Job.find(job_name).status, "disabled"
91
92
 
92
93
  post "/cron/__all__/enable"
93
- assert_equal Sidekiq::Cron::Job.find(@name).status, "enabled"
94
+ assert_equal Sidekiq::Cron::Job.find(job_name).status, "enabled"
94
95
  end
95
96
 
96
97
  it "disable and enable cron job" do
97
- post "/cron/#{@name}/disable"
98
- assert_equal Sidekiq::Cron::Job.find(@name).status, "disabled"
98
+ post "/cron/#{job_name}/disable"
99
+ assert_equal Sidekiq::Cron::Job.find(job_name).status, "disabled"
99
100
 
100
- post "/cron/#{@name}/enable"
101
- assert_equal Sidekiq::Cron::Job.find(@name).status, "enabled"
101
+ post "/cron/#{job_name}/enable"
102
+ assert_equal Sidekiq::Cron::Job.find(job_name).status, "enabled"
102
103
  end
103
104
 
104
105
  it "enqueue all jobs" do
@@ -119,21 +120,21 @@ describe 'Cron web' do
119
120
  assert_equal 0, conn.llen("queue:default"), "Queue should have no jobs"
120
121
  end
121
122
 
122
- post "/cron/#{@name}/enque"
123
+ post "/cron/#{job_name}/enque"
123
124
 
124
125
  Sidekiq.redis do |conn|
125
126
  assert_equal 1, conn.llen("queue:default"), "Queue should have 1 job"
126
127
  end
127
128
 
128
129
  #should enqueue more times
129
- post "/cron/#{@name}/enque"
130
+ post "/cron/#{job_name}/enque"
130
131
 
131
132
  Sidekiq.redis do |conn|
132
133
  assert_equal 2, conn.llen("queue:default"), "Queue should have 2 job"
133
134
  end
134
135
 
135
136
  #should enqueue to cron job queue
136
- post "/cron/#{@cron_job_name}/enque"
137
+ post "/cron/#{cron_job_name}/enque"
137
138
 
138
139
  Sidekiq.redis do |conn|
139
140
  assert_equal 1, conn.llen("queue:cron"), "Queue should have 1 cron job"
@@ -142,8 +143,8 @@ describe 'Cron web' do
142
143
 
143
144
  it "destroy job" do
144
145
  assert_equal Sidekiq::Cron::Job.all.size, 2, "Should have 2 job"
145
- post "/cron/#{@name}/delete"
146
- post "/cron/#{@cron_job_name}/delete"
146
+ post "/cron/#{job_name}/delete"
147
+ post "/cron/#{cron_job_name}/delete"
147
148
  assert_equal Sidekiq::Cron::Job.all.size, 0, "Should have zero jobs"
148
149
  end
149
150