diff --git a/ee/app/models/incident_management/issuable_resource_link.rb b/ee/app/models/incident_management/issuable_resource_link.rb index 3a55375b56d7672e6b27084da5c663eaf035766d..eedca3fc34877c94430d85219d2386b939c3d0a4 100644 --- a/ee/app/models/incident_management/issuable_resource_link.rb +++ b/ee/app/models/incident_management/issuable_resource_link.rb @@ -15,5 +15,7 @@ class IssuableResourceLink < ApplicationRecord validates :link_text, length: { maximum: 255 } scope :order_by_created_at_asc, -> { reorder(created_at: :asc) } + scope :slack_links, -> { where(link_type: :slack) } + scope :zoom_links, -> { where(link_type: :zoom) } end end diff --git a/ee/app/services/incident_management/issuable_resource_links/create_service.rb b/ee/app/services/incident_management/issuable_resource_links/create_service.rb index 0c735178c2a33e371ac3916f4fb7de1684fa6b32..d41614331910919ce9f128f1e89e0a8b739a3929 100644 --- a/ee/app/services/incident_management/issuable_resource_links/create_service.rb +++ b/ee/app/services/incident_management/issuable_resource_links/create_service.rb @@ -15,10 +15,10 @@ def initialize(incident, user, params) def execute return error_no_permissions unless allowed? - params[:link_text] = params[:link] if params[:link_text].blank? - params[:link_type] = get_link_type if params[:link_type].blank? + params[:link_text] = get_link_text(params[:link], params[:link_type].to_s) if params[:link_text].blank? + issuable_resource_link_params = params.merge({ issue: incident }) issuable_resource_link = IncidentManagement::IssuableResourceLink.new(issuable_resource_link_params) @@ -43,6 +43,14 @@ def get_link_type :general end + + def get_link_text(link, link_type) + return link if link_type == 'general' + + prefix = link_type == 'slack' ? 'Slack #' : 'Zoom #' + + prefix + link.split('/').last.split('?').first + end end end end diff --git a/ee/spec/models/incident_management/issuable_resource_link_spec.rb b/ee/spec/models/incident_management/issuable_resource_link_spec.rb index af899ee4ba66384a668f4f61e8a5ea86ad104b8c..0026889fe11fd82baf8ae6c1de5803c974506672 100644 --- a/ee/spec/models/incident_management/issuable_resource_link_spec.rb +++ b/ee/spec/models/incident_management/issuable_resource_link_spec.rb @@ -4,6 +4,8 @@ RSpec.describe IncidentManagement::IssuableResourceLink, type: :model do let_it_be(:issuable_resource_link) { create(:issuable_resource_link) } + let_it_be(:issuable_resource_link1) { create(:issuable_resource_link, link_type: :slack, link_text: 'slack1') } + let_it_be(:issuable_resource_link2) { create(:issuable_resource_link, link_type: :slack, link_text: 'slack2') } describe 'associations' do it { is_expected.to belong_to(:issue) } @@ -50,4 +52,17 @@ it { is_expected.to define_enum_for(:link_type).with_values(link_type_values) } end + + describe 'scopes' do + it 'returns slack links for slack_links' do + expect(described_class.slack_links).to contain_exactly( + issuable_resource_link1, + issuable_resource_link2 + ) + end + + it 'returns zoom links for zoom_links' do + expect(described_class.zoom_links).to contain_exactly(issuable_resource_link) + end + end end diff --git a/ee/spec/services/incident_management/issuable_resource_links/create_service_spec.rb b/ee/spec/services/incident_management/issuable_resource_links/create_service_spec.rb index 9eaa8757ce57db0f7a0900bc90154c8163fd1bf5..ba86b789686093552bc129279324203e6fdd1c8f 100644 --- a/ee/spec/services/incident_management/issuable_resource_links/create_service_spec.rb +++ b/ee/spec/services/incident_management/issuable_resource_links/create_service_spec.rb @@ -10,7 +10,7 @@ let_it_be_with_refind(:incident) { create(:incident, project: project) } let(:current_user) { user_with_permissions } - let(:link) { 'https://gitlab.zoom.us' } + let(:link) { 'https://gitlab.zoom.us/j/12345?pwd=1234555' } let(:link_type) { :zoom } let(:link_text) { 'Incident zoom link' } let(:args) { { link: link, link_type: link_type, link_text: link_text } } @@ -97,15 +97,28 @@ where(:link_text) { [nil, '', ' '] } with_them do - it 'stores link as link text' do + it 'stores id as link text' do result = execute.payload[:issuable_resource_link] expect(execute).to be_success - expect(result.link_text).to eq(result.link) + expect(result.link_text).to eq('Zoom #12345') end end end + context 'when link type is general' do + let(:link_type) { :general } + let(:link) { 'https://gitlab.com/project/issue/1' } + let(:link_text) { '' } + + it 'stores link as link text for general type' do + result = execute.payload[:issuable_resource_link] + + expect(execute).to be_success + expect(result.link_text).to eq(link) + end + end + context 'when link type is absent' do let(:args) { { link: 'https://gitlab.slack.com/messages/IDHERE', link_text: link_text } } diff --git a/ee/spec/support/shared_examples/quick_actions/issue/link_quick_actions_shared_examples.rb b/ee/spec/support/shared_examples/quick_actions/issue/link_quick_actions_shared_examples.rb index bfcdfc1ee0e2442e01c99d6c429b713b8af3f44f..2d19414cbdbc43e0026d83a0385e9775a7698f1e 100644 --- a/ee/spec/support/shared_examples/quick_actions/issue/link_quick_actions_shared_examples.rb +++ b/ee/spec/support/shared_examples/quick_actions/issue/link_quick_actions_shared_examples.rb @@ -14,7 +14,7 @@ context 'with valid links' do where(:link, :link_text, :link_text_expected, :link_type) do [ - [slack_link, '', slack_link, 'slack'], + [slack_link, '', 'Slack #eeee', 'slack'], [slack_link, 'Slack link for incident', 'Slack link for incident', 'slack'], [zoom_link, ' Demo zoom link', 'Demo zoom link', 'zoom'], [general_link, 'General link, general with command', 'General link, general with command', 'general'] diff --git a/ee/spec/support/shared_examples/quick_actions/issue/zoom_quick_actions_shared_examples.rb b/ee/spec/support/shared_examples/quick_actions/issue/zoom_quick_actions_shared_examples.rb index 49a02d37334f448cea34c9d9299fb86685cf3832..cd0dc4461dc17ebb0e414703aa31a6320a8154f3 100644 --- a/ee/spec/support/shared_examples/quick_actions/issue/zoom_quick_actions_shared_examples.rb +++ b/ee/spec/support/shared_examples/quick_actions/issue/zoom_quick_actions_shared_examples.rb @@ -12,7 +12,7 @@ context 'with valid zoom_meetings' do where(:link_text, :link_text_expected) do [ - ['', zoom_link], + ['', 'Zoom #123456789'], ['Demo meeting', 'Demo meeting'], ['Fire, fire, everything on fire', 'Fire, fire, everything on fire'], [' Space, fire extinguished', 'Space, fire extinguished']