diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-06-20 14:10:13 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-06-20 14:10:13 +0300 |
commit | 0ea3fcec397b69815975647f5e2aa5fe944a8486 (patch) | |
tree | 7979381b89d26011bcf9bdc989a40fcc2f1ed4ff /spec/models/work_items/parent_link_spec.rb | |
parent | 72123183a20411a36d607d70b12d57c484394c8e (diff) |
Add latest changes from gitlab-org/gitlab@15-1-stable-eev15.1.0-rc42
Diffstat (limited to 'spec/models/work_items/parent_link_spec.rb')
-rw-r--r-- | spec/models/work_items/parent_link_spec.rb | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/spec/models/work_items/parent_link_spec.rb b/spec/models/work_items/parent_link_spec.rb new file mode 100644 index 00000000000..9516baa7340 --- /dev/null +++ b/spec/models/work_items/parent_link_spec.rb @@ -0,0 +1,66 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe WorkItems::ParentLink do + describe 'associations' do + it { is_expected.to belong_to(:work_item) } + it { is_expected.to belong_to(:work_item_parent).class_name('WorkItem') } + end + + describe 'validations' do + it { is_expected.to validate_presence_of(:work_item) } + it { is_expected.to validate_presence_of(:work_item_parent) } + + describe 'hierarchy' do + let_it_be(:project) { create(:project) } + let_it_be(:issue) { build(:work_item, project: project) } + let_it_be(:task1) { build(:work_item, :task, project: project) } + let_it_be(:task2) { build(:work_item, :task, project: project) } + + it 'is valid if not-task parent has task child' do + expect(build(:parent_link, work_item: task1, work_item_parent: issue)).to be_valid + end + + it 'is not valid if child is not task' do + link = build(:parent_link, work_item: issue) + + expect(link).not_to be_valid + expect(link.errors[:work_item]).to include('Only Task can be assigned as a child in hierarchy.') + end + + it 'is not valid if parent is task' do + link = build(:parent_link, work_item_parent: task1) + + expect(link).not_to be_valid + expect(link.errors[:work_item_parent]).to include('Only Issue can be parent of Task.') + end + + it 'is not valid if parent is in other project' do + link = build(:parent_link, work_item_parent: task1, work_item: build(:work_item)) + + expect(link).not_to be_valid + expect(link.errors[:work_item_parent]).to include('Parent must be in the same project as child.') + end + + context 'when parent already has maximum number of links' do + let_it_be(:link1) { create(:parent_link, work_item_parent: issue, work_item: task1) } + + before do + stub_const("#{described_class}::MAX_CHILDREN", 1) + end + + it 'is not valid when another link is added' do + link2 = build(:parent_link, work_item_parent: issue, work_item: task2) + + expect(link2).not_to be_valid + expect(link2.errors[:work_item_parent]).to include('Parent already has maximum number of children.') + end + + it 'existing link is still valid' do + expect(link1).to be_valid + end + end + end + end +end |