diff options
Diffstat (limited to 'spec/models/integrations/asana_spec.rb')
-rw-r--r-- | spec/models/integrations/asana_spec.rb | 132 |
1 files changed, 73 insertions, 59 deletions
diff --git a/spec/models/integrations/asana_spec.rb b/spec/models/integrations/asana_spec.rb index f7e7eb1b0ae..b6602964182 100644 --- a/spec/models/integrations/asana_spec.rb +++ b/spec/models/integrations/asana_spec.rb @@ -14,27 +14,29 @@ RSpec.describe Integrations::Asana do end describe 'Execute' do - let(:user) { create(:user) } - let(:project) { create(:project) } + let_it_be(:user) { create(:user) } + let_it_be(:project) { create(:project) } + 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', ref: 'master', user_name: user.name, - commits: messages.map do |m| + commits: [ { - message: m, + message: message, url: 'https://gitlab.com/' } - end + ] } end before do - @asana = described_class.new - allow(@asana).to receive_messages( + allow(asana_integration).to receive_messages( project: project, project_id: project.id, api_key: 'verySecret', @@ -42,67 +44,79 @@ RSpec.describe Integrations::Asana do ) end - it 'calls Asana integration to create a story' do - 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]}" + subject(:execute_integration) { asana_integration.execute(data) } + + context 'when creating a story' do + let(:message) { "Message from commit. related to ##{gid}" } + let(:expected_message) do + "#{user.name} pushed to branch master of #{project.full_name} ( https://gitlab.com/ ): #{message}" + end - d1 = double('Asana::Resources::Task') - expect(d1).to receive(:add_comment).with(text: expected_message) - expect(::Asana::Resources::Task).to receive(:find_by_id).with(anything, gid).once.and_return(d1) + 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 - it 'calls Asana integration to create a story and close a task' do - data = create_data_for_commits('fix #456789') - 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, '456789').once.and_return(d1) + context 'when creating a story and closing a task' do + let(:message) { 'fix #456789' } - @asana.execute(data) + 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 end - it 'is able to close via url' do - data = create_data_for_commits('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) + context 'when closing via url' do + let(:message) { 'closes https://app.asana.com/19292/956299/42' } - @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 - it 'allows multiple matches per line' do - message = <<-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 - data = create_data_for_commits(message) - 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, '123').once.and_return(d1) - - d2 = double('Asana::Resources::Task') - expect(d2).to receive(:add_comment) - expect(d2).to receive(:update).with(completed: true) - expect(::Asana::Resources::Task).to receive(:find_by_id).with(anything, '456').once.and_return(d2) - - d3 = double('Asana::Resources::Task') - expect(d3).to receive(:add_comment) - expect(::Asana::Resources::Task).to receive(:find_by_id).with(anything, '789').once.and_return(d3) - - d4 = double('Asana::Resources::Task') - expect(d4).to receive(:add_comment) - expect(::Asana::Resources::Task).to receive(:find_by_id).with(anything, '42').once.and_return(d4) - - d5 = double('Asana::Resources::Task') - expect(d5).to receive(:add_comment) - expect(d5).to receive(:update).with(completed: true) - expect(::Asana::Resources::Task).to receive(:find_by_id).with(anything, '12').once.and_return(d5) - - @asana.execute(data) + 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 end end end |