chore: add title in link issue

This commit is contained in:
Muhsin Keloth
2024-05-21 12:34:05 +05:30
parent cfb1ae0dd1
commit e8f5e35dc9
7 changed files with 27 additions and 24 deletions
@@ -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]
+2 -2
View File
@@ -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]
{
+3 -3
View File
@@ -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
+2 -3
View File
@@ -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
@@ -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)
@@ -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
+5 -4
View File
@@ -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