sidekiq-cron 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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