2019-07-07 11:18:12 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2015-04-26 12:48:37 +05:30
|
|
|
require 'spec_helper'
|
|
|
|
|
2021-06-08 01:23:25 +05:30
|
|
|
RSpec.describe Integrations::Asana do
|
2015-04-26 12:48:37 +05:30
|
|
|
describe 'Validations' do
|
|
|
|
context 'active' do
|
|
|
|
before do
|
|
|
|
subject.active = true
|
|
|
|
end
|
|
|
|
|
|
|
|
it { is_expected.to validate_presence_of :api_key }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe 'Execute' do
|
2022-03-02 08:16:31 +05:30
|
|
|
let_it_be(:user) { create(:user) }
|
|
|
|
let_it_be(:project) { create(:project) }
|
|
|
|
|
2020-01-01 13:55:28 +05:30
|
|
|
let(:gid) { "123456789ABCD" }
|
2022-03-02 08:16:31 +05:30
|
|
|
let(:asana_task) { double(::Asana::Resources::Task) }
|
|
|
|
let(:asana_integration) { described_class.new }
|
2022-04-01 21:47:47 +05:30
|
|
|
let(:ref) { 'main' }
|
|
|
|
let(:restrict_to_branch) { nil }
|
2015-04-26 12:48:37 +05:30
|
|
|
|
2022-03-02 08:16:31 +05:30
|
|
|
let(:data) do
|
2016-01-14 18:37:52 +05:30
|
|
|
{
|
|
|
|
object_kind: 'push',
|
2022-04-01 21:47:47 +05:30
|
|
|
ref: ref,
|
2016-01-14 18:37:52 +05:30
|
|
|
user_name: user.name,
|
2022-03-02 08:16:31 +05:30
|
|
|
commits: [
|
2016-01-14 18:37:52 +05:30
|
|
|
{
|
2022-03-02 08:16:31 +05:30
|
|
|
message: message,
|
2017-09-10 17:25:29 +05:30
|
|
|
url: 'https://gitlab.com/'
|
2016-01-14 18:37:52 +05:30
|
|
|
}
|
2022-03-02 08:16:31 +05:30
|
|
|
]
|
2016-01-14 18:37:52 +05:30
|
|
|
}
|
|
|
|
end
|
|
|
|
|
2015-04-26 12:48:37 +05:30
|
|
|
before do
|
2022-03-02 08:16:31 +05:30
|
|
|
allow(asana_integration).to receive_messages(
|
2015-04-26 12:48:37 +05:30
|
|
|
project: project,
|
|
|
|
project_id: project.id,
|
|
|
|
api_key: 'verySecret',
|
2022-04-01 21:47:47 +05:30
|
|
|
restrict_to_branch: restrict_to_branch
|
2015-04-26 12:48:37 +05:30
|
|
|
)
|
|
|
|
end
|
|
|
|
|
2022-03-02 08:16:31 +05:30
|
|
|
subject(:execute_integration) { asana_integration.execute(data) }
|
|
|
|
|
2022-04-01 21:47:47 +05:30
|
|
|
context 'with restrict_to_branch' do
|
|
|
|
let(:restrict_to_branch) { 'feature-branch, main' }
|
|
|
|
let(:message) { 'fix #456789' }
|
|
|
|
|
|
|
|
context 'when ref is in scope of restriced branches' do
|
|
|
|
let(:ref) { 'main' }
|
|
|
|
|
|
|
|
it 'calls the Asana integration' do
|
|
|
|
expect(asana_task).to receive(:add_comment)
|
|
|
|
expect(asana_task).to receive(:update).with(completed: true)
|
|
|
|
expect(::Asana::Resources::Task).to receive(:find_by_id).with(anything, '456789').once.and_return(asana_task)
|
|
|
|
|
|
|
|
execute_integration
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when ref is not in scope of restricted branches' do
|
|
|
|
let(:ref) { 'mai' }
|
|
|
|
|
|
|
|
it 'does not call the Asana integration' do
|
|
|
|
expect(asana_task).not_to receive(:add_comment)
|
|
|
|
expect(::Asana::Resources::Task).not_to receive(:find_by_id)
|
|
|
|
|
|
|
|
execute_integration
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2022-03-02 08:16:31 +05:30
|
|
|
context 'when creating a story' do
|
|
|
|
let(:message) { "Message from commit. related to ##{gid}" }
|
|
|
|
let(:expected_message) do
|
2022-04-01 21:47:47 +05:30
|
|
|
"#{user.name} pushed to branch main of #{project.full_name} ( https://gitlab.com/ ): #{message}"
|
2022-03-02 08:16:31 +05:30
|
|
|
end
|
2015-04-26 12:48:37 +05:30
|
|
|
|
2022-03-02 08:16:31 +05:30
|
|
|
it 'calls Asana integration to create a story' do
|
|
|
|
expect(asana_task).to receive(:add_comment).with(text: expected_message)
|
|
|
|
expect(::Asana::Resources::Task).to receive(:find_by_id).with(anything, gid).once.and_return(asana_task)
|
2016-01-14 18:37:52 +05:30
|
|
|
|
2022-03-02 08:16:31 +05:30
|
|
|
execute_integration
|
|
|
|
end
|
2015-04-26 12:48:37 +05:30
|
|
|
end
|
|
|
|
|
2022-03-02 08:16:31 +05:30
|
|
|
context 'when creating a story and closing a task' do
|
|
|
|
let(:message) { 'fix #456789' }
|
2016-01-14 18:37:52 +05:30
|
|
|
|
2022-03-02 08:16:31 +05:30
|
|
|
it 'calls Asana integration to create a story and close a task' do
|
|
|
|
expect(asana_task).to receive(:add_comment)
|
|
|
|
expect(asana_task).to receive(:update).with(completed: true)
|
|
|
|
expect(::Asana::Resources::Task).to receive(:find_by_id).with(anything, '456789').once.and_return(asana_task)
|
|
|
|
|
|
|
|
execute_integration
|
|
|
|
end
|
2016-01-14 18:37:52 +05:30
|
|
|
end
|
|
|
|
|
2022-03-02 08:16:31 +05:30
|
|
|
context 'when closing via url' do
|
|
|
|
let(:message) { 'closes https://app.asana.com/19292/956299/42' }
|
2016-01-14 18:37:52 +05:30
|
|
|
|
2022-03-02 08:16:31 +05:30
|
|
|
it 'calls Asana integration to close via url' do
|
|
|
|
expect(asana_task).to receive(:add_comment)
|
|
|
|
expect(asana_task).to receive(:update).with(completed: true)
|
|
|
|
expect(::Asana::Resources::Task).to receive(:find_by_id).with(anything, '42').once.and_return(asana_task)
|
|
|
|
|
|
|
|
execute_integration
|
|
|
|
end
|
2016-01-14 18:37:52 +05:30
|
|
|
end
|
|
|
|
|
2022-03-02 08:16:31 +05:30
|
|
|
context 'with multiple matches per line' do
|
|
|
|
let(:message) do
|
|
|
|
<<-EOF
|
|
|
|
minor bigfix, refactoring, fixed #123 and Closes #456 work on #789
|
|
|
|
ref https://app.asana.com/19292/956299/42 and closing https://app.asana.com/19292/956299/12
|
|
|
|
EOF
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'allows multiple matches per line' do
|
|
|
|
expect(asana_task).to receive(:add_comment)
|
|
|
|
expect(asana_task).to receive(:update).with(completed: true)
|
|
|
|
expect(::Asana::Resources::Task).to receive(:find_by_id).with(anything, '123').once.and_return(asana_task)
|
|
|
|
|
|
|
|
asana_task_2 = double(Asana::Resources::Task)
|
|
|
|
expect(asana_task_2).to receive(:add_comment)
|
|
|
|
expect(asana_task_2).to receive(:update).with(completed: true)
|
|
|
|
expect(::Asana::Resources::Task).to receive(:find_by_id).with(anything, '456').once.and_return(asana_task_2)
|
|
|
|
|
|
|
|
asana_task_3 = double(Asana::Resources::Task)
|
|
|
|
expect(asana_task_3).to receive(:add_comment)
|
|
|
|
expect(::Asana::Resources::Task).to receive(:find_by_id).with(anything, '789').once.and_return(asana_task_3)
|
|
|
|
|
|
|
|
asana_task_4 = double(Asana::Resources::Task)
|
|
|
|
expect(asana_task_4).to receive(:add_comment)
|
|
|
|
expect(::Asana::Resources::Task).to receive(:find_by_id).with(anything, '42').once.and_return(asana_task_4)
|
|
|
|
|
|
|
|
asana_task_5 = double(Asana::Resources::Task)
|
|
|
|
expect(asana_task_5).to receive(:add_comment)
|
|
|
|
expect(asana_task_5).to receive(:update).with(completed: true)
|
|
|
|
expect(::Asana::Resources::Task).to receive(:find_by_id).with(anything, '12').once.and_return(asana_task_5)
|
|
|
|
|
|
|
|
execute_integration
|
|
|
|
end
|
2015-04-26 12:48:37 +05:30
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|