diff options
Diffstat (limited to 'spec/models/issue_link_spec.rb')
-rw-r--r-- | spec/models/issue_link_spec.rb | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/spec/models/issue_link_spec.rb b/spec/models/issue_link_spec.rb new file mode 100644 index 00000000000..00791d4a48b --- /dev/null +++ b/spec/models/issue_link_spec.rb @@ -0,0 +1,53 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe IssueLink do + describe 'Associations' do + it { is_expected.to belong_to(:source).class_name('Issue') } + it { is_expected.to belong_to(:target).class_name('Issue') } + end + + describe 'link_type' do + it { is_expected.to define_enum_for(:link_type).with_values(relates_to: 0, blocks: 1, is_blocked_by: 2) } + + it 'provides the "related" as default link_type' do + expect(create(:issue_link).link_type).to eq 'relates_to' + end + end + + describe 'Validation' do + subject { create :issue_link } + + it { is_expected.to validate_presence_of(:source) } + it { is_expected.to validate_presence_of(:target) } + it do + is_expected.to validate_uniqueness_of(:source) + .scoped_to(:target_id) + .with_message(/already related/) + end + + context 'self relation' do + let(:issue) { create :issue } + + context 'cannot be validated' do + it 'does not invalidate object with self relation error' do + issue_link = build :issue_link, source: issue, target: nil + + issue_link.valid? + + expect(issue_link.errors[:source]).to be_empty + end + end + + context 'can be invalidated' do + it 'invalidates object' do + issue_link = build :issue_link, source: issue, target: issue + + expect(issue_link).to be_invalid + expect(issue_link.errors[:source]).to include('cannot be related to itself') + end + end + end + end +end |