From 41aa605d4ed3d0d302c70ecd01052115f818f949 Mon Sep 17 00:00:00 2001
From: Kamil Trzcinski <ayufan@ayufan.eu>
Date: Mon, 21 Nov 2016 19:40:04 +0100
Subject: [PATCH] Improve deploy command message

---
 lib/gitlab/chat_commands/deploy.rb            | 15 ++++++++++++++-
 lib/mattermost/presenter.rb                   |  7 ++++++-
 spec/lib/gitlab/chat_commands/command_spec.rb |  2 +-
 spec/lib/gitlab/chat_commands/deploy_spec.rb  | 13 ++++++++-----
 4 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/lib/gitlab/chat_commands/deploy.rb b/lib/gitlab/chat_commands/deploy.rb
index c0b93cca68c..0eed1fce0dc 100644
--- a/lib/gitlab/chat_commands/deploy.rb
+++ b/lib/gitlab/chat_commands/deploy.rb
@@ -1,6 +1,8 @@
 module Gitlab
   module ChatCommands
     class Deploy < BaseCommand
+      include Gitlab::Routing.url_helpers
+
       def self.match(text)
         /\Adeploy\s+(?<from>.*)\s+to+\s+(?<to>.*)\z/.match(text)
       end
@@ -25,7 +27,7 @@ module Gitlab
         return unless actions.present?
 
         if actions.one?
-          actions.first.play(current_user)
+          play!(from, to, actions.first)
         else
           Result.new(:error, 'Too many actions defined')
         end
@@ -33,12 +35,23 @@ module Gitlab
 
       private
 
+      def play!(from, to, action)
+        new_action = action.play(current_user)
+
+        Result.new(:success, "Deployment from #{from} to #{to} started. Follow the progress: #{url(new_action)}.")
+      end
+
       def find_actions(from, to)
         environment = project.environments.find_by(name: from)
         return unless environment
 
         environment.actions_for(to).select(&:starts_environment?)
       end
+
+      def url(subject)
+        polymorphic_url(
+          [ subject.project.namespace.becomes(Namespace), subject.project, subject ])
+      end
     end
   end
 end
diff --git a/lib/mattermost/presenter.rb b/lib/mattermost/presenter.rb
index 6b12081575d..67eda983a74 100644
--- a/lib/mattermost/presenter.rb
+++ b/lib/mattermost/presenter.rb
@@ -49,7 +49,12 @@ module Mattermost
       private
 
       def show_result(result)
-        ephemeral_response(result.message)
+        case result.type
+        when :success
+          in_channel_response(result.message)
+        else
+          ephemeral_response(result.message)
+        end
       end
 
       def not_found
diff --git a/spec/lib/gitlab/chat_commands/command_spec.rb b/spec/lib/gitlab/chat_commands/command_spec.rb
index 924b4b7b101..bfc6818ac08 100644
--- a/spec/lib/gitlab/chat_commands/command_spec.rb
+++ b/spec/lib/gitlab/chat_commands/command_spec.rb
@@ -74,7 +74,7 @@ describe Gitlab::ChatCommands::Command, service: true do
         end
 
         it 'returns action' do
-          expect(subject[:text]).to include(manual.name)
+          expect(subject[:text]).to include('Deployment from staging to production started')
           expect(subject[:response_type]).to be(:in_channel)
         end
 
diff --git a/spec/lib/gitlab/chat_commands/deploy_spec.rb b/spec/lib/gitlab/chat_commands/deploy_spec.rb
index 26741367e63..bd8099c92da 100644
--- a/spec/lib/gitlab/chat_commands/deploy_spec.rb
+++ b/spec/lib/gitlab/chat_commands/deploy_spec.rb
@@ -36,8 +36,9 @@ describe Gitlab::ChatCommands::Deploy, service: true do
           create(:ci_build, :manual, project: project, pipeline: build.pipeline, name: 'first', environment: 'production')
         end
 
-        it 'returns action' do
-          expect(subject).to eq(manual1)
+        it 'returns success result' do
+          expect(subject.type).to eq(:success)
+          expect(subject.message).to include('Deployment from staging to production started')
         end
 
         context 'when duplicate action exists' do
@@ -46,7 +47,8 @@ describe Gitlab::ChatCommands::Deploy, service: true do
           end
 
           it 'returns error' do
-            expect(subject.message).to eq('Too many actions defined')
+            expect(subject.type).to eq(:error)
+            expect(subject.message).to include('Too many actions defined')
           end
         end
 
@@ -57,8 +59,9 @@ describe Gitlab::ChatCommands::Deploy, service: true do
                    name: 'teardown', environment: 'production')
           end
 
-          it 'returns error' do
-            expect(subject).to eq(manual1)
+          it 'returns success result' do
+            expect(subject.type).to eq(:success)
+            expect(subject.message).to include('Deployment from staging to production started')
           end
         end
       end
-- 
GitLab