spec/utility/cron_spec.rb (42 lines of code) (raw):
# frozen_string_literal: true
#
# Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
# or more contributor license agreements. Licensed under the Elastic License;
# you may not use this file except in compliance with the Elastic License.
#
require 'fugit'
require 'spec_helper'
require 'utility/cron'
# see http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html
RSpec.describe Utility::Cron do
it 'supports various expressions' do
conversions = [
['0 15 10 * * ? 2005', '15 10 * * *'],
['0 0 12 * * ?', '0 12 * * *'],
['0 15 10 ? * *', '15 10 * * *'],
['0 15 10 * * ?', '15 10 * * *'],
['0 15 10 * * ? *', '15 10 * * *'],
['0 15 10 * * ? 2005', '15 10 * * *'],
['0 * 14 * * ?', '* 14 * * *'],
['0 0/5 14 * * ?', '0/5 14 * * *'],
['0 0/5 14,18 * * ?', '0/5 14,18 * * *'],
['0 0-5 14 * * ?', '0-5 14 * * *'],
['0 10,44 14 ? 3 WED', '10,44 14 * 3 WED'],
['0 15 10 ? * MON-FRI', '15 10 * * MON-FRI'],
['0 15 10 15 * ?', '15 10 15 * *'],
['0 0 12 1/5 * ?', '0 12 1/5 * *'],
['0 11 11 11 11 ?', '11 11 11 11 *'],
['0 20 6 ? * 5', '20 6 * * 4'], # every Thursday at 6:20 AM
['0 0 12 ? * 2', '0 12 * * 1'], # every Monday at 12:00 PM
['0 0 0 ? * 7', '0 0 * * 6'], # every Saturday at 12:00 AM
['0 0 0 ? * 0', '0 0 * * 0'], # every Sunday at 12:00 AM
]
conversions.each do |quartz, crontab|
expect(subject.quartz_to_crontab(quartz)).to eq(crontab)
next_time = Fugit::Cron.do_parse(crontab).next_time
print "### next_time for scheduler [#{quartz}], cron [#{crontab}]: [#{next_time}]\n"
expect(next_time).to be > Time.now
end
unsupported = ['0 15 10 ? * 6#3', '0 15 10 L * ?',
'0 15 10 L-2 * ?',
'0 15 10 ? * 6L',
'0 15 10 ? * 6L 2002-2005',
'0 15 10 ? * 6#3']
unsupported.each do |quartz|
expect { subject.quartz_to_crontab(quartz) }.to raise_error(Exception)
end
end
end