gitlab-ce/spec/models/work_items/widgets/development_spec.rb

115 lines
3.7 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
RSpec.describe WorkItems::Widgets::Development, feature_category: :team_planning do
describe '.type' do
subject { described_class.type }
it { is_expected.to eq(:development) }
end
describe '.quick_action_params' do
subject { described_class.quick_action_params }
it { is_expected.to include(:branch_name) }
end
describe '#type' do
subject { described_class.new(build_stubbed(:work_item)).type }
it { is_expected.to eq(:development) }
end
describe '#closing_merge_requests' do
let(:work_item) { build_stubbed(:work_item) }
subject(:closing_merge_requests) { described_class.new(work_item).closing_merge_requests }
it { is_expected.to be_a(ActiveRecord::Relation) }
it 'returns calls the correct scope' do
expect(work_item).to receive(:merge_requests_closing_issues)
closing_merge_requests
end
end
describe '#will_auto_close_by_merge_request' do
let_it_be(:group) { create(:group) }
let_it_be_with_reload(:project) { create(:project, group: group) }
let_it_be(:open_merge_request) { create(:merge_request, :opened, source_project: project) }
let_it_be(:closed_merge_request) { create(:merge_request, :closed, source_project: project, target_branch: 'f2') }
subject { described_class.new(work_item).will_auto_close_by_merge_request }
shared_examples 'will_auto_close_by_merge_request field spec' do |all_conditions_exist|
shared_examples 'field that depends on closing merge requests presence' do |all_conditions_exist|
context 'when no merge request closing issue exists' do
it { is_expected.to be_falsey }
end
context 'when closed merge request closing issue exists' do
before_all do
create(
:merge_requests_closing_issues,
issue_id: work_item.id,
merge_request_id: closed_merge_request.id
)
end
it { is_expected.to be_falsey }
context 'when associated merge request is open' do
before_all do
create(
:merge_requests_closing_issues,
issue_id: work_item.id,
merge_request_id: open_merge_request.id
)
end
it { is_expected.to eq(all_conditions_exist) }
end
end
end
context 'when work item is open' do
it_behaves_like 'field that depends on closing merge requests presence', all_conditions_exist
end
context 'when work item is closed' do
before_all do
# Reload is needed here as using before_all in shared examples doesn't play nice with let_it_be_with_reload.
# Did this as flaky specs were detected during development
work_item.reload.update!(state: :closed)
end
it_behaves_like 'field that depends on closing merge requests presence', false
end
end
context 'when work item exists at the project level' do
let_it_be_with_reload(:work_item) { create(:work_item, project: project) }
context 'when autoclose_referenced_issues is enabled in the project' do
it_behaves_like 'will_auto_close_by_merge_request field spec', true
end
context 'when autoclose_referenced_issues is disabled in the project' do
before_all do
project.update!(autoclose_referenced_issues: false)
end
it_behaves_like 'will_auto_close_by_merge_request field spec', false
end
end
context 'when work item exists at the group level' do
let_it_be_with_reload(:work_item) { create(:work_item, :group_level, namespace: group) }
it_behaves_like 'will_auto_close_by_merge_request field spec', false
end
end
end