diff options
Diffstat (limited to 'spec/lib/banzai/filter/issuable_reference_expansion_filter_spec.rb')
-rw-r--r-- | spec/lib/banzai/filter/issuable_reference_expansion_filter_spec.rb | 89 |
1 files changed, 60 insertions, 29 deletions
diff --git a/spec/lib/banzai/filter/issuable_reference_expansion_filter_spec.rb b/spec/lib/banzai/filter/issuable_reference_expansion_filter_spec.rb index 0933f45e7c3..e14b1362687 100644 --- a/spec/lib/banzai/filter/issuable_reference_expansion_filter_spec.rb +++ b/spec/lib/banzai/filter/issuable_reference_expansion_filter_spec.rb @@ -21,6 +21,10 @@ RSpec.describe Banzai::Filter::IssuableReferenceExpansionFilter, feature_categor create(:issue, state, attributes.merge(project: project)) end + def create_item(issuable_type, state, attributes = {}) + create(issuable_type, state, attributes.merge(project: project)) + end + def create_merge_request(state, attributes = {}) create(:merge_request, state, attributes.merge(source_project: project, target_project: project)) end @@ -115,75 +119,88 @@ RSpec.describe Banzai::Filter::IssuableReferenceExpansionFilter, feature_categor end end - context 'for issue references' do - it 'ignores open issue references' do - issue = create_issue(:opened) - link = create_link(issue.to_reference, issue: issue.id, reference_type: 'issue') + shared_examples 'issue / work item references' do + it 'ignores open references' do + issuable = create_item(issuable_type, :opened) + link = create_link(issuable.to_reference, "#{issuable_type}": issuable.id, reference_type: issuable_type) doc = filter(link, context) - expect(doc.css('a').last.text).to eq(issue.to_reference) + expect(doc.css('a').last.text).to eq(issuable.to_reference) end - it 'appends state to closed issue references' do - link = create_link(closed_issue.to_reference, issue: closed_issue.id, reference_type: 'issue') + it 'appends state to moved references' do + moved_issuable = create_item(issuable_type, :closed, project: project, + moved_to: create_item(issuable_type, :opened)) + link = create_link(moved_issuable.to_reference, "#{issuable_type}": moved_issuable.id, + reference_type: issuable_type) doc = filter(link, context) - expect(doc.css('a').last.text).to eq("#{closed_issue.to_reference} (closed)") + expect(doc.css('a').last.text).to eq("#{moved_issuable.to_reference} (moved)") end - it 'appends state to moved issue references' do - moved_issue = create(:issue, :closed, project: project, moved_to: create_issue(:opened)) - link = create_link(moved_issue.to_reference, issue: moved_issue.id, reference_type: 'issue') + it 'appends state to closed references' do + issuable = create_item(issuable_type, :closed) + link = create_link(issuable.to_reference, "#{issuable_type}": issuable.id, reference_type: issuable_type) doc = filter(link, context) - expect(doc.css('a').last.text).to eq("#{moved_issue.to_reference} (moved)") + expect(doc.css('a').last.text).to eq("#{issuable.to_reference} (closed)") end it 'shows title for references with +' do - issue = create_issue(:opened, title: 'Some issue') - link = create_link(issue.to_reference, issue: issue.id, reference_type: 'issue', reference_format: '+') + issuable = create_item(issuable_type, :opened, title: 'Some issue') + link = create_link(issuable.to_reference, "#{issuable_type}": issuable.id, reference_type: issuable_type, + reference_format: '+') doc = filter(link, context) - expect(doc.css('a').last.text).to eq("#{issue.title} (#{issue.to_reference})") + expect(doc.css('a').last.text).to eq("#{issuable.title} (#{issuable.to_reference})") end it 'truncates long title for references with +' do - issue = create_issue(:opened, title: 'Some issue ' * 10) - link = create_link(issue.to_reference, issue: issue.id, reference_type: 'issue', reference_format: '+') + issuable = create_item(issuable_type, :opened, title: 'Some issue ' * 10) + link = create_link(issuable.to_reference, "#{issuable_type}": issuable.id, reference_type: issuable_type, + reference_format: '+') doc = filter(link, context) - expect(doc.css('a').last.text).to eq("#{issue.title.truncate(50)} (#{issue.to_reference})") + expect(doc.css('a').last.text).to eq("#{issuable.title.truncate(50)} (#{issuable.to_reference})") end it 'shows both title and state for closed references with +' do - issue = create_issue(:closed, title: 'Some issue') - link = create_link(issue.to_reference, issue: issue.id, reference_type: 'issue', reference_format: '+') + issuable = create_item(issuable_type, :closed, title: 'Some issue') + link = create_link(issuable.to_reference, "#{issuable_type}": issuable.id, reference_type: issuable_type, + reference_format: '+') doc = filter(link, context) - expect(doc.css('a').last.text).to eq("#{issue.title} (#{issue.to_reference} - closed)") + expect(doc.css('a').last.text).to eq("#{issuable.title} (#{issuable.to_reference} - closed)") end it 'shows title for references with +s' do - issue = create_issue(:opened, title: 'Some issue') - link = create_link(issue.to_reference, issue: issue.id, reference_type: 'issue', reference_format: '+s') + issuable = create_item(issuable_type, :opened, title: 'Some issue') + link = create_link(issuable.to_reference, "#{issuable_type}": issuable.id, reference_type: issuable_type, + reference_format: '+s') doc = filter(link, context) - expect(doc.css('a').last.text).to eq("#{issue.title} (#{issue.to_reference}) • Unassigned") + expect(doc.css('a').last.text).to eq("#{issuable.title} (#{issuable.to_reference}) • Unassigned") end context 'when extended summary props are present' do let_it_be(:milestone) { create(:milestone, project: project) } let_it_be(:assignees) { create_list(:user, 3) } - let_it_be(:issue) { create_issue(:opened, title: 'Some issue', milestone: milestone, assignees: assignees) } + let_it_be(:issuable) do + create_item(issuable_type, :opened, title: 'Some issue', milestone: milestone, + assignees: assignees) + end + let_it_be(:link) do - create_link(issue.to_reference, issue: issue.id, reference_type: 'issue', reference_format: '+s') + create_link(issuable.to_reference, "#{issuable_type}": issuable.id, reference_type: issuable_type, + reference_format: '+s') end it 'shows extended summary for references with +s' do doc = filter(link, context) expect(doc.css('a').last.text).to eq( - "#{issue.title} (#{issue.to_reference}) • #{assignees[0].name}, #{assignees[1].name}+ • #{milestone.title}" + "#{issuable.title} (#{issuable.to_reference}) • #{assignees[0].name}, #{assignees[1].name}+ " \ + "• #{milestone.title}" ) end @@ -192,8 +209,10 @@ RSpec.describe Banzai::Filter::IssuableReferenceExpansionFilter, feature_categor let_it_be(:assignees2) { create_list(:user, 3) } it 'does not have N+1 for extended summary', :use_sql_query_cache do - issue2 = create_issue(:opened, title: 'Another issue', milestone: milestone2, assignees: assignees2) - link2 = create_link(issue2.to_reference, issue: issue2.id, reference_type: 'issue', reference_format: '+s') + issuable2 = create_item(issuable_type, :opened, title: 'Another issue', + milestone: milestone2, assignees: assignees2) + link2 = create_link(issuable2.to_reference, "#{issuable_type}": issuable2.id, + reference_type: issuable_type, reference_format: '+s') # warm up filter(link, context) @@ -212,6 +231,18 @@ RSpec.describe Banzai::Filter::IssuableReferenceExpansionFilter, feature_categor end end + context 'for work item references' do + let_it_be(:issuable_type) { :work_item } + + it_behaves_like 'issue / work item references' + end + + context 'for issue references' do + let_it_be(:issuable_type) { :issue } + + it_behaves_like 'issue / work item references' + end + context 'for merge request references' do it 'ignores open merge request references' do merge_request = create_merge_request(:opened) |