Commit 99ac6732 authored by Alex Kalderimis's avatar Alex Kalderimis

Merge branch 'andysoiron/cleanup-asana-specs' into 'master'

Clean up Asana integration specs

See merge request gitlab-org/gitlab!78222
parents 2cc0770c cd4a0802
...@@ -14,27 +14,29 @@ RSpec.describe Integrations::Asana do ...@@ -14,27 +14,29 @@ RSpec.describe Integrations::Asana do
end end
describe 'Execute' do describe 'Execute' do
let(:user) { create(:user) } let_it_be(:user) { create(:user) }
let(:project) { create(:project) } let_it_be(:project) { create(:project) }
let(:gid) { "123456789ABCD" } let(:gid) { "123456789ABCD" }
let(:asana_task) { double(::Asana::Resources::Task) }
let(:asana_integration) { described_class.new }
def create_data_for_commits(*messages) let(:data) do
{ {
object_kind: 'push', object_kind: 'push',
ref: 'master', ref: 'master',
user_name: user.name, user_name: user.name,
commits: messages.map do |m| commits: [
{ {
message: m, message: message,
url: 'https://gitlab.com/' url: 'https://gitlab.com/'
} }
end ]
} }
end end
before do before do
@asana = described_class.new allow(asana_integration).to receive_messages(
allow(@asana).to receive_messages(
project: project, project: project,
project_id: project.id, project_id: project.id,
api_key: 'verySecret', api_key: 'verySecret',
...@@ -42,67 +44,79 @@ RSpec.describe Integrations::Asana do ...@@ -42,67 +44,79 @@ RSpec.describe Integrations::Asana do
) )
end end
it 'calls Asana integration to create a story' do subject(:execute_integration) { asana_integration.execute(data) }
data = create_data_for_commits("Message from commit. related to ##{gid}")
expected_message = "#{data[:user_name]} pushed to branch #{data[:ref]} of #{project.full_name} ( #{data[:commits][0][:url]} ): #{data[:commits][0][:message]}"
d1 = double('Asana::Resources::Task') context 'when creating a story' do
expect(d1).to receive(:add_comment).with(text: expected_message) let(:message) { "Message from commit. related to ##{gid}" }
expect(::Asana::Resources::Task).to receive(:find_by_id).with(anything, gid).once.and_return(d1) let(:expected_message) do
"#{user.name} pushed to branch master of #{project.full_name} ( https://gitlab.com/ ): #{message}"
end
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)
@asana.execute(data) execute_integration
end end
end
context 'when creating a story and closing a task' do
let(:message) { 'fix #456789' }
it 'calls Asana integration to create a story and close a task' do it 'calls Asana integration to create a story and close a task' do
data = create_data_for_commits('fix #456789') expect(asana_task).to receive(:add_comment)
d1 = double('Asana::Resources::Task') expect(asana_task).to receive(:update).with(completed: true)
expect(d1).to receive(:add_comment) expect(::Asana::Resources::Task).to receive(:find_by_id).with(anything, '456789').once.and_return(asana_task)
expect(d1).to receive(:update).with(completed: true)
expect(::Asana::Resources::Task).to receive(:find_by_id).with(anything, '456789').once.and_return(d1)
@asana.execute(data) execute_integration
end
end end
it 'is able to close via url' do context 'when closing via url' do
data = create_data_for_commits('closes https://app.asana.com/19292/956299/42') let(:message) { 'closes https://app.asana.com/19292/956299/42' }
d1 = double('Asana::Resources::Task')
expect(d1).to receive(:add_comment)
expect(d1).to receive(:update).with(completed: true)
expect(::Asana::Resources::Task).to receive(:find_by_id).with(anything, '42').once.and_return(d1)
@asana.execute(data) 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
end end
it 'allows multiple matches per line' do context 'with multiple matches per line' do
message = <<-EOF let(:message) do
<<-EOF
minor bigfix, refactoring, fixed #123 and Closes #456 work on #789 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 ref https://app.asana.com/19292/956299/42 and closing https://app.asana.com/19292/956299/12
EOF EOF
data = create_data_for_commits(message) end
d1 = double('Asana::Resources::Task')
expect(d1).to receive(:add_comment) it 'allows multiple matches per line' do
expect(d1).to receive(:update).with(completed: true) expect(asana_task).to receive(:add_comment)
expect(::Asana::Resources::Task).to receive(:find_by_id).with(anything, '123').once.and_return(d1) 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)
d2 = double('Asana::Resources::Task')
expect(d2).to receive(:add_comment) asana_task_2 = double(Asana::Resources::Task)
expect(d2).to receive(:update).with(completed: true) expect(asana_task_2).to receive(:add_comment)
expect(::Asana::Resources::Task).to receive(:find_by_id).with(anything, '456').once.and_return(d2) 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)
d3 = double('Asana::Resources::Task')
expect(d3).to receive(:add_comment) asana_task_3 = double(Asana::Resources::Task)
expect(::Asana::Resources::Task).to receive(:find_by_id).with(anything, '789').once.and_return(d3) 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)
d4 = double('Asana::Resources::Task')
expect(d4).to receive(:add_comment) asana_task_4 = double(Asana::Resources::Task)
expect(::Asana::Resources::Task).to receive(:find_by_id).with(anything, '42').once.and_return(d4) 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)
d5 = double('Asana::Resources::Task')
expect(d5).to receive(:add_comment) asana_task_5 = double(Asana::Resources::Task)
expect(d5).to receive(:update).with(completed: true) expect(asana_task_5).to receive(:add_comment)
expect(::Asana::Resources::Task).to receive(:find_by_id).with(anything, '12').once.and_return(d5) 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)
@asana.execute(data)
execute_integration
end
end end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment