travis-api/spec/v3/models/cron_spec.rb

237 lines
9.7 KiB
Ruby

describe Travis::API::V3::Models::Cron do
let(:repo) { Travis::API::V3::Models::Repository.where(owner_name: 'svenfuchs', name: 'minimal').first }
let(:branch) { Travis::API::V3::Models::Branch.create(repository: repo, name: 'cron test') }
describe "next build time is calculated correctly on year changes" do
before do
Timecop.return
Timecop.travel(DateTime.new(2015, 12, 31, 16))
end
after do
Timecop.return
Timecop.freeze(Time.now.utc)
end
it "for daily builds" do
cron = Travis::API::V3::Models::Cron.create(branch_id: branch.id, interval: 'daily', disable_by_build: false)
build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'cron')
expect(cron.next_enqueuing).to be == DateTime.new(2016, 1, 1, 16)
build.destroy
cron.destroy
end
it "for weekly builds" do
cron = Travis::API::V3::Models::Cron.create(branch_id: branch.id, interval: 'weekly', disable_by_build: false)
build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'cron')
expect(cron.next_enqueuing).to be == DateTime.new(2016, 1, 7, 16)
build.destroy
cron.destroy
end
it "for monthly builds" do
cron = Travis::API::V3::Models::Cron.create(branch_id: branch.id, interval: 'monthly', disable_by_build: false)
build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'cron')
expect(cron.next_enqueuing).to be == DateTime.new(2016, 1, 31, 16)
build.destroy
cron.destroy
end
end
describe "push build is ignored if disable by build is false" do
before do
Timecop.return
Timecop.travel(DateTime.new(2015, 12, 31, 16))
end
after do
Timecop.return
Timecop.freeze(Time.now.utc)
end
it "for daily builds" do
cron = Travis::API::V3::Models::Cron.create(branch_id: branch.id, interval: 'daily', disable_by_build: false)
cron_build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'cron')
push_build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'push')
expect(cron.next_enqueuing).to be == DateTime.new(2016, 1, 1, 16)
cron_build.destroy
push_build.destroy
cron.destroy
end
it "for weekly builds" do
cron = Travis::API::V3::Models::Cron.create(branch_id: branch.id, interval: 'weekly', disable_by_build: false)
cron_build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'cron')
push_build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'push')
expect(cron.next_enqueuing).to be == DateTime.new(2016, 1, 7, 16)
cron_build.destroy
push_build.destroy
cron.destroy
end
it "for monthly builds" do
cron = Travis::API::V3::Models::Cron.create(branch_id: branch.id, interval: 'monthly', disable_by_build: false)
cron_build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'cron')
push_build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'push')
expect(cron.next_enqueuing).to be == DateTime.new(2016, 1, 31, 16)
cron_build.destroy
push_build.destroy
cron.destroy
end
end
describe "disable by build works with build" do
before do
Timecop.return
Timecop.travel(DateTime.new(2015, 12, 31, 16))
end
after do
Timecop.return
Timecop.freeze(Time.now.utc)
end
it "for daily builds" do
cron = Travis::API::V3::Models::Cron.create(branch_id: branch.id, interval: 'daily', disable_by_build: true)
build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'push')
expect(cron.next_enqueuing).to be == DateTime.new(2016, 1, 2, 16)
build.destroy
cron.destroy
end
it "for weekly builds" do
cron = Travis::API::V3::Models::Cron.create(branch_id: branch.id, interval: 'weekly', disable_by_build: true)
build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'push')
expect(cron.next_enqueuing).to be == DateTime.new(2016, 1, 14, 16)
build.destroy
cron.destroy
end
it "for monthly builds" do
cron = Travis::API::V3::Models::Cron.create(branch_id: branch.id, interval: 'monthly', disable_by_build: true)
build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'push')
expect(cron.next_enqueuing).to be == DateTime.new(2016, 2, 29, 16) # it's a leap year :-D
build.destroy
cron.destroy
end
end
describe "disable by build works without build" do
before do
Timecop.return
Timecop.travel(DateTime.new(2015, 12, 31, 16))
end
after do
Timecop.return
Timecop.freeze(Time.now.utc)
end
it "for daily builds" do
cron = Travis::API::V3::Models::Cron.create(branch_id: branch.id, interval: 'daily', disable_by_build: true)
build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'cron')
expect(cron.next_enqueuing).to be == DateTime.new(2016, 1, 1, 16)
build.destroy
cron.destroy
end
it "for weekly builds" do
cron = Travis::API::V3::Models::Cron.create(branch_id: branch.id, interval: 'weekly', disable_by_build: true)
build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'cron')
expect(cron.next_enqueuing).to be == DateTime.new(2016, 1, 7, 16)
build.destroy
cron.destroy
end
it "for monthly builds" do
cron = Travis::API::V3::Models::Cron.create(branch_id: branch.id, interval: 'monthly', disable_by_build: true)
build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'cron')
expect(cron.next_enqueuing).to be == DateTime.new(2016, 1, 31, 16)
build.destroy
cron.destroy
end
end
describe "build starts now if next build time is in the past" do
before do
Timecop.return
end
after do
Timecop.return
Timecop.freeze(Time.now.utc)
end
it "for daily builds with disable_by_build true" do
Timecop.travel(DateTime.new(2015, 12, 31, 16))
cron = Travis::API::V3::Models::Cron.create(branch_id: branch.id, interval: 'daily', disable_by_build: true)
build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'cron')
Timecop.freeze(DateTime.new(2016, 1, 1, 19))
expect(cron.next_enqueuing).to be == DateTime.now - 5.minutes
build.destroy
cron.destroy
end
it "for daily builds with disable_by_build false" do
Timecop.travel(DateTime.new(2015, 12, 31, 16))
cron = Travis::API::V3::Models::Cron.create(branch_id: branch.id, interval: 'daily', disable_by_build: false)
build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'cron')
Timecop.freeze(DateTime.new(2016, 1, 1, 19))
expect(cron.next_enqueuing).to be == DateTime.now - 5.minutes
build.destroy
cron.destroy
end
it "for weekly builds with disable_by_build true" do
Timecop.travel(DateTime.new(2015, 12, 31, 16))
cron = Travis::API::V3::Models::Cron.create(branch_id: branch.id, interval: 'weekly', disable_by_build: true)
build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'cron')
Timecop.freeze(DateTime.new(2016, 1, 7, 19))
expect(cron.next_enqueuing).to be == DateTime.now - 5.minutes
build.destroy
cron.destroy
end
it "for weekly builds with disable_by_build false" do
Timecop.travel(DateTime.new(2015, 12, 31, 16))
cron = Travis::API::V3::Models::Cron.create(branch_id: branch.id, interval: 'weekly', disable_by_build: false)
build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'cron')
Timecop.freeze(DateTime.new(2016, 1, 7, 19))
expect(cron.next_enqueuing).to be == DateTime.now - 5.minutes
build.destroy
cron.destroy
end
it "for monthly builds with disable_by_build true" do
Timecop.travel(DateTime.new(2015, 12, 31, 16))
cron = Travis::API::V3::Models::Cron.create(branch_id: branch.id, interval: 'monthly', disable_by_build: true)
build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'cron')
Timecop.freeze(DateTime.new(2016, 1, 31, 19))
expect(cron.next_enqueuing).to be == DateTime.now - 5.minutes
build.destroy
cron.destroy
end
it "for monthly builds with disable_by_build false" do
Timecop.travel(DateTime.new(2015, 12, 31, 16))
cron = Travis::API::V3::Models::Cron.create(branch_id: branch.id, interval: 'monthly', disable_by_build: false)
build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'cron')
Timecop.freeze(DateTime.new(2016, 1, 31, 19))
expect(cron.next_enqueuing).to be == DateTime.now - 5.minutes
build.destroy
cron.destroy
end
end
end