Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean McGivern <sean@mcgivern.me.uk>2017-07-08 00:16:00 +0300
committerSean McGivern <sean@mcgivern.me.uk>2017-07-08 00:16:00 +0300
commitb11b97a86acdedef2ed0bde6ff01e0c3eb04a0c9 (patch)
tree2c2cb6c094ae169f76bf44bd1db792c11fdde220
parent63f9259d7a66ae820fdbb2c9041873b71234ec5c (diff)
parent4069fcb200c78f5d585410813bcb285d38944aa0 (diff)
Merge branch 'slack_app1' into 'master'
Project alias for Slack application can be edited See merge request !2374
-rw-r--r--app/controllers/projects/settings/slacks_controller.rb32
-rw-r--r--app/models/slack_integration.rb3
-rw-r--r--app/views/projects/services/gitlab_slack_application/_slack_integration_form.html.haml14
-rw-r--r--app/views/projects/settings/slacks/edit.html.haml24
-rw-r--r--config/routes/project.rb2
-rw-r--r--spec/features/projects/settings/slack_application_spec.rb35
6 files changed, 100 insertions, 10 deletions
diff --git a/app/controllers/projects/settings/slacks_controller.rb b/app/controllers/projects/settings/slacks_controller.rb
index f97c8a7d182..c217e05ffa5 100644
--- a/app/controllers/projects/settings/slacks_controller.rb
+++ b/app/controllers/projects/settings/slacks_controller.rb
@@ -3,6 +3,10 @@ module Projects
class SlacksController < Projects::ApplicationController
before_action :handle_oauth_error, only: :slack_auth
before_action :authorize_admin_project!
+ before_action :slack_integration, only: [:edit, :update]
+ before_action :service, only: [:destroy, :edit, :update]
+
+ layout 'project_settings'
def slack_auth
result = Projects::SlackApplicationInstallService.new(project, current_user, params).execute
@@ -15,12 +19,24 @@ module Projects
end
def destroy
- service = project.gitlab_slack_application_service
- service.slack_integration.destroy
+ slack_integration.destroy
redirect_to_service_page
end
+ def edit
+ end
+
+ def update
+ if slack_integration.update(slack_integration_params)
+ flash[:notice] = 'The project alias was updated successfully'
+
+ redirect_to_service_page
+ else
+ render :edit
+ end
+ end
+
private
def redirect_to_service_page
@@ -36,6 +52,18 @@ module Projects
redirect_to_service_page
end
end
+
+ def slack_integration
+ @slack_integration ||= project.gitlab_slack_application_service.slack_integration
+ end
+
+ def service
+ @service = project.gitlab_slack_application_service
+ end
+
+ def slack_integration_params
+ params.require(:slack_integration).permit(:alias)
+ end
end
end
end
diff --git a/app/models/slack_integration.rb b/app/models/slack_integration.rb
index 1e13ed30266..7f98bc7cee0 100644
--- a/app/models/slack_integration.rb
+++ b/app/models/slack_integration.rb
@@ -4,7 +4,8 @@ class SlackIntegration < ActiveRecord::Base
validates :team_id, presence: true
validates :team_name, presence: true
validates :alias, presence: true,
- uniqueness: { scope: :team_id, message: 'This alias has already been taken' }
+ uniqueness: { scope: :team_id, message: 'This alias has already been taken' },
+ length: 2..80
validates :user_id, presence: true
validates :service, presence: true
diff --git a/app/views/projects/services/gitlab_slack_application/_slack_integration_form.html.haml b/app/views/projects/services/gitlab_slack_application/_slack_integration_form.html.haml
index 1eef4ee4615..1fb4ce992cc 100644
--- a/app/views/projects/services/gitlab_slack_application/_slack_integration_form.html.haml
+++ b/app/views/projects/services/gitlab_slack_application/_slack_integration_form.html.haml
@@ -5,8 +5,8 @@
%colgroup
%col
%col
- %col.hidden-xs
- %col{ width: "120" }
+ %col
+ %col
%thead
%tr
%th Team name
@@ -18,9 +18,11 @@
= slack_integration.team_name
%td
= slack_integration.alias
- %td.light
+ %td
= time_ago_in_words slack_integration.created_at
ago
- %td.light
- - project = @service.project
- = link_to 'Remove', namespace_project_settings_slack_path(project.namespace, project), method: :delete, class: 'btn btn-danger', data: { confirm: 'Are you sure?' }
+ %td
+ .controls
+ - project = @service.project
+ = link_to 'Edit', edit_project_settings_slack_path(project), class: 'btn btn-sm'
+ = link_to 'Remove', project_settings_slack_path(project), method: :delete, class: 'btn btn-danger btn-sm', data: { confirm: 'Are you sure?' }
diff --git a/app/views/projects/settings/slacks/edit.html.haml b/app/views/projects/settings/slacks/edit.html.haml
new file mode 100644
index 00000000000..09e7d61ef16
--- /dev/null
+++ b/app/views/projects/settings/slacks/edit.html.haml
@@ -0,0 +1,24 @@
+- page_title 'Edit Slack integration'
+= render "projects/settings/head"
+
+.row.prepend-top-default.append-bottom-default
+ .col-lg-3
+ %h4.prepend-top-0
+ Edit project alias
+
+ %p You can use this alias in your Slack commands
+ .col-lg-9
+ = form_errors(@slack_integration)
+ = form_for(@slack_integration, url: project_settings_slack_path(@project), method: :put, html: { class: 'gl-show-field-errors form-horizontal js-integration-settings-form'}) do |form|
+ .form-group
+ = form.label :alias, 'Enter your alias', class: 'control-label'
+ .col-sm-10
+ = form.text_field :alias, class: 'form-control', placeholder: @slack_integration.alias, required: true
+
+ .footer-block.row-content-block
+ %button.btn.btn-save{ type: 'submit' }
+ = icon('spinner spin', class: 'hidden js-btn-spinner')
+ %span.js-btn-label
+ Save changes
+ &nbsp;
+ = link_to 'Cancel', edit_project_service_path(@project, @service), class: 'btn btn-cancel'
diff --git a/config/routes/project.rb b/config/routes/project.rb
index 9de812ba32e..556e2c7f5b7 100644
--- a/config/routes/project.rb
+++ b/config/routes/project.rb
@@ -438,7 +438,7 @@ constraints(ProjectUrlConstrainer.new) do
resource :ci_cd, only: [:show], controller: 'ci_cd'
resource :integrations, only: [:show]
- resource :slack, only: [:destroy] do
+ resource :slack, only: [:destroy, :edit, :update] do
get :slack_auth
end
diff --git a/spec/features/projects/settings/slack_application_spec.rb b/spec/features/projects/settings/slack_application_spec.rb
new file mode 100644
index 00000000000..2666dd463ca
--- /dev/null
+++ b/spec/features/projects/settings/slack_application_spec.rb
@@ -0,0 +1,35 @@
+require 'spec_helper'
+
+feature 'Slack application', feature: true do
+ let(:project) { create(:empty_project) }
+ let(:user) { create(:user) }
+ let(:role) { :developer }
+ let(:service) { create(:gitlab_slack_application_service, project: project) }
+ let(:slack_application_form_path) { edit_project_service_path(project, service) }
+
+ background do
+ gitlab_sign_in(user)
+ project.team << [user, :master]
+
+ create(:slack_integration, service: service)
+
+ allow(Service).to receive(:show_gitlab_slack_application?).and_return(true)
+ end
+
+ scenario 'I can edit slack integration' do
+ visit slack_application_form_path
+
+ within '.js-integration-settings-form' do
+ click_link 'Edit'
+ end
+
+ fill_in 'slack_integration_alias', with: 'alias-edited'
+ click_button 'Save changes'
+
+ expect(page).to have_content('The project alias was updated successfully')
+
+ within '.js-integration-settings-form' do
+ expect(page).to have_content('alias-edited')
+ end
+ end
+end