BigW Consortium Gitlab

Commit 3d3df097 by Shinya Maeda

Dry up next_time_from. Move cron_parser_spec to appropriate location.

parent 914bef67
......@@ -11,11 +11,7 @@ module Gitlab
def next_time_from(time)
cron_line = try_parse_cron(@cron, @cron_time_zone)
if cron_line.present?
cron_line.next_time(time).in_time_zone(Time.zone)
else
nil
end
cron_line.next_time(time).in_time_zone(Time.zone) if cron_line.present?
end
def validation
......
require 'spec_helper'
module Ci
describe CronParser, lib: true do
shared_examples_for "returns time in the future" do
it { is_expected.to be > Time.now }
end
describe Gitlab::Ci::CronParser do
shared_examples_for "returns time in the future" do
it { is_expected.to be > Time.now }
end
describe '#next_time_from' do
subject { described_class.new(cron, cron_time_zone).next_time_from(Time.now) }
describe '#next_time_from' do
subject { described_class.new(cron, cron_time_zone).next_time_from(Time.now) }
context 'when cron and cron_time_zone are valid' do
context 'when specific time' do
let(:cron) { '3 4 5 6 *' }
let(:cron_time_zone) { 'UTC' }
context 'when cron and cron_time_zone are valid' do
context 'when specific time' do
let(:cron) { '3 4 5 6 *' }
let(:cron_time_zone) { 'UTC' }
it_behaves_like "returns time in the future"
it_behaves_like "returns time in the future"
it 'returns exact time' do
expect(subject.min).to eq(3)
expect(subject.hour).to eq(4)
expect(subject.day).to eq(5)
expect(subject.month).to eq(6)
end
it 'returns exact time' do
expect(subject.min).to eq(3)
expect(subject.hour).to eq(4)
expect(subject.day).to eq(5)
expect(subject.month).to eq(6)
end
end
context 'when specific day of week' do
let(:cron) { '* * * * 0' }
let(:cron_time_zone) { 'UTC' }
context 'when specific day of week' do
let(:cron) { '* * * * 0' }
let(:cron_time_zone) { 'UTC' }
it_behaves_like "returns time in the future"
it_behaves_like "returns time in the future"
it 'returns exact day of week' do
expect(subject.wday).to eq(0)
end
it 'returns exact day of week' do
expect(subject.wday).to eq(0)
end
end
context 'when slash used' do
let(:cron) { '*/10 */6 */10 */10 *' }
let(:cron_time_zone) { 'UTC' }
context 'when slash used' do
let(:cron) { '*/10 */6 */10 */10 *' }
let(:cron_time_zone) { 'UTC' }
it_behaves_like "returns time in the future"
it_behaves_like "returns time in the future"
it 'returns specific time' do
expect(subject.min).to be_in([0, 10, 20, 30, 40, 50])
expect(subject.hour).to be_in([0, 6, 12, 18])
expect(subject.day).to be_in([1, 11, 21, 31])
expect(subject.month).to be_in([1, 11])
end
it 'returns specific time' do
expect(subject.min).to be_in([0, 10, 20, 30, 40, 50])
expect(subject.hour).to be_in([0, 6, 12, 18])
expect(subject.day).to be_in([1, 11, 21, 31])
expect(subject.month).to be_in([1, 11])
end
end
context 'when range used' do
let(:cron) { '0,20,40 * 1-5 * *' }
let(:cron_time_zone) { 'UTC' }
context 'when range used' do
let(:cron) { '0,20,40 * 1-5 * *' }
let(:cron_time_zone) { 'UTC' }
it_behaves_like "returns time in the future"
it_behaves_like "returns time in the future"
it 'returns specific time' do
expect(subject.min).to be_in([0, 20, 40])
expect(subject.day).to be_in((1..5).to_a)
end
it 'returns specific time' do
expect(subject.min).to be_in([0, 20, 40])
expect(subject.day).to be_in((1..5).to_a)
end
end
context 'when cron_time_zone is US/Pacific' do
let(:cron) { '0 0 * * *' }
let(:cron_time_zone) { 'US/Pacific' }
context 'when cron_time_zone is US/Pacific' do
let(:cron) { '0 0 * * *' }
let(:cron_time_zone) { 'US/Pacific' }
it_behaves_like "returns time in the future"
it_behaves_like "returns time in the future"
it 'converts time in server time zone' do
expect(subject.hour).to eq(7)
end
it 'converts time in server time zone' do
expect(subject.hour).to eq(7)
end
end
end
context 'when cron and cron_time_zone are invalid' do
let(:cron) { 'invalid_cron' }
let(:cron_time_zone) { 'invalid_cron_time_zone' }
context 'when cron and cron_time_zone are invalid' do
let(:cron) { 'invalid_cron' }
let(:cron_time_zone) { 'invalid_cron_time_zone' }
it 'returns nil' do
is_expected.to be_nil
end
end
it 'returns nil' do
is_expected.to be_nil
end
end
end
describe '#validation' do
it 'returns results' do
is_valid_cron, is_valid_cron_time_zone = described_class.new('* * * * *', 'Europe/Istanbul').validation
expect(is_valid_cron).to eq(true)
expect(is_valid_cron_time_zone).to eq(true)
end
describe '#validation' do
it 'returns results' do
is_valid_cron, is_valid_cron_time_zone = described_class.new('* * * * *', 'Europe/Istanbul').validation
expect(is_valid_cron).to eq(true)
expect(is_valid_cron_time_zone).to eq(true)
end
it 'returns results' do
is_valid_cron, is_valid_cron_time_zone = described_class.new('*********', 'Europe/Istanbul').validation
expect(is_valid_cron).to eq(false)
expect(is_valid_cron_time_zone).to eq(true)
end
it 'returns results' do
is_valid_cron, is_valid_cron_time_zone = described_class.new('*********', 'Europe/Istanbul').validation
expect(is_valid_cron).to eq(false)
expect(is_valid_cron_time_zone).to eq(true)
end
it 'returns results' do
is_valid_cron, is_valid_cron_time_zone = described_class.new('* * * * *', 'Invalid-zone').validation
expect(is_valid_cron).to eq(true)
expect(is_valid_cron_time_zone).to eq(false)
end
it 'returns results' do
is_valid_cron, is_valid_cron_time_zone = described_class.new('* * * * *', 'Invalid-zone').validation
expect(is_valid_cron).to eq(true)
expect(is_valid_cron_time_zone).to eq(false)
end
end
end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment