117 lines
1.8 KiB
Ruby
117 lines
1.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'fast_spec_helper'
|
|
|
|
RSpec.describe Gitlab::Ci::Pipeline::Duration do
|
|
let(:calculated_duration) { calculate(data) }
|
|
|
|
shared_examples 'calculating duration' do
|
|
it do
|
|
expect(calculated_duration).to eq(duration)
|
|
end
|
|
end
|
|
|
|
context 'test sample A' do
|
|
let(:data) do
|
|
[[0, 1],
|
|
[1, 2],
|
|
[3, 4],
|
|
[5, 6]]
|
|
end
|
|
|
|
let(:duration) { 4 }
|
|
|
|
it_behaves_like 'calculating duration'
|
|
end
|
|
|
|
context 'test sample B' do
|
|
let(:data) do
|
|
[[0, 1],
|
|
[1, 2],
|
|
[2, 3],
|
|
[3, 4],
|
|
[0, 4]]
|
|
end
|
|
|
|
let(:duration) { 4 }
|
|
|
|
it_behaves_like 'calculating duration'
|
|
end
|
|
|
|
context 'test sample C' do
|
|
let(:data) do
|
|
[[0, 4],
|
|
[2, 6],
|
|
[5, 7],
|
|
[8, 9]]
|
|
end
|
|
|
|
let(:duration) { 8 }
|
|
|
|
it_behaves_like 'calculating duration'
|
|
end
|
|
|
|
context 'test sample D' do
|
|
let(:data) do
|
|
[[0, 1],
|
|
[2, 3],
|
|
[4, 5],
|
|
[6, 7]]
|
|
end
|
|
|
|
let(:duration) { 4 }
|
|
|
|
it_behaves_like 'calculating duration'
|
|
end
|
|
|
|
context 'test sample E' do
|
|
let(:data) do
|
|
[[0, 1],
|
|
[3, 9],
|
|
[3, 4],
|
|
[3, 5],
|
|
[3, 8],
|
|
[4, 5],
|
|
[4, 7],
|
|
[5, 8]]
|
|
end
|
|
|
|
let(:duration) { 7 }
|
|
|
|
it_behaves_like 'calculating duration'
|
|
end
|
|
|
|
context 'test sample F' do
|
|
let(:data) do
|
|
[[1, 3],
|
|
[2, 4],
|
|
[2, 4],
|
|
[2, 4],
|
|
[5, 8]]
|
|
end
|
|
|
|
let(:duration) { 6 }
|
|
|
|
it_behaves_like 'calculating duration'
|
|
end
|
|
|
|
context 'test sample G' do
|
|
let(:data) do
|
|
[[1, 3],
|
|
[2, 4],
|
|
[6, 7]]
|
|
end
|
|
|
|
let(:duration) { 4 }
|
|
|
|
it_behaves_like 'calculating duration'
|
|
end
|
|
|
|
def calculate(data)
|
|
periods = data.shuffle.map do |(first, last)|
|
|
described_class::Period.new(first, last)
|
|
end
|
|
|
|
described_class.from_periods(periods.sort_by(&:first))
|
|
end
|
|
end
|