Skip to content

Commit

Permalink
Add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
mizinsky committed Dec 28, 2023
1 parent 82f803f commit 0e3fb63
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 1 deletion.
2 changes: 1 addition & 1 deletion lib/cron_calc.rb
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ def normalize_with(string, mapping)
def cron_string_valid?
predefined = /\A@(yearly|annually|monthly|weekly|daily|midnight|hourly)\z/
# rubocop:disable Layout/LineLength
standard = %r{\A(\*|([0-5]?\d)(-(?:[0-5]?\d))?(,([0-5]?\d)(-(?:[0-5]?\d))?)*) (\*|([01]?\d|2[0-3])(-(?:[01]?\d|2[0-3]))?(,([01]?\d|2[0-3])(-(?:[01]?\d|2[0-3]))?)*|(\*/\d+)) (\*|([12]?\d|3[01])(-(?:[12]?\d|3[01]))?(,([12]?\d|3[01])(-(?:[12]?\d|3[01]))?)*|(\*/\d+)) (\*|(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC|[1-9]|1[0-2])(-(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC|[1-9]|1[0-2]))?(,(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC|[1-9]|1[0-2])(-(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC|[1-9]|1[0-2]))?)*|(\*/\d+)) (\*|(SUN|MON|TUE|WED|THU|FRI|SAT|[0-6])(-(?:SUN|MON|TUE|WED|THU|FRI|SAT|[0-6]))?(,(SUN|MON|TUE|WED|THU|FRI|SAT|[0-6])(-(?:SUN|MON|TUE|WED|THU|FRI|SAT|[0-6]))?)*|(\*/[0-6]+))\z}
standard = %r{\A(\*|(\*\/[0-5]?\d)|([0-5]?\d)(-(?:[0-5]?\d))?(,([0-5]?\d)(-(?:[0-5]?\d))?)*) (\*|(\*\/[01]?\d|2[0-3])|([01]?\d|2[0-3])(-(?:[01]?\d|2[0-3]))?(,([01]?\d|2[0-3])(-(?:[01]?\d|2[0-3]))?)*|(\*/\d+)) (\*|(\*\/[12]?\d|3[01])|([12]?\d|3[01])(-(?:[12]?\d|3[01]))?(,([12]?\d|3[01])(-(?:[12]?\d|3[01]))?)*|(\*/\d+)) (\*|(\*\/[1-9]|1[0-2])|(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC|[1-9]|1[0-2])(-(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC|[1-9]|1[0-2]))?(,(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC|[1-9]|1[0-2])(-(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC|[1-9]|1[0-2]))?)*|(\*/\d+)) (\*|(\*\/[0-6])|(SUN|MON|TUE|WED|THU|FRI|SAT|[0-6])(-(?:SUN|MON|TUE|WED|THU|FRI|SAT|[0-6]))?(,(SUN|MON|TUE|WED|THU|FRI|SAT|[0-6])(-(?:SUN|MON|TUE|WED|THU|FRI|SAT|[0-6]))?)*|(\*/[0-6]+))\z}
# rubocop:enable Layout/LineLength
cron_string.match?(predefined) || cron_string.match?(standard)
end
Expand Down
49 changes: 49 additions & 0 deletions spec/cron_calc_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,55 @@
])
end
end

context 'when * and / are used in single cron part for minutes' do
let(:cron_string) { '*/15 * * * *' }
let(:period) { Time.new(2024, 1, 1, 0, 0)..Time.new(2024, 1, 1, 1, 20) }

it do
expect(subject).to eq([
Time.new(2024, 1, 1, 0, 0),
Time.new(2024, 1, 1, 0, 15),
Time.new(2024, 1, 1, 0, 30),
Time.new(2024, 1, 1, 0, 45),
Time.new(2024, 1, 1, 1, 0),
Time.new(2024, 1, 1, 1, 15)
])
end
end

context 'when * and / are used in single cron part for days' do
let(:cron_string) { '5 5 */5 * *' }
let(:period) { Time.new(2024, 1, 1, 0, 0)..Time.new(2024, 1, 29, 0, 0) }

it do
expect(subject).to eq([
Time.new(2024, 1, 1, 5, 5),
Time.new(2024, 1, 6, 5, 5),
Time.new(2024, 1, 11, 5, 5),
Time.new(2024, 1, 16, 5, 5),
Time.new(2024, 1, 21, 5, 5),
Time.new(2024, 1, 26, 5, 5)
])
end
end

context 'when complex cron string' do
let(:cron_string) { '5 5 */15 */3 MON-TUE,SAT' }
let(:period) { Time.new(2024, 1, 1, 0, 0)..Time.new(2025, 1, 1, 0, 0) }

it do
expect(subject).to eq([
Time.new(2024, 1, 1, 5, 5),
Time.new(2024, 1, 16, 5, 5),
Time.new(2024, 4, 1, 5, 5),
Time.new(2024, 4, 16, 5, 5),
Time.new(2024, 7, 1, 5, 5),
Time.new(2024, 7, 16, 5, 5),
Time.new(2024, 10, 1, 5, 5)
])
end
end
end

describe '#next' do
Expand Down

0 comments on commit 0e3fb63

Please sign in to comment.