diff options
Diffstat (limited to 'spec/support/mentionable_shared_examples.rb')
-rw-r--r-- | spec/support/mentionable_shared_examples.rb | 115 |
1 files changed, 0 insertions, 115 deletions
diff --git a/spec/support/mentionable_shared_examples.rb b/spec/support/mentionable_shared_examples.rb deleted file mode 100644 index 305592fa5a6..00000000000 --- a/spec/support/mentionable_shared_examples.rb +++ /dev/null @@ -1,115 +0,0 @@ -# Specifications for behavior common to all Mentionable implementations. -# Requires a shared context containing: -# - let(:subject) { "the mentionable implementation" } -# - let(:backref_text) { "the way that +subject+ should refer to itself in backreferences " } -# - let(:set_mentionable_text) { lambda { |txt| "block that assigns txt to the subject's mentionable_text" } } - -def common_mentionable_setup - # Avoid name collisions with let(:project) or let(:author) in the surrounding scope. - let(:mproject) { create :project } - let(:mauthor) { subject.author } - - let(:mentioned_issue) { create :issue, project: mproject } - let(:other_issue) { create :issue, project: mproject } - let(:mentioned_mr) { create :merge_request, :simple, source_project: mproject } - let(:mentioned_commit) { double('commit', sha: '1234567890abcdef').as_null_object } - - let(:ext_proj) { create :project, :public } - let(:ext_issue) { create :issue, project: ext_proj } - let(:other_ext_issue) { create :issue, project: ext_proj } - let(:ext_mr) { create :merge_request, :simple, source_project: ext_proj } - let(:ext_commit) { ext_proj.repository.commit } - - # Override to add known commits to the repository stub. - let(:extra_commits) { [] } - - # A string that mentions each of the +mentioned_.*+ objects above. Mentionables should add a self-reference - # to this string and place it in their +mentionable_text+. - let(:ref_string) do - "mentions ##{mentioned_issue.iid} twice ##{mentioned_issue.iid}, " + - "!#{mentioned_mr.iid}, " + - "#{ext_proj.path_with_namespace}##{ext_issue.iid}, " + - "#{ext_proj.path_with_namespace}!#{ext_mr.iid}, " + - "#{ext_proj.path_with_namespace}@#{ext_commit.short_id}, " + - "#{mentioned_commit.sha[0..10]} and itself as #{backref_text}" - end - - before do - # Wire the project's repository to return the mentioned commit, and +nil+ for any - # unrecognized commits. - commitmap = { '1234567890a' => mentioned_commit } - extra_commits.each { |c| commitmap[c.short_id] = c } - allow(mproject.repository).to receive(:commit) { |sha| commitmap[sha] } - set_mentionable_text.call(ref_string) - end -end - -shared_examples 'a mentionable' do - common_mentionable_setup - - it 'generates a descriptive back-reference' do - expect(subject.gfm_reference).to eq(backref_text) - end - - it "extracts references from its reference property" do - # De-duplicate and omit itself - refs = subject.references(mproject) - expect(refs.size).to eq(6) - expect(refs).to include(mentioned_issue) - expect(refs).to include(mentioned_mr) - expect(refs).to include(mentioned_commit) - expect(refs).to include(ext_issue) - expect(refs).to include(ext_mr) - expect(refs).to include(ext_commit) - end - - it 'creates cross-reference notes' do - mentioned_objects = [mentioned_issue, mentioned_mr, mentioned_commit, - ext_issue, ext_mr, ext_commit] - - mentioned_objects.each do |referenced| - expect(Note).to receive(:create_cross_reference_note).with(referenced, subject.local_reference, mauthor, mproject) - end - - subject.create_cross_references!(mproject, mauthor) - end - - it 'detects existing cross-references' do - Note.create_cross_reference_note(mentioned_issue, subject.local_reference, mauthor, mproject) - - expect(subject.has_mentioned?(mentioned_issue)).to be_truthy - expect(subject.has_mentioned?(mentioned_mr)).to be_falsey - end -end - -shared_examples 'an editable mentionable' do - common_mentionable_setup - - it_behaves_like 'a mentionable' - - it 'creates new cross-reference notes when the mentionable text is edited' do - new_text = "still mentions ##{mentioned_issue.iid}, " + - "#{mentioned_commit.sha[0..10]}, " + - "#{ext_issue.iid}, " + - "new refs: ##{other_issue.iid}, " + - "#{ext_proj.path_with_namespace}##{other_ext_issue.iid}" - - [mentioned_issue, mentioned_commit, ext_issue].each do |oldref| - expect(Note).not_to receive(:create_cross_reference_note).with(oldref, subject.local_reference, - mauthor, mproject) - end - - [other_issue, other_ext_issue].each do |newref| - expect(Note).to receive(:create_cross_reference_note).with( - newref, - subject.local_reference, - mauthor, - mproject - ) - end - - subject.save - set_mentionable_text.call(new_text) - subject.notice_added_references(mproject, mauthor) - end -end |