From e8f5e35dc9dceb185c8d4cd543a87c8912669420 Mon Sep 17 00:00:00 2001 From: Muhsin Keloth Date: Tue, 21 May 2024 12:34:05 +0530 Subject: [PATCH] chore: add title in link issue --- .../api/v1/accounts/integrations/linear_controller.rb | 9 +++++---- lib/integrations/linear/processor_service.rb | 4 ++-- lib/linear.rb | 6 +++--- lib/linear_mutations.rb | 5 ++--- .../v1/accounts/integrations/linear_controller_spec.rb | 9 +++++---- spec/lib/integrations/linear/processor_service_spec.rb | 9 +++++---- spec/lib/linear_spec.rb | 9 +++++---- 7 files changed, 27 insertions(+), 24 deletions(-) diff --git a/app/controllers/api/v1/accounts/integrations/linear_controller.rb b/app/controllers/api/v1/accounts/integrations/linear_controller.rb index ef9fcf235..1d09f3f7c 100644 --- a/app/controllers/api/v1/accounts/integrations/linear_controller.rb +++ b/app/controllers/api/v1/accounts/integrations/linear_controller.rb @@ -11,7 +11,7 @@ class Api::V1::Accounts::Integrations::LinearController < Api::V1::Accounts::Bas end def team_entities - team_id = params[:team_id] + team_id = permitted_params[:team_id] entites = linear_processor_service.team_entities(team_id) if entites.is_a?(Hash) && entites[:error] render json: { error: entites[:error] }, status: :unprocessable_entity @@ -30,8 +30,9 @@ class Api::V1::Accounts::Integrations::LinearController < Api::V1::Accounts::Bas end def link_issue - issue_id = params[:issue_id] - issue = linear_processor_service.link_issue(conversation_link, issue_id) + issue_id = permitted_params[:issue_id] + title = permitted_params[:title] + issue = linear_processor_service.link_issue(conversation_link, issue_id, title) if issue.is_a?(Hash) && issue[:error] render json: { error: issue[:error] }, status: :unprocessable_entity else @@ -40,7 +41,7 @@ class Api::V1::Accounts::Integrations::LinearController < Api::V1::Accounts::Bas end def unlink_issue - link_id = params[:link_id] + link_id = permitted_params[:link_id] issue = linear_processor_service.unlink_issue(link_id) if issue.is_a?(Hash) && issue[:error] diff --git a/lib/integrations/linear/processor_service.rb b/lib/integrations/linear/processor_service.rb index ab5c4f3c9..99aaf8697 100644 --- a/lib/integrations/linear/processor_service.rb +++ b/lib/integrations/linear/processor_service.rb @@ -30,8 +30,8 @@ class Integrations::Linear::ProcessorService } end - def link_issue(link, issue_id) - response = linear_client.link_issue(link, issue_id) + def link_issue(link, issue_id, title) + response = linear_client.link_issue(link, issue_id, title) return response if response[:error] { diff --git a/lib/linear.rb b/lib/linear.rb index 804ea9e5e..877dd01c2 100644 --- a/lib/linear.rb +++ b/lib/linear.rb @@ -66,12 +66,12 @@ class Linear process_response(response) end - def link_issue(link, issue_id) + def link_issue(link, issue_id, title) raise ArgumentError, 'Missing link' if link.blank? raise ArgumentError, 'Missing issue id' if issue_id.blank? payload = { - query: LinearMutations.issue_link(issue_id, link) + query: LinearMutations.issue_link(issue_id, link, title) } response = post(payload) process_response(response) @@ -116,7 +116,7 @@ class Linear end def process_response(response) - return response.parsed_response['data'].with_indifferent_access if response.success? + return response.parsed_response['data'].with_indifferent_access if response.success? && !response.parsed_response['data'].nil? { error: response.parsed_response, error_code: response.code } end diff --git a/lib/linear_mutations.rb b/lib/linear_mutations.rb index e34fdcd43..d5ec30fa0 100644 --- a/lib/linear_mutations.rb +++ b/lib/linear_mutations.rb @@ -17,7 +17,6 @@ module LinearMutations input.map { |key, value| "#{key}: #{graphql_value(value)}" }.join(', ') end - # Main mutation creation function def self.issue_create(input) <<~GRAPHQL mutation { @@ -32,10 +31,10 @@ module LinearMutations GRAPHQL end - def self.issue_link(issue_id, link) + def self.issue_link(issue_id, link, title) <<~GRAPHQL mutation { - attachmentLinkURL(url: "#{link}", issueId: "#{issue_id}") { + attachmentLinkURL(url: "#{link}", issueId: "#{issue_id}", title: "#{title}") { success attachment { id diff --git a/spec/controllers/api/v1/accounts/integrations/linear_controller_spec.rb b/spec/controllers/api/v1/accounts/integrations/linear_controller_spec.rb index e81042b03..24d1b39fa 100644 --- a/spec/controllers/api/v1/accounts/integrations/linear_controller_spec.rb +++ b/spec/controllers/api/v1/accounts/integrations/linear_controller_spec.rb @@ -127,15 +127,16 @@ RSpec.describe 'Linear Integration API', type: :request do let(:issue_id) { 'issue1' } let(:conversation) { create(:conversation, account: account) } let(:link) { "#{ENV.fetch('FRONTEND_URL', nil)}/app/accounts/#{account.id}/conversations/#{conversation.display_id}" } + let(:title) { 'Sample Issue' } context 'when it is an authenticated user' do context 'when the issue is linked successfully' do let(:linked_issue) { { 'id' => 'issue1', 'link' => 'https://linear.app/issue1' } } it 'returns the linked issue' do - allow(processor_service).to receive(:link_issue).with(link, issue_id).and_return(linked_issue) + allow(processor_service).to receive(:link_issue).with(link, issue_id, title).and_return(linked_issue) post "/api/v1/accounts/#{account.id}/integrations/linear/link_issue", - params: { conversation_id: conversation.display_id, issue_id: issue_id }, + params: { conversation_id: conversation.display_id, issue_id: issue_id, title: title }, headers: agent.create_new_auth_token, as: :json expect(response).to have_http_status(:ok) @@ -145,9 +146,9 @@ RSpec.describe 'Linear Integration API', type: :request do context 'when issue linking fails' do it 'returns error message' do - allow(processor_service).to receive(:link_issue).with(link, issue_id).and_return(error: 'error message') + allow(processor_service).to receive(:link_issue).with(link, issue_id, title).and_return(error: 'error message') post "/api/v1/accounts/#{account.id}/integrations/linear/link_issue", - params: { conversation_id: conversation.display_id, issue_id: issue_id }, + params: { conversation_id: conversation.display_id, issue_id: issue_id, title: title }, headers: agent.create_new_auth_token, as: :json expect(response).to have_http_status(:unprocessable_entity) diff --git a/spec/lib/integrations/linear/processor_service_spec.rb b/spec/lib/integrations/linear/processor_service_spec.rb index 34b427af2..c88d6b2a4 100644 --- a/spec/lib/integrations/linear/processor_service_spec.rb +++ b/spec/lib/integrations/linear/processor_service_spec.rb @@ -107,13 +107,14 @@ describe Integrations::Linear::ProcessorService do describe '#link_issue' do let(:link) { 'https://example.com' } let(:issue_id) { 'issue1' } + let(:title) { 'Title' } let(:link_issue_response) { { id: issue_id, link: link, 'attachmentLinkURL': { 'attachment': { 'id': 'attachment1' } } } } let(:link_response) { { id: issue_id, link: link, link_id: 'attachment1' } } context 'when Linear client returns valid data' do it 'returns parsed link data' do - allow(linear_client).to receive(:link_issue).with(link, issue_id).and_return(link_issue_response) - result = service.link_issue(link, issue_id) + allow(linear_client).to receive(:link_issue).with(link, issue_id, title).and_return(link_issue_response) + result = service.link_issue(link, issue_id, title) expect(result).to eq(link_response) end end @@ -122,8 +123,8 @@ describe Integrations::Linear::ProcessorService do let(:error_response) { { error: 'Some error message' } } it 'returns the error' do - allow(linear_client).to receive(:link_issue).with(link, issue_id).and_return(error_response) - result = service.link_issue(link, issue_id) + allow(linear_client).to receive(:link_issue).with(link, issue_id, title).and_return(error_response) + result = service.link_issue(link, issue_id, title) expect(result).to eq(error_response) end end diff --git a/spec/lib/linear_spec.rb b/spec/lib/linear_spec.rb index 3705d9f2f..dac3d531e 100644 --- a/spec/lib/linear_spec.rb +++ b/spec/lib/linear_spec.rb @@ -164,6 +164,7 @@ describe Linear do context 'when linking an issue' do let(:link) { 'https://example.com' } let(:issue_id) { 'issue1' } + let(:title) { 'Title' } context 'when the API response is success' do before do @@ -172,7 +173,7 @@ describe Linear do end it 'links an issue' do - response = linear_client.link_issue(link, issue_id) + response = linear_client.link_issue(link, issue_id, title) expect(response).to eq({ 'attachmentLinkURL' => { 'id' => 'attachment1' } }) end @@ -180,7 +181,7 @@ describe Linear do let(:link) { '' } it 'raises an exception' do - expect { linear_client.link_issue(link, issue_id) }.to raise_error(ArgumentError, 'Missing link') + expect { linear_client.link_issue(link, issue_id, title) }.to raise_error(ArgumentError, 'Missing link') end end @@ -188,7 +189,7 @@ describe Linear do let(:issue_id) { '' } it 'raises an exception' do - expect { linear_client.link_issue(link, issue_id) }.to raise_error(ArgumentError, 'Missing issue id') + expect { linear_client.link_issue(link, issue_id, title) }.to raise_error(ArgumentError, 'Missing issue id') end end end @@ -200,7 +201,7 @@ describe Linear do end it 'raises an exception' do - response = linear_client.link_issue(link, issue_id) + response = linear_client.link_issue(link, issue_id, title) expect(response).to eq({ :error => { 'errors' => [{ 'message' => 'Error linking issue' }] }, :error_code => 422 }) end end