Skip to content
代码片段 群组 项目
提交 1fa1d4be 编辑于 作者: drew's avatar drew
浏览文件

Clean up MergeTrains::Train specs

Consolidate the logic testing to #all_cars, which is doing most of
the work in this class. Also cleared up some factory overuse.
上级 e11b0bda
No related branches found
No related tags found
无相关合并请求
# frozen_string_literal: true
require "spec_helper"
require 'spec_helper'
RSpec.describe MergeTrains::Train, feature_category: :merge_trains do
let_it_be(:project) { create(:project, :repository) }
let_it_be(:target_project) { create(:project, :repository) }
let_it_be(:merge_request) { create_merge_request_on_train }
let(:train) { described_class.new(target_project, target_branch) }
let(:train) { described_class.new(target_project, merge_request.target_branch) }
describe '#all_cars' do
let(:target_project) { merge_request.target_project }
let(:target_branch) { merge_request.target_branch }
let!(:merge_request) { create_merge_request_on_train }
subject { train.all_cars }
it 'returns the merge request car' do
is_expected.to eq([merge_request.merge_train_car])
end
context 'when the other merge request is on the merge train' do
let!(:merge_request_2) { create_merge_request_on_train(source_branch: 'improve/awesome') }
it 'returns both cars in order of creation' do
is_expected.to eq([merge_request.merge_train_car, merge_request_2.merge_train_car])
context 'when another merge request is opened but not on merge train' do
let!(:other_merge_request) do
create(:merge_request,
source_project: target_project,
source_branch: 'improve/awesome',
target_branch: merge_request.target_branch)
end
end
context 'when the merge request has already been merged' do
let!(:merge_request) { create_merge_request_on_train(status: :merged) }
it { is_expected.to be_empty }
it { is_expected.to eq([merge_request.merge_train_car]) }
end
context 'when the merge request is not on merge train' do
let(:merge_request) { create(:merge_request) }
it { is_expected.to be_empty }
end
end
describe '#first_car' do
subject { train.first_car }
let(:target_project) { merge_request.target_project }
let(:target_branch) { merge_request.target_branch }
let!(:merge_request) { create_merge_request_on_train }
it 'returns the merge request' do
is_expected.to eq(merge_request.merge_train_car)
end
context 'when the other merge request is on the merge train' do
context 'with another open merge request on the merge train' do
let!(:merge_request_2) { create_merge_request_on_train(source_branch: 'improve/awesome') }
it 'returns the merge request' do
is_expected.to eq(merge_request.merge_train_car)
it 'returns both cars in order of creation' do
is_expected.to eq([merge_request.merge_train_car, merge_request_2.merge_train_car])
end
end
context 'when the merge request has already been merged' do
let!(:merge_request) { create_merge_request_on_train(status: :merged) }
context 'with another open merge request that has already been merged' do
let!(:merged_merge_request) { create_merge_request_on_train(status: :merged, source_branch: 'improve/awesome') }
it { is_expected.to be_nil }
end
context 'when the merge request is not on merge train' do
let(:merge_request) { create(:merge_request) }
it 'returns empty array' do
is_expected.to be_nil
it 'does not return the merged car' do
is_expected.to eq([merge_request.merge_train_car])
end
end
end
......@@ -76,38 +46,35 @@
describe '#sha_exists_in_history?' do
subject { train.sha_exists_in_history?(target_sha, limit: limit) }
let(:target_project) { project }
let(:target_branch) { 'master' }
let(:target_sha) { '' }
let(:limit) { 20 }
context 'when there is a merge request on train' do
let!(:merge_request_1) { create_merge_request_on_train }
let(:merge_commit_sha_1) { OpenSSL::Digest.hexdigest('SHA256', 'test-1') }
let(:target_sha) { merge_commit_sha_1 }
context 'when the merge request has already been merging' do
let!(:merge_request_1) { create_merge_request_on_train(status: :merging) }
let!(:merge_request) { create_merge_request_on_train(status: :merging, source_branch: 'improve/awesome') }
before do
merge_request_1.update_column(:in_progress_merge_commit_sha, merge_commit_sha_1)
merge_request.update_column(:in_progress_merge_commit_sha, merge_commit_sha_1)
end
it { is_expected.to eq(true) }
end
context 'when the merge request has already been merged' do
let!(:merge_request_1) { create_merge_request_on_train(status: :merged) }
let!(:merge_request) { create_merge_request_on_train(status: :merged, source_branch: 'improve/awesome') }
before do
merge_request_1.update_column(:merge_commit_sha, merge_commit_sha_1)
merge_request.update_column(:merge_commit_sha, merge_commit_sha_1)
end
it { is_expected.to eq(true) }
end
context 'when there is another merge request on train and it has been merged' do
let!(:merge_request_2) { create_merge_request_on_train(source_branch: 'improve/awesome', status: :merged) }
let!(:merge_request_2) { create_merge_request_on_train(status: :merged, source_branch: 'improve/awesome') }
let(:merge_commit_sha_2) { OpenSSL::Digest.hexdigest('SHA256', 'test-2') }
let(:target_sha) { merge_commit_sha_2 }
......@@ -135,51 +102,43 @@
end
end
describe '#car_count' do
subject { train.car_count }
let(:target_project) { merge_request.target_project }
let(:target_branch) { merge_request.target_branch }
let!(:merge_request) { create_merge_request_on_train }
describe '#first_car' do
subject { train.first_car }
it 'returns the merge request' do
is_expected.to eq(1)
end
let(:first) { instance_double(MergeTrains::Car) }
let(:last) { instance_double(MergeTrains::Car) }
context 'when the other merge request is on the merge train' do
let!(:merge_request_2) { create_merge_request_on_train(source_branch: 'improve/awesome') }
let(:cars) { [first, last] }
it 'returns the merge request' do
is_expected.to eq(2)
it 'returns the first record of the all_cars relation' do
allow_next_instance_of(MergeTrains::Train) do |train|
allow(train).to receive(:all_cars).and_return(cars)
end
end
context 'when the merge request has already been merged' do
let!(:merge_request) { create_merge_request_on_train(status: :merged) }
it 'returns zero' do
is_expected.to be(0)
end
expect(subject).to eq(first)
end
end
context 'when the merge request is not on merge train' do
let(:merge_request) { create(:merge_request) }
describe '#car_count' do
subject { train.car_count }
it 'returns empty array' do
is_expected.to be(0)
let(:cars) { [instance_double(MergeTrains::Car), instance_double(MergeTrains::Car)] }
it 'returns the count of the all_cars relation' do
allow_next_instance_of(MergeTrains::Train) do |train|
allow(train).to receive(:all_cars).and_return(cars)
end
expect(subject).to eq(cars.length)
end
end
def create_merge_request_on_train(
target_project: project, target_branch: 'master', source_project: project,
source_branch: 'feature', status: :idle)
create(:merge_request,
:on_train,
target_branch: target_branch,
def create_merge_request_on_train(source_branch: 'feature', status: :idle)
create(:merge_request, :on_train,
source_project: target_project,
target_project: target_project,
target_branch: 'master',
source_branch: source_branch,
source_project: source_project,
status: MergeTrains::Car.state_machines[:status].states[status].value)
end
end
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册