diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb index b35dc3b00cbcd48df6cb12413bf73f844cfe88cd..bcddb889cf4ecc40991b68872162d0753c9fcaaf 100644 --- a/app/helpers/events_helper.rb +++ b/app/helpers/events_helper.rb @@ -88,6 +88,12 @@ def event_preposition(event) end end + def event_target_path(event) + return Gitlab::UrlBuilder.build(event.target, only_path: true) if event.work_item? + + event.target_link_options + end + def event_feed_title(event) words = [] words << event.author_name diff --git a/app/views/events/event/_common.html.haml b/app/views/events/event/_common.html.haml index 93c6efc90836a55ab8fcbb898f274cdd01c91d33..1f6ac29bffc02853ed2e28b0ec2a4e5cb8ce01b6 100644 --- a/app/views/events/event/_common.html.haml +++ b/app/views/events/event/_common.html.haml @@ -8,7 +8,7 @@ %span.event-type.d-inline-block.gl-mr-2{ class: event.action_name } = event.action_name %span.event-target-type.gl-mr-2= event.target_type_name - = link_to event.target_link_options, class: 'has-tooltip event-target-link gl-mr-2', title: event.target_title do + = link_to event_target_path(event), class: 'has-tooltip event-target-link gl-mr-2', title: event.target_title do = event.target.reference_link_text - unless event.milestone? %span.event-target-title.gl-text-overflow-ellipsis.gl-overflow-hidden.gl-mr-2{ dir: "auto" } diff --git a/spec/helpers/events_helper_spec.rb b/spec/helpers/events_helper_spec.rb index 073cebeecd581a3de565ef40936b2da11691a91d..cc6804f0355138fb4a2c6ed19c40883da7a47b83 100644 --- a/spec/helpers/events_helper_spec.rb +++ b/spec/helpers/events_helper_spec.rb @@ -5,6 +5,25 @@ RSpec.describe EventsHelper do include Gitlab::Routing + describe '#event_target_path' do + subject { helper.event_target_path(event.present) } + + context 'when target is a work item' do + let(:work_item) { create(:work_item) } + let(:event) { create(:event, target: work_item, target_type: 'WorkItem') } + + it { is_expected.to eq(Gitlab::UrlBuilder.build(work_item, only_path: true)) } + end + + context 'when target is not a work item' do + let(:project) { create(:project) } + let(:issue) { create(:issue, project: project) } + let(:event) { create(:event, target: issue, project: project) } + + it { is_expected.to eq([project, issue]) } + end + end + describe '#event_commit_title' do let(:message) { 'foo & bar ' + 'A' * 70 + '\n' + 'B' * 80 } diff --git a/spec/views/events/event/_common.html.haml_spec.rb b/spec/views/events/event/_common.html.haml_spec.rb new file mode 100644 index 0000000000000000000000000000000000000000..0de84e2fdb8b148b219215d89b4e2f39ed4da486 --- /dev/null +++ b/spec/views/events/event/_common.html.haml_spec.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'events/event/_common.html.haml' do + let_it_be(:project) { create(:project) } + let_it_be(:issue) { create(:issue, project: project) } + let_it_be(:user) { create(:user) } + + context 'when it is a work item event' do + let(:work_item) { create(:work_item, project: project) } + + let(:event) do + create(:event, :created, project: project, target: work_item, target_type: 'WorkItem', author: user) + end + + it 'renders the correct url' do + render partial: 'events/event/common', locals: { event: event.present } + + expect(rendered).to have_link( + work_item.reference_link_text, href: "/#{project.full_path}/-/work_items/#{work_item.id}" + ) + end + end + + context 'when it is an isssue event' do + let(:issue) { create(:issue, project: project) } + + let(:event) do + create(:event, :created, project: project, target: issue, author: user) + end + + it 'renders the correct url' do + render partial: 'events/event/common', locals: { event: event.present } + + expect(rendered).to have_link(issue.reference_link_text, href: "/#{project.full_path}/-/issues/#{issue.iid}") + end + end +end