diff options
author | Sean McGivern <sean@mcgivern.me.uk> | 2017-07-08 00:16:00 +0300 |
---|---|---|
committer | Sean McGivern <sean@mcgivern.me.uk> | 2017-07-08 00:16:00 +0300 |
commit | b11b97a86acdedef2ed0bde6ff01e0c3eb04a0c9 (patch) | |
tree | 2c2cb6c094ae169f76bf44bd1db792c11fdde220 | |
parent | 63f9259d7a66ae820fdbb2c9041873b71234ec5c (diff) | |
parent | 4069fcb200c78f5d585410813bcb285d38944aa0 (diff) |
Merge branch 'slack_app1' into 'master'
Project alias for Slack application can be edited
See merge request !2374
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 + + = 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 |