From c51d72036698c6d53602c58f09d5ddd3ed8d225b Mon Sep 17 00:00:00 2001 From: Jose Ivan Vargas Date: Thu, 19 Jan 2017 10:48:53 -0600 Subject: Added repository controller and route for the settings namespace --- app/controllers/projects/settings/repository_controller.rb | 9 +++++++++ app/views/projects/settings/repository/show.html.haml | 2 ++ config/routes/project.rb | 1 + 3 files changed, 12 insertions(+) create mode 100644 app/controllers/projects/settings/repository_controller.rb create mode 100644 app/views/projects/settings/repository/show.html.haml diff --git a/app/controllers/projects/settings/repository_controller.rb b/app/controllers/projects/settings/repository_controller.rb new file mode 100644 index 00000000000..1c2eab682e0 --- /dev/null +++ b/app/controllers/projects/settings/repository_controller.rb @@ -0,0 +1,9 @@ +module Projects + module Settings + class RepositoryController < Projects::ApplicationController + def show + + end + end + end +end diff --git a/app/views/projects/settings/repository/show.html.haml b/app/views/projects/settings/repository/show.html.haml new file mode 100644 index 00000000000..428a6f4b2a0 --- /dev/null +++ b/app/views/projects/settings/repository/show.html.haml @@ -0,0 +1,2 @@ +%h1 + Hello World diff --git a/config/routes/project.rb b/config/routes/project.rb index 7dc7963ab88..c56c5e14384 100644 --- a/config/routes/project.rb +++ b/config/routes/project.rb @@ -325,6 +325,7 @@ constraints(ProjectUrlConstrainer.new) do resource :members, only: [:show] resource :ci_cd, only: [:show], controller: 'ci_cd' resource :integrations, only: [:show] + resource :repository, only: [:show], controller: :repository end # Since both wiki and repository routing contains wildcard characters -- cgit v1.2.1 From 0b74ae849d3f87564e789673ecf67aa54ec7cd8a Mon Sep 17 00:00:00 2001 From: Jose Ivan Vargas Date: Mon, 23 Jan 2017 18:28:40 -0600 Subject: Created the gear settings entry and created a way to initialize both sections with one controller Changed views to partials, created the repository view, created a repository_helper to further aid the creation of variables across different controllers --- app/controllers/projects/deploy_keys_controller.rb | 9 +++--- .../projects/protected_branches_controller.rb | 7 ++--- .../projects/settings/repository_controller.rb | 36 +++++++++++++++++++++- app/helpers/repository_helper.rb | 13 ++++++++ app/views/layouts/nav/_project_settings.html.haml | 10 ++---- app/views/projects/deploy_keys/_index.html.haml | 34 ++++++++++++++++++++ app/views/projects/deploy_keys/index.html.haml | 36 ---------------------- .../protected_branches/_branches_list.html.haml | 2 +- .../_create_protected_branch.html.haml | 2 +- .../projects/protected_branches/_index.html.haml | 22 +++++++++++++ .../projects/protected_branches/index.html.haml | 22 ------------- .../projects/settings/repository/show.html.haml | 6 ++-- 12 files changed, 120 insertions(+), 79 deletions(-) create mode 100644 app/helpers/repository_helper.rb create mode 100644 app/views/projects/deploy_keys/_index.html.haml delete mode 100644 app/views/projects/deploy_keys/index.html.haml create mode 100644 app/views/projects/protected_branches/_index.html.haml delete mode 100644 app/views/projects/protected_branches/index.html.haml diff --git a/app/controllers/projects/deploy_keys_controller.rb b/app/controllers/projects/deploy_keys_controller.rb index b094491e006..07410afd99a 100644 --- a/app/controllers/projects/deploy_keys_controller.rb +++ b/app/controllers/projects/deploy_keys_controller.rb @@ -7,12 +7,11 @@ class Projects::DeployKeysController < Projects::ApplicationController layout "project_settings" def index - @key = DeployKey.new - set_index_vars + redirect_to namespace_project_settings_repository_path(@project.namespace, @project) end def new - redirect_to namespace_project_deploy_keys_path(@project.namespace, @project) + redirect_to namespace_project_settings_repository_path(@project.namespace, @project) end def create @@ -20,7 +19,7 @@ class Projects::DeployKeysController < Projects::ApplicationController set_index_vars if @key.valid? && @project.deploy_keys << @key - redirect_to namespace_project_deploy_keys_path(@project.namespace, @project) + redirect_to namespace_project_settings_repository_path(@project.namespace, @project) else render "index" end @@ -29,7 +28,7 @@ class Projects::DeployKeysController < Projects::ApplicationController def enable Projects::EnableDeployKeyService.new(@project, current_user, params).execute - redirect_to namespace_project_deploy_keys_path(@project.namespace, @project) + redirect_to namespace_project_settings_repository_path(@project.namespace, @project) end def disable diff --git a/app/controllers/projects/protected_branches_controller.rb b/app/controllers/projects/protected_branches_controller.rb index 2f422d352ed..18d25f91c96 100644 --- a/app/controllers/projects/protected_branches_controller.rb +++ b/app/controllers/projects/protected_branches_controller.rb @@ -8,14 +8,13 @@ class Projects::ProtectedBranchesController < Projects::ApplicationController layout "project_settings" def index - @protected_branch = @project.protected_branches.new - load_gon_index + redirect_to namespace_project_settings_repository_path(@project.namespace, @project) end def create @protected_branch = ::ProtectedBranches::CreateService.new(@project, current_user, protected_branch_params).execute if @protected_branch.persisted? - redirect_to namespace_project_protected_branches_path(@project.namespace, @project) + redirect_to namespace_project_settings_repository_path(@project.namespace, @project) else load_protected_branches load_gon_index @@ -45,7 +44,7 @@ class Projects::ProtectedBranchesController < Projects::ApplicationController @protected_branch.destroy respond_to do |format| - format.html { redirect_to namespace_project_protected_branches_path } + format.html { redirect_to namespace_project_settings_repository_path } format.js { head :ok } end end diff --git a/app/controllers/projects/settings/repository_controller.rb b/app/controllers/projects/settings/repository_controller.rb index 1c2eab682e0..3b04eb04ae0 100644 --- a/app/controllers/projects/settings/repository_controller.rb +++ b/app/controllers/projects/settings/repository_controller.rb @@ -1,8 +1,42 @@ module Projects module Settings class RepositoryController < Projects::ApplicationController + include RepositoryHelper + + before_action :authorize_admin_project! + before_action :load_protected_branches, only: [:show] + def show - + define_deploy_keys_variables + define_protected_branches_controller + end + + def load_protected_branches + @protected_branches = @project.protected_branches.order(:name).page(params[:page]) + end + + def set_index_vars + @enabled_keys ||= @project.deploy_keys + + @available_keys ||= current_user.accessible_deploy_keys - @enabled_keys + @available_project_keys ||= current_user.project_deploy_keys - @enabled_keys + @available_public_keys ||= DeployKey.are_public - @enabled_keys + + # Public keys that are already used by another accessible project are already + # in @available_project_keys. + @available_public_keys -= @available_project_keys + end + + private + + def define_deploy_keys_variables + @key = DeployKey.new + set_index_vars + end + + def define_protected_branches_controller + @protected_branch = @project.protected_branches.new + load_gon_index(@project) end end end diff --git a/app/helpers/repository_helper.rb b/app/helpers/repository_helper.rb new file mode 100644 index 00000000000..fb9d9b26950 --- /dev/null +++ b/app/helpers/repository_helper.rb @@ -0,0 +1,13 @@ +module RepositoryHelper + def access_levels_options + { + push_access_levels: ProtectedBranch::PushAccessLevel.human_access_levels.map { |id, text| { id: id, text: text, before_divider: true } }, + merge_access_levels: ProtectedBranch::MergeAccessLevel.human_access_levels.map { |id, text| { id: id, text: text, before_divider: true } } + } + end + + def load_gon_index(project) + params = { open_branches: project.open_branches.map { |br| { text: br.name, id: br.name, title: br.name } } } + gon.push(params.merge(access_levels_options)) + end +end diff --git a/app/views/layouts/nav/_project_settings.html.haml b/app/views/layouts/nav/_project_settings.html.haml index 665725f6862..6f2777d1be6 100644 --- a/app/views/layouts/nav/_project_settings.html.haml +++ b/app/views/layouts/nav/_project_settings.html.haml @@ -4,18 +4,14 @@ %span Members - if can_edit - = nav_link(controller: :deploy_keys) do - = link_to namespace_project_deploy_keys_path(@project.namespace, @project), title: 'Deploy Keys' do + = nav_link(controller: :repository) do + = link_to namespace_project_settings_repository_path(@project.namespace, @project), title: 'Repository' do %span - Deploy Keys + Repository = nav_link(controller: :integrations) do = link_to namespace_project_settings_integrations_path(@project.namespace, @project), title: 'Integrations' do %span Integrations - = nav_link(controller: :protected_branches) do - = link_to namespace_project_protected_branches_path(@project.namespace, @project), title: 'Protected Branches' do - %span - Protected Branches - if @project.feature_available?(:builds, current_user) = nav_link(controller: :ci_cd) do diff --git a/app/views/projects/deploy_keys/_index.html.haml b/app/views/projects/deploy_keys/_index.html.haml new file mode 100644 index 00000000000..57de5be89cc --- /dev/null +++ b/app/views/projects/deploy_keys/_index.html.haml @@ -0,0 +1,34 @@ +.row.prepend-top-default + .col-lg-3.profile-settings-sidebar + %h4.prepend-top-0 + Deploy Keys + %p + Deploy keys allow read-only access to your repository. Deploy keys can be used for CI, staging or production servers. You can create a deploy key or add an existing one. + .col-lg-9 + %h5.prepend-top-0 + Create a new deploy key for this project + = render "projects/deploy_keys/form" + .col-lg-9.col-lg-offset-3 + %hr + .col-lg-9.col-lg-offset-3.append-bottom-default.deploy-keys + %h5.prepend-top-0 + Enabled deploy keys for this project (#{@enabled_keys.size}) + - if @enabled_keys.any? + %ul.well-list + = render @enabled_keys + - else + .settings-message.text-center + No deploy keys found. Create one with the form above or add existing one below. + %h5.prepend-top-default + Deploy keys from projects you have access to (#{@available_project_keys.size}) + - if @available_project_keys.any? + %ul.well-list + = render @available_project_keys + - else + .settings-message.text-center + No deploy keys from your projects could be found. Create one with the form above or add existing one below. + - if @available_public_keys.any? + %h5.prepend-top-default + Public deploy keys available to any project (#{@available_public_keys.size}) + %ul.well-list + = render @available_public_keys diff --git a/app/views/projects/deploy_keys/index.html.haml b/app/views/projects/deploy_keys/index.html.haml deleted file mode 100644 index 04fbb37d93f..00000000000 --- a/app/views/projects/deploy_keys/index.html.haml +++ /dev/null @@ -1,36 +0,0 @@ -- page_title "Deploy Keys" - -.row.prepend-top-default - .col-lg-3.profile-settings-sidebar - %h4.prepend-top-0 - = page_title - %p - Deploy keys allow read-only access to your repository. Deploy keys can be used for CI, staging or production servers. You can create a deploy key or add an existing one. - .col-lg-9 - %h5.prepend-top-0 - Create a new deploy key for this project - = render "form" - .col-lg-9.col-lg-offset-3 - %hr - .col-lg-9.col-lg-offset-3.append-bottom-default.deploy-keys - %h5.prepend-top-0 - Enabled deploy keys for this project (#{@enabled_keys.size}) - - if @enabled_keys.any? - %ul.well-list - = render @enabled_keys - - else - .settings-message.text-center - No deploy keys found. Create one with the form above or add existing one below. - %h5.prepend-top-default - Deploy keys from projects you have access to (#{@available_project_keys.size}) - - if @available_project_keys.any? - %ul.well-list - = render @available_project_keys - - else - .settings-message.text-center - No deploy keys from your projects could be found. Create one with the form above or add existing one below. - - if @available_public_keys.any? - %h5.prepend-top-default - Public deploy keys available to any project (#{@available_public_keys.size}) - %ul.well-list - = render @available_public_keys diff --git a/app/views/projects/protected_branches/_branches_list.html.haml b/app/views/projects/protected_branches/_branches_list.html.haml index 04b19a8c5a7..cf0db943865 100644 --- a/app/views/projects/protected_branches/_branches_list.html.haml +++ b/app/views/projects/protected_branches/_branches_list.html.haml @@ -23,6 +23,6 @@ - if can_admin_project %th %tbody - = render partial: @protected_branches, locals: { can_admin_project: can_admin_project } + = render partial: 'projects/protected_branches/protected_branch', collection: @protected_branches, locals: { can_admin_project: can_admin_project} = paginate @protected_branches, theme: 'gitlab' diff --git a/app/views/projects/protected_branches/_create_protected_branch.html.haml b/app/views/projects/protected_branches/_create_protected_branch.html.haml index e95a3b1b4c3..b8e885b4d9a 100644 --- a/app/views/projects/protected_branches/_create_protected_branch.html.haml +++ b/app/views/projects/protected_branches/_create_protected_branch.html.haml @@ -10,7 +10,7 @@ = f.label :name, class: 'col-md-2 text-right' do Branch: .col-md-10 - = render partial: "dropdown", locals: { f: f } + = render partial: "projects/protected_branches/dropdown", locals: { f: f } .help-block = link_to 'Wildcards', help_page_path('user/project/protected_branches', anchor: 'wildcard-protected-branches') such as diff --git a/app/views/projects/protected_branches/_index.html.haml b/app/views/projects/protected_branches/_index.html.haml new file mode 100644 index 00000000000..010ba5a24a7 --- /dev/null +++ b/app/views/projects/protected_branches/_index.html.haml @@ -0,0 +1,22 @@ +- page_title "Protected branches" +- content_for :page_specific_javascripts do + = page_specific_javascript_bundle_tag('protected_branches') + +.row.prepend-top-default.append-bottom-default + .col-lg-3 + %h4.prepend-top-0 + = page_title + %p Keep stable branches secure and force developers to use merge requests. + %p.prepend-top-20 + By default, protected branches are designed to: + %ul + %li prevent their creation, if not already created, from everybody except Masters + %li prevent pushes from everybody except Masters + %li prevent anyone from force pushing to the branch + %li prevent anyone from deleting the branch + %p.append-bottom-0 Read more about #{link_to "protected branches", help_page_path("user/project/protected_branches"), class: "underlined-link"} and #{link_to "project permissions", help_page_path("user/permissions"), class: "underlined-link"}. + .col-lg-9 + - if can? current_user, :admin_project, @project + = render 'projects/protected_branches/create_protected_branch' + + = render "projects/protected_branches/branches_list" diff --git a/app/views/projects/protected_branches/index.html.haml b/app/views/projects/protected_branches/index.html.haml deleted file mode 100644 index b3b419bd92d..00000000000 --- a/app/views/projects/protected_branches/index.html.haml +++ /dev/null @@ -1,22 +0,0 @@ -- page_title "Protected branches" -- content_for :page_specific_javascripts do - = page_specific_javascript_bundle_tag('protected_branches') - -.row.prepend-top-default.append-bottom-default - .col-lg-3 - %h4.prepend-top-0 - = page_title - %p Keep stable branches secure and force developers to use merge requests. - %p.prepend-top-20 - By default, protected branches are designed to: - %ul - %li prevent their creation, if not already created, from everybody except Masters - %li prevent pushes from everybody except Masters - %li prevent anyone from force pushing to the branch - %li prevent anyone from deleting the branch - %p.append-bottom-0 Read more about #{link_to "protected branches", help_page_path("user/project/protected_branches"), class: "underlined-link"} and #{link_to "project permissions", help_page_path("user/permissions"), class: "underlined-link"}. - .col-lg-9 - - if can? current_user, :admin_project, @project - = render 'create_protected_branch' - - = render "branches_list" diff --git a/app/views/projects/settings/repository/show.html.haml b/app/views/projects/settings/repository/show.html.haml index 428a6f4b2a0..88291653d84 100644 --- a/app/views/projects/settings/repository/show.html.haml +++ b/app/views/projects/settings/repository/show.html.haml @@ -1,2 +1,4 @@ -%h1 - Hello World +- page_title "Repository" + += render "projects/deploy_keys/index" += render "projects/protected_branches/index" -- cgit v1.2.1 From 2ee86441158076344a07f2715a148a5bdbe161b0 Mon Sep 17 00:00:00 2001 From: Jose Ivan Vargas Date: Mon, 30 Jan 2017 13:21:02 -0600 Subject: Fixed tests, changed dispatcher routing to the 'repository:show' Also modified the render calls to the deploy_keys and protected_branches partials --- app/assets/javascripts/dispatcher.js | 2 +- app/controllers/projects/deploy_keys_controller.rb | 22 ++++------------------ .../projects/protected_branches_controller.rb | 11 ++++------- app/views/projects/deploy_keys/_index.html.haml | 9 ++++++--- .../protected_branches/_protected_branch.html.haml | 2 +- features/project/active_tab.feature | 6 +++--- features/steps/project/active_tab.rb | 10 ++++++---- features/steps/project/deploy_keys.rb | 2 +- 8 files changed, 26 insertions(+), 38 deletions(-) diff --git a/app/assets/javascripts/dispatcher.js b/app/assets/javascripts/dispatcher.js index ef5785b5532..ac6859b43a0 100644 --- a/app/assets/javascripts/dispatcher.js +++ b/app/assets/javascripts/dispatcher.js @@ -280,7 +280,7 @@ const UserCallout = require('./user_callout'); case 'search:show': new Search(); break; - case 'projects:protected_branches:index': + case 'projects:repository:show': new gl.ProtectedBranchCreate(); new gl.ProtectedBranchEditList(); break; diff --git a/app/controllers/projects/deploy_keys_controller.rb b/app/controllers/projects/deploy_keys_controller.rb index 07410afd99a..0d60e782dfb 100644 --- a/app/controllers/projects/deploy_keys_controller.rb +++ b/app/controllers/projects/deploy_keys_controller.rb @@ -16,13 +16,11 @@ class Projects::DeployKeysController < Projects::ApplicationController def create @key = DeployKey.new(deploy_key_params.merge(user: current_user)) - set_index_vars - if @key.valid? && @project.deploy_keys << @key - redirect_to namespace_project_settings_repository_path(@project.namespace, @project) - else - render "index" + unless @key.valid? && @project.deploy_keys << @key + flash[:alert] = @key.errors.full_messages.join(',').html_safe end + redirect_to namespace_project_settings_repository_path(@project.namespace, @project) end def enable @@ -34,23 +32,11 @@ class Projects::DeployKeysController < Projects::ApplicationController def disable @project.deploy_keys_projects.find_by(deploy_key_id: params[:id]).destroy - redirect_back_or_default(default: { action: 'index' }) + redirect_to namespace_project_settings_repository_path(@project.namespace, @project) end protected - def set_index_vars - @enabled_keys ||= @project.deploy_keys - - @available_keys ||= current_user.accessible_deploy_keys - @enabled_keys - @available_project_keys ||= current_user.project_deploy_keys - @enabled_keys - @available_public_keys ||= DeployKey.are_public - @enabled_keys - - # Public keys that are already used by another accessible project are already - # in @available_project_keys. - @available_public_keys -= @available_project_keys - end - def deploy_key_params params.require(:deploy_key).permit(:key, :title, :can_push) end diff --git a/app/controllers/projects/protected_branches_controller.rb b/app/controllers/projects/protected_branches_controller.rb index 18d25f91c96..ac886f0739a 100644 --- a/app/controllers/projects/protected_branches_controller.rb +++ b/app/controllers/projects/protected_branches_controller.rb @@ -1,9 +1,9 @@ class Projects::ProtectedBranchesController < Projects::ApplicationController + include RepositoryHelper # Authorize before_action :require_non_empty_project before_action :authorize_admin_project! before_action :load_protected_branch, only: [:show, :update, :destroy] - before_action :load_protected_branches, only: [:index] layout "project_settings" @@ -13,13 +13,10 @@ class Projects::ProtectedBranchesController < Projects::ApplicationController def create @protected_branch = ::ProtectedBranches::CreateService.new(@project, current_user, protected_branch_params).execute - if @protected_branch.persisted? - redirect_to namespace_project_settings_repository_path(@project.namespace, @project) - else - load_protected_branches - load_gon_index - render :index + unless @protected_branch.persisted? + flash[:alert] = @protected_branches.errors.full_messages.join(',').html_safe end + redirect_to namespace_project_settings_repository_path(@project.namespace, @project) end def show diff --git a/app/views/projects/deploy_keys/_index.html.haml b/app/views/projects/deploy_keys/_index.html.haml index 57de5be89cc..c41fb892862 100644 --- a/app/views/projects/deploy_keys/_index.html.haml +++ b/app/views/projects/deploy_keys/_index.html.haml @@ -15,7 +15,8 @@ Enabled deploy keys for this project (#{@enabled_keys.size}) - if @enabled_keys.any? %ul.well-list - = render @enabled_keys + - @enabled_keys.each do |enabled_key| + = render partial: 'projects/deploy_keys/deploy_key', locals: {deploy_key: enabled_key} - else .settings-message.text-center No deploy keys found. Create one with the form above or add existing one below. @@ -23,7 +24,8 @@ Deploy keys from projects you have access to (#{@available_project_keys.size}) - if @available_project_keys.any? %ul.well-list - = render @available_project_keys + - @available_project_keys.each do |available_key| + = render partial: 'projects/deploy_keys/deploy_key', locals: {deploy_key: available_key} - else .settings-message.text-center No deploy keys from your projects could be found. Create one with the form above or add existing one below. @@ -31,4 +33,5 @@ %h5.prepend-top-default Public deploy keys available to any project (#{@available_public_keys.size}) %ul.well-list - = render @available_public_keys + - @available_public_keys.each do |available_key| + = render partial: 'projects/deploy_keys/deploy_key', locals: {deploy_key: available_key} diff --git a/app/views/projects/protected_branches/_protected_branch.html.haml b/app/views/projects/protected_branches/_protected_branch.html.haml index 0193800dedf..b2a6b8469a3 100644 --- a/app/views/projects/protected_branches/_protected_branch.html.haml +++ b/app/views/projects/protected_branches/_protected_branch.html.haml @@ -14,7 +14,7 @@ - else (branch was removed from repository) - = render partial: 'update_protected_branch', locals: { protected_branch: protected_branch } + = render partial: 'projects/protected_branches/update_protected_branch', locals: { protected_branch: protected_branch } - if can_admin_project %td diff --git a/features/project/active_tab.feature b/features/project/active_tab.feature index 1dd2bdd9b36..4bdaa6266c3 100644 --- a/features/project/active_tab.feature +++ b/features/project/active_tab.feature @@ -46,10 +46,10 @@ Feature: Project Active Tab And no other sub navs should be active And the active main tab should be Settings - Scenario: On Project Settings/Deploy Keys + Scenario: On Project Settings/Repository Given I visit my project's settings page - And I click the "Deploy Keys" tab - Then the active sub nav should be Deploy Keys + And I click the "Repository" tab + Then the active sub nav should be Repository And no other sub navs should be active And the active main tab should be Settings diff --git a/features/steps/project/active_tab.rb b/features/steps/project/active_tab.rb index e842d7bec2b..218d5c6164b 100644 --- a/features/steps/project/active_tab.rb +++ b/features/steps/project/active_tab.rb @@ -31,8 +31,10 @@ class Spinach::Features::ProjectActiveTab < Spinach::FeatureSteps click_link('Integrations') end - step 'I click the "Deploy Keys" tab' do - click_link('Deploy Keys') + step 'I click the "Repository" tab' do + page.within '.layout-nav .controls' do + click_link('Repository') + end end step 'I click the "Pages" tab' do @@ -47,8 +49,8 @@ class Spinach::Features::ProjectActiveTab < Spinach::FeatureSteps ensure_active_sub_nav('Integrations') end - step 'the active sub nav should be Deploy Keys' do - ensure_active_sub_nav('Deploy Keys') + step 'the active sub nav should be Repository' do + ensure_active_sub_nav('Repository') end step 'the active sub nav should be Pages' do diff --git a/features/steps/project/deploy_keys.rb b/features/steps/project/deploy_keys.rb index edf78f62f9a..580a19494c2 100644 --- a/features/steps/project/deploy_keys.rb +++ b/features/steps/project/deploy_keys.rb @@ -36,7 +36,7 @@ class Spinach::Features::ProjectDeployKeys < Spinach::FeatureSteps end step 'I should be on deploy keys page' do - expect(current_path).to eq namespace_project_deploy_keys_path(@project.namespace, @project) + expect(current_path).to eq namespace_project_settings_repository_path(@project.namespace, @project) end step 'I should see newly created deploy key' do -- cgit v1.2.1 From 5967c17e80ec0e17a2bdc615e18d1cb0a668f68f Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Tue, 31 Jan 2017 15:12:02 +0100 Subject: Introduced the deploy keys presenter --- .../projects/settings/repository_controller.rb | 21 +------ .../projects/settings/deploy_keys_presenter.rb | 65 ++++++++++++++++++++++ .../projects/deploy_keys/_deploy_key.html.haml | 2 +- app/views/projects/deploy_keys/_form.html.haml | 4 +- app/views/projects/deploy_keys/_index.html.haml | 20 +++---- .../projects/settings/repository/show.html.haml | 2 +- .../settings/deploy_keys_presenter_spec.rb | 28 ++++++++++ 7 files changed, 110 insertions(+), 32 deletions(-) create mode 100644 app/presenters/projects/settings/deploy_keys_presenter.rb create mode 100644 spec/presenters/projects/settings/deploy_keys_presenter_spec.rb diff --git a/app/controllers/projects/settings/repository_controller.rb b/app/controllers/projects/settings/repository_controller.rb index 3b04eb04ae0..99a3756531f 100644 --- a/app/controllers/projects/settings/repository_controller.rb +++ b/app/controllers/projects/settings/repository_controller.rb @@ -7,7 +7,9 @@ module Projects before_action :load_protected_branches, only: [:show] def show - define_deploy_keys_variables + @deploy_keys = DeployKeysPresenter + .new(@project, current_user: @current_user) + define_protected_branches_controller end @@ -15,25 +17,8 @@ module Projects @protected_branches = @project.protected_branches.order(:name).page(params[:page]) end - def set_index_vars - @enabled_keys ||= @project.deploy_keys - - @available_keys ||= current_user.accessible_deploy_keys - @enabled_keys - @available_project_keys ||= current_user.project_deploy_keys - @enabled_keys - @available_public_keys ||= DeployKey.are_public - @enabled_keys - - # Public keys that are already used by another accessible project are already - # in @available_project_keys. - @available_public_keys -= @available_project_keys - end - private - def define_deploy_keys_variables - @key = DeployKey.new - set_index_vars - end - def define_protected_branches_controller @protected_branch = @project.protected_branches.new load_gon_index(@project) diff --git a/app/presenters/projects/settings/deploy_keys_presenter.rb b/app/presenters/projects/settings/deploy_keys_presenter.rb new file mode 100644 index 00000000000..703d93708f6 --- /dev/null +++ b/app/presenters/projects/settings/deploy_keys_presenter.rb @@ -0,0 +1,65 @@ +module Projects + module Settings + class DeployKeysPresenter < Gitlab::View::Presenter::Simple + presents :project + + def new_key + @key ||= DeployKey.new + end + + def enabled_keys + @enabled_keys ||= project.deploy_keys + end + + def any_keys_enabled? + enabled_keys.any? + end + + def enabled_keys_size + enabled_keys.size + end + + def available_keys + @available_keys ||= current_user.accessible_deploy_keys - enabled_keys + end + + def available_project_keys + @available_project_keys ||= current_user.project_deploy_keys - enabled_keys + end + + def any_available_project_keys_enabled? + available_project_keys.any? + end + + def available_project_keys_size + available_project_keys.size + end + + def available_public_keys + return @available_public_keys if defined?(@available_public_keys) + + @available_public_keys ||= DeployKey.are_public - enabled_keys + + # Public keys that are already used by another accessible project are already + # in @available_project_keys. + @available_public_keys -= available_project_keys + end + + def any_available_public_keys_enabled? + available_public_keys.any? + end + + def available_public_keys_size + available_public_keys.size + end + + def to_partial_path + 'projects/deploy_keys/index' + end + + def form_partial_path + 'projects/deploy_keys/form' + end + end + end +end diff --git a/app/views/projects/deploy_keys/_deploy_key.html.haml b/app/views/projects/deploy_keys/_deploy_key.html.haml index d1e3cb14022..337f8c38a93 100644 --- a/app/views/projects/deploy_keys/_deploy_key.html.haml +++ b/app/views/projects/deploy_keys/_deploy_key.html.haml @@ -18,7 +18,7 @@ %span.key-created-at created #{time_ago_with_tooltip(deploy_key.created_at)} .visible-xs-block.visible-sm-block - - if @available_keys.include?(deploy_key) + - if @deploy_keys.available_keys.include?(deploy_key) = link_to enable_namespace_project_deploy_key_path(@project.namespace, @project, deploy_key), class: "btn btn-sm prepend-left-10", method: :put do Enable - else diff --git a/app/views/projects/deploy_keys/_form.html.haml b/app/views/projects/deploy_keys/_form.html.haml index c91bb9c255a..1421da72418 100644 --- a/app/views/projects/deploy_keys/_form.html.haml +++ b/app/views/projects/deploy_keys/_form.html.haml @@ -1,5 +1,5 @@ -= form_for [@project.namespace.becomes(Namespace), @project, @key], url: namespace_project_deploy_keys_path, html: { class: "js-requires-input" } do |f| - = form_errors(@key) += form_for [@project.namespace.becomes(Namespace), @project, @deploy_keys.new_key], url: namespace_project_deploy_keys_path, html: { class: "js-requires-input" } do |f| + = form_errors(@deploy_keys.new_key) .form-group = f.label :title, class: "label-light" = f.text_field :title, class: 'form-control', autofocus: true, required: true diff --git a/app/views/projects/deploy_keys/_index.html.haml b/app/views/projects/deploy_keys/_index.html.haml index c41fb892862..91acad83bf3 100644 --- a/app/views/projects/deploy_keys/_index.html.haml +++ b/app/views/projects/deploy_keys/_index.html.haml @@ -7,31 +7,31 @@ .col-lg-9 %h5.prepend-top-0 Create a new deploy key for this project - = render "projects/deploy_keys/form" + = render @deploy_keys.form_partial_path .col-lg-9.col-lg-offset-3 %hr .col-lg-9.col-lg-offset-3.append-bottom-default.deploy-keys %h5.prepend-top-0 - Enabled deploy keys for this project (#{@enabled_keys.size}) - - if @enabled_keys.any? + Enabled deploy keys for this project (#{@deploy_keys.enabled_keys_size}) + - if @deploy_keys.any_keys_enabled? %ul.well-list - - @enabled_keys.each do |enabled_key| + - @deploy_keys.enabled_keys.each do |enabled_key| = render partial: 'projects/deploy_keys/deploy_key', locals: {deploy_key: enabled_key} - else .settings-message.text-center No deploy keys found. Create one with the form above or add existing one below. %h5.prepend-top-default - Deploy keys from projects you have access to (#{@available_project_keys.size}) - - if @available_project_keys.any? + Deploy keys from projects you have access to (#{@deploy_keys.available_project_keys_size}) + - if @deploy_keys.any_available_project_keys_enabled? %ul.well-list - - @available_project_keys.each do |available_key| + - @deploy_keys.available_project_keys.each do |available_key| = render partial: 'projects/deploy_keys/deploy_key', locals: {deploy_key: available_key} - else .settings-message.text-center No deploy keys from your projects could be found. Create one with the form above or add existing one below. - - if @available_public_keys.any? + - if @deploy_keys.any_available_public_keys_enabled? %h5.prepend-top-default - Public deploy keys available to any project (#{@available_public_keys.size}) + Public deploy keys available to any project (#{@deploy_keys.available_public_keys_size}) %ul.well-list - - @available_public_keys.each do |available_key| + - @deploy_keys.available_public_keys.each do |available_key| = render partial: 'projects/deploy_keys/deploy_key', locals: {deploy_key: available_key} diff --git a/app/views/projects/settings/repository/show.html.haml b/app/views/projects/settings/repository/show.html.haml index 88291653d84..95d821f6135 100644 --- a/app/views/projects/settings/repository/show.html.haml +++ b/app/views/projects/settings/repository/show.html.haml @@ -1,4 +1,4 @@ - page_title "Repository" -= render "projects/deploy_keys/index" += render @deploy_keys = render "projects/protected_branches/index" diff --git a/spec/presenters/projects/settings/deploy_keys_presenter_spec.rb b/spec/presenters/projects/settings/deploy_keys_presenter_spec.rb new file mode 100644 index 00000000000..26ed9ac93a0 --- /dev/null +++ b/spec/presenters/projects/settings/deploy_keys_presenter_spec.rb @@ -0,0 +1,28 @@ +require 'spec_helper' + +describe Projects::Settings::DeployKeysPresenter do + let(:project) { create(:empty_project) } + let(:user) { create(:user) } + + subject(:presenter) do + described_class.new(project, current_user: user) + end + + it 'inherits from Gitlab::View::Presenter::Simple' do + expect(described_class.superclass).to eq(Gitlab::View::Presenter::Simple) + end + + describe '#enabled_keys' do + let(:deploy_key) do + create(:deploy_keys_project, project: project).deploy_key + end + + it 'returns project keys' do + expect(presenter.enabled_keys).to eq [deploy_key] + end + + it 'does not contain enabled_keys inside available_keys' do + expect(presenter.available_keys).not_to include deploy_key + end + end +end -- cgit v1.2.1 From c4f09f23c7228341d97c45e44612a513c70c5ed9 Mon Sep 17 00:00:00 2001 From: Jose Ivan Vargas Date: Fri, 3 Feb 2017 10:22:19 -0600 Subject: Add access spec tests for the /settings/repository route --- spec/features/security/project/private_access_spec.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/spec/features/security/project/private_access_spec.rb b/spec/features/security/project/private_access_spec.rb index c511dcfa18e..ad3bd60a313 100644 --- a/spec/features/security/project/private_access_spec.rb +++ b/spec/features/security/project/private_access_spec.rb @@ -110,6 +110,20 @@ describe "Private Project Access", feature: true do it { is_expected.to be_denied_for(:external) } end + describe "GET /:project_path/settings/repository" do + subject { namespace_project_settings_repository_path(project.namespace, project) } + + it { is_expected.to be_allowed_for(:admin) } + it { is_expected.to be_allowed_for(:owner).of(project) } + it { is_expected.to be_allowed_for(:master).of(project) } + it { is_expected.to be_denied_for(:developer).of(project) } + it { is_expected.to be_denied_for(:reporter).of(project) } + it { is_expected.to be_denied_for(:guest).of(project) } + it { is_expected.to be_denied_for(:user) } + it { is_expected.to be_denied_for(:external) } + it { is_expected.to be_denied_for(:visitor) } + end + describe "GET /:project_path/blob" do let(:commit) { project.repository.commit } subject { namespace_project_blob_path(project.namespace, project, File.join(commit.id, '.gitignore'))} -- cgit v1.2.1 From 336b818bcbcb070968f825f6a426e046a457d556 Mon Sep 17 00:00:00 2001 From: Jose Ivan Vargas Date: Fri, 10 Feb 2017 11:27:43 -0600 Subject: Added access spec tests Also created changelog and removed redundant code --- app/assets/stylesheets/pages/projects.scss | 2 ++ .../projects/protected_branches_controller.rb | 17 ----------------- .../projects/settings/repository_controller.rb | 2 +- app/helpers/repository_helper.rb | 12 ++++++++---- app/views/projects/protected_branches/_index.html.haml | 3 +-- ...r-repository-and-protect-branches-settings-pages.yml | 5 +++++ spec/features/security/project/internal_access_spec.rb | 14 ++++++++++++++ spec/features/security/project/public_access_spec.rb | 14 ++++++++++++++ 8 files changed, 45 insertions(+), 24 deletions(-) create mode 100644 changelogs/unreleased/26732-combine-deploy-keys-and-push-rules-and-mirror-repository-and-protect-branches-settings-pages.yml diff --git a/app/assets/stylesheets/pages/projects.scss b/app/assets/stylesheets/pages/projects.scss index 07b93430442..ce04013c313 100644 --- a/app/assets/stylesheets/pages/projects.scss +++ b/app/assets/stylesheets/pages/projects.scss @@ -761,6 +761,8 @@ pre.light-well { } .protected-branches-list { + margin-bottom: 30px; + a { color: $gl-text-color; diff --git a/app/controllers/projects/protected_branches_controller.rb b/app/controllers/projects/protected_branches_controller.rb index ac886f0739a..1c22b9c2ca8 100644 --- a/app/controllers/projects/protected_branches_controller.rb +++ b/app/controllers/projects/protected_branches_controller.rb @@ -1,5 +1,4 @@ class Projects::ProtectedBranchesController < Projects::ApplicationController - include RepositoryHelper # Authorize before_action :require_non_empty_project before_action :authorize_admin_project! @@ -61,20 +60,4 @@ class Projects::ProtectedBranchesController < Projects::ApplicationController def load_protected_branches @protected_branches = @project.protected_branches.order(:name).page(params[:page]) end - - def access_levels_options - { - push_access_levels: { - "Roles" => ProtectedBranch::PushAccessLevel.human_access_levels.map { |id, text| { id: id, text: text, before_divider: true } }, - }, - merge_access_levels: { - "Roles" => ProtectedBranch::MergeAccessLevel.human_access_levels.map { |id, text| { id: id, text: text, before_divider: true } } - } - } - end - - def load_gon_index - params = { open_branches: @project.open_branches.map { |br| { text: br.name, id: br.name, title: br.name } } } - gon.push(params.merge(access_levels_options)) - end end diff --git a/app/controllers/projects/settings/repository_controller.rb b/app/controllers/projects/settings/repository_controller.rb index 99a3756531f..a8c6a1b419c 100644 --- a/app/controllers/projects/settings/repository_controller.rb +++ b/app/controllers/projects/settings/repository_controller.rb @@ -21,7 +21,7 @@ module Projects def define_protected_branches_controller @protected_branch = @project.protected_branches.new - load_gon_index(@project) + load_gon_index end end end diff --git a/app/helpers/repository_helper.rb b/app/helpers/repository_helper.rb index fb9d9b26950..a079f1a889c 100644 --- a/app/helpers/repository_helper.rb +++ b/app/helpers/repository_helper.rb @@ -1,13 +1,17 @@ module RepositoryHelper def access_levels_options { - push_access_levels: ProtectedBranch::PushAccessLevel.human_access_levels.map { |id, text| { id: id, text: text, before_divider: true } }, - merge_access_levels: ProtectedBranch::MergeAccessLevel.human_access_levels.map { |id, text| { id: id, text: text, before_divider: true } } + push_access_levels: { + "Roles" => ProtectedBranch::PushAccessLevel.human_access_levels.map { |id, text| { id: id, text: text, before_divider: true } }, + }, + merge_access_levels: { + "Roles" => ProtectedBranch::MergeAccessLevel.human_access_levels.map { |id, text| { id: id, text: text, before_divider: true } } + } } end - def load_gon_index(project) - params = { open_branches: project.open_branches.map { |br| { text: br.name, id: br.name, title: br.name } } } + def load_gon_index + params = { open_branches: @project.open_branches.map { |br| { text: br.name, id: br.name, title: br.name } } } gon.push(params.merge(access_levels_options)) end end diff --git a/app/views/projects/protected_branches/_index.html.haml b/app/views/projects/protected_branches/_index.html.haml index 010ba5a24a7..2d8c519c025 100644 --- a/app/views/projects/protected_branches/_index.html.haml +++ b/app/views/projects/protected_branches/_index.html.haml @@ -1,11 +1,10 @@ -- page_title "Protected branches" - content_for :page_specific_javascripts do = page_specific_javascript_bundle_tag('protected_branches') .row.prepend-top-default.append-bottom-default .col-lg-3 %h4.prepend-top-0 - = page_title + Protected Branches %p Keep stable branches secure and force developers to use merge requests. %p.prepend-top-20 By default, protected branches are designed to: diff --git a/changelogs/unreleased/26732-combine-deploy-keys-and-push-rules-and-mirror-repository-and-protect-branches-settings-pages.yml b/changelogs/unreleased/26732-combine-deploy-keys-and-push-rules-and-mirror-repository-and-protect-branches-settings-pages.yml new file mode 100644 index 00000000000..5a41a6df620 --- /dev/null +++ b/changelogs/unreleased/26732-combine-deploy-keys-and-push-rules-and-mirror-repository-and-protect-branches-settings-pages.yml @@ -0,0 +1,5 @@ +--- +title: Combined deploy keys and push rules settings options into a single one called + Repository +merge_request: +author: diff --git a/spec/features/security/project/internal_access_spec.rb b/spec/features/security/project/internal_access_spec.rb index 24af062d763..1a66d1a6a1e 100644 --- a/spec/features/security/project/internal_access_spec.rb +++ b/spec/features/security/project/internal_access_spec.rb @@ -110,6 +110,20 @@ describe "Internal Project Access", feature: true do it { is_expected.to be_denied_for(:external) } end + describe "GET /:project_path/settings/repository" do + subject { namespace_project_settings_repository_path(project.namespace, project) } + + it { is_expected.to be_allowed_for(:admin) } + it { is_expected.to be_allowed_for(:owner).of(project) } + it { is_expected.to be_allowed_for(:master).of(project) } + it { is_expected.to be_denied_for(:developer).of(project) } + it { is_expected.to be_denied_for(:reporter).of(project) } + it { is_expected.to be_denied_for(:guest).of(project) } + it { is_expected.to be_denied_for(:user) } + it { is_expected.to be_denied_for(:visitor) } + it { is_expected.to be_denied_for(:external) } + end + describe "GET /:project_path/blob" do let(:commit) { project.repository.commit } subject { namespace_project_blob_path(project.namespace, project, File.join(commit.id, '.gitignore')) } diff --git a/spec/features/security/project/public_access_spec.rb b/spec/features/security/project/public_access_spec.rb index d8cc012c27e..e06aab4e0b2 100644 --- a/spec/features/security/project/public_access_spec.rb +++ b/spec/features/security/project/public_access_spec.rb @@ -110,6 +110,20 @@ describe "Public Project Access", feature: true do it { is_expected.to be_denied_for(:external) } end + describe "GET /:project_path/settings/repository" do + subject { namespace_project_settings_repository_path(project.namespace, project) } + + it { is_expected.to be_allowed_for(:admin) } + it { is_expected.to be_allowed_for(:owner).of(project) } + it { is_expected.to be_allowed_for(:master).of(project) } + it { is_expected.to be_denied_for(:developer).of(project) } + it { is_expected.to be_denied_for(:reporter).of(project) } + it { is_expected.to be_denied_for(:guest).of(project) } + it { is_expected.to be_denied_for(:user) } + it { is_expected.to be_denied_for(:visitor) } + it { is_expected.to be_denied_for(:external) } + end + describe "GET /:project_path/pipelines" do subject { namespace_project_pipelines_path(project.namespace, project) } -- cgit v1.2.1 From a29517dd0c6515121a2f42e08ad011415a3d8618 Mon Sep 17 00:00:00 2001 From: Jose Ivan Vargas Date: Tue, 21 Feb 2017 15:37:00 -0600 Subject: Added tests for the repository_controller and repository_helper Added specs for the deploy_keys_presenter and added a new method in the presenter called #key_available? Fixed some minor UX inconsistencies and added a concern to handle redirection --- app/controllers/concerns/redirect_request.rb | 7 ++++ app/controllers/projects/deploy_keys_controller.rb | 13 ++++--- .../projects/protected_branches_controller.rb | 13 +++---- .../projects/settings/repository_controller.rb | 14 +++---- app/helpers/repository_helper.rb | 12 ++++-- .../projects/settings/deploy_keys_presenter.rb | 4 ++ .../projects/deploy_keys/_deploy_key.html.haml | 2 +- app/views/projects/deploy_keys/_index.html.haml | 2 +- ...ository-and-protect-branches-settings-pages.yml | 2 +- .../settings/repository_controller_spec.rb | 20 ++++++++++ spec/helpers/repository_helper_spec.rb | 22 +++++++++++ .../settings/deploy_keys_presenter_spec.rb | 43 +++++++++++++++++++--- 12 files changed, 121 insertions(+), 33 deletions(-) create mode 100644 app/controllers/concerns/redirect_request.rb create mode 100644 spec/controllers/projects/settings/repository_controller_spec.rb create mode 100644 spec/helpers/repository_helper_spec.rb diff --git a/app/controllers/concerns/redirect_request.rb b/app/controllers/concerns/redirect_request.rb new file mode 100644 index 00000000000..acab5a8446a --- /dev/null +++ b/app/controllers/concerns/redirect_request.rb @@ -0,0 +1,7 @@ +module RedirectRequest + extend ActiveSupport::Concern + + def redirect_to_repository_settings(project) + redirect_to namespace_project_settings_repository_path(project.namespace, project) + end +end diff --git a/app/controllers/projects/deploy_keys_controller.rb b/app/controllers/projects/deploy_keys_controller.rb index 0d60e782dfb..465757e07b1 100644 --- a/app/controllers/projects/deploy_keys_controller.rb +++ b/app/controllers/projects/deploy_keys_controller.rb @@ -1,4 +1,5 @@ class Projects::DeployKeysController < Projects::ApplicationController + include RedirectRequest respond_to :html # Authorize @@ -7,32 +8,32 @@ class Projects::DeployKeysController < Projects::ApplicationController layout "project_settings" def index - redirect_to namespace_project_settings_repository_path(@project.namespace, @project) + redirect_to_repository_settings(@project) end def new - redirect_to namespace_project_settings_repository_path(@project.namespace, @project) + redirect_to_repository_settings(@project) end def create @key = DeployKey.new(deploy_key_params.merge(user: current_user)) unless @key.valid? && @project.deploy_keys << @key - flash[:alert] = @key.errors.full_messages.join(',').html_safe + flash[:alert] = @key.errors.full_messages.join(', ').html_safe end - redirect_to namespace_project_settings_repository_path(@project.namespace, @project) + redirect_to_repository_settings(@project) end def enable Projects::EnableDeployKeyService.new(@project, current_user, params).execute - redirect_to namespace_project_settings_repository_path(@project.namespace, @project) + redirect_to_repository_settings(@project) end def disable @project.deploy_keys_projects.find_by(deploy_key_id: params[:id]).destroy - redirect_to namespace_project_settings_repository_path(@project.namespace, @project) + redirect_to_repository_settings(@project) end protected diff --git a/app/controllers/projects/protected_branches_controller.rb b/app/controllers/projects/protected_branches_controller.rb index 1c22b9c2ca8..b7817a71e0d 100644 --- a/app/controllers/projects/protected_branches_controller.rb +++ b/app/controllers/projects/protected_branches_controller.rb @@ -1,4 +1,5 @@ class Projects::ProtectedBranchesController < Projects::ApplicationController + include RedirectRequest # Authorize before_action :require_non_empty_project before_action :authorize_admin_project! @@ -7,15 +8,15 @@ class Projects::ProtectedBranchesController < Projects::ApplicationController layout "project_settings" def index - redirect_to namespace_project_settings_repository_path(@project.namespace, @project) + redirect_to_repository_settings(@project) end def create @protected_branch = ::ProtectedBranches::CreateService.new(@project, current_user, protected_branch_params).execute unless @protected_branch.persisted? - flash[:alert] = @protected_branches.errors.full_messages.join(',').html_safe + flash[:alert] = @protected_branches.errors.full_messages.join(', ').html_safe end - redirect_to namespace_project_settings_repository_path(@project.namespace, @project) + redirect_to_repository_settings(@project) end def show @@ -40,7 +41,7 @@ class Projects::ProtectedBranchesController < Projects::ApplicationController @protected_branch.destroy respond_to do |format| - format.html { redirect_to namespace_project_settings_repository_path } + format.html { redirect_to_repository_settings(@project) } format.js { head :ok } end end @@ -56,8 +57,4 @@ class Projects::ProtectedBranchesController < Projects::ApplicationController merge_access_levels_attributes: [:access_level, :id], push_access_levels_attributes: [:access_level, :id]) end - - def load_protected_branches - @protected_branches = @project.protected_branches.order(:name).page(params[:page]) - end end diff --git a/app/controllers/projects/settings/repository_controller.rb b/app/controllers/projects/settings/repository_controller.rb index a8c6a1b419c..3c9417b9270 100644 --- a/app/controllers/projects/settings/repository_controller.rb +++ b/app/controllers/projects/settings/repository_controller.rb @@ -4,25 +4,25 @@ module Projects include RepositoryHelper before_action :authorize_admin_project! - before_action :load_protected_branches, only: [:show] def show @deploy_keys = DeployKeysPresenter .new(@project, current_user: @current_user) - define_protected_branches_controller - end - - def load_protected_branches - @protected_branches = @project.protected_branches.order(:name).page(params[:page]) + define_protected_branches end private - def define_protected_branches_controller + def define_protected_branches + load_protected_branches @protected_branch = @project.protected_branches.new load_gon_index end + + def load_protected_branches + @protected_branches = @project.protected_branches.order(:name).page(params[:page]) + end end end end diff --git a/app/helpers/repository_helper.rb b/app/helpers/repository_helper.rb index a079f1a889c..e34f9338b54 100644 --- a/app/helpers/repository_helper.rb +++ b/app/helpers/repository_helper.rb @@ -2,16 +2,22 @@ module RepositoryHelper def access_levels_options { push_access_levels: { - "Roles" => ProtectedBranch::PushAccessLevel.human_access_levels.map { |id, text| { id: id, text: text, before_divider: true } }, + "Roles" => ProtectedBranch::PushAccessLevel.human_access_levels.map do |id, text| + { id: id, text: text, before_divider: true } + end }, merge_access_levels: { - "Roles" => ProtectedBranch::MergeAccessLevel.human_access_levels.map { |id, text| { id: id, text: text, before_divider: true } } + "Roles" => ProtectedBranch::MergeAccessLevel.human_access_levels.map do |id, text| + { id: id, text: text, before_divider: true } + end } } end def load_gon_index - params = { open_branches: @project.open_branches.map { |br| { text: br.name, id: br.name, title: br.name } } } + params = { open_branches: @project.open_branches.map do |br| + { text: br.name, id: br.name, title: br.name } + end } gon.push(params.merge(access_levels_options)) end end diff --git a/app/presenters/projects/settings/deploy_keys_presenter.rb b/app/presenters/projects/settings/deploy_keys_presenter.rb index 703d93708f6..25be14bd28b 100644 --- a/app/presenters/projects/settings/deploy_keys_presenter.rb +++ b/app/presenters/projects/settings/deploy_keys_presenter.rb @@ -35,6 +35,10 @@ module Projects available_project_keys.size end + def key_available?(deploy_key) + available_keys.include?(deploy_key) + end + def available_public_keys return @available_public_keys if defined?(@available_public_keys) diff --git a/app/views/projects/deploy_keys/_deploy_key.html.haml b/app/views/projects/deploy_keys/_deploy_key.html.haml index 337f8c38a93..ec8fc4c9ee8 100644 --- a/app/views/projects/deploy_keys/_deploy_key.html.haml +++ b/app/views/projects/deploy_keys/_deploy_key.html.haml @@ -18,7 +18,7 @@ %span.key-created-at created #{time_ago_with_tooltip(deploy_key.created_at)} .visible-xs-block.visible-sm-block - - if @deploy_keys.available_keys.include?(deploy_key) + - if @deploy_keys.key_available?(deploy_key) = link_to enable_namespace_project_deploy_key_path(@project.namespace, @project, deploy_key), class: "btn btn-sm prepend-left-10", method: :put do Enable - else diff --git a/app/views/projects/deploy_keys/_index.html.haml b/app/views/projects/deploy_keys/_index.html.haml index 91acad83bf3..9f351d3b90e 100644 --- a/app/views/projects/deploy_keys/_index.html.haml +++ b/app/views/projects/deploy_keys/_index.html.haml @@ -19,7 +19,7 @@ = render partial: 'projects/deploy_keys/deploy_key', locals: {deploy_key: enabled_key} - else .settings-message.text-center - No deploy keys found. Create one with the form above or add existing one below. + No deploy keys found. Create one with the form above. %h5.prepend-top-default Deploy keys from projects you have access to (#{@deploy_keys.available_project_keys_size}) - if @deploy_keys.any_available_project_keys_enabled? diff --git a/changelogs/unreleased/26732-combine-deploy-keys-and-push-rules-and-mirror-repository-and-protect-branches-settings-pages.yml b/changelogs/unreleased/26732-combine-deploy-keys-and-push-rules-and-mirror-repository-and-protect-branches-settings-pages.yml index 5a41a6df620..6fc4615dab8 100644 --- a/changelogs/unreleased/26732-combine-deploy-keys-and-push-rules-and-mirror-repository-and-protect-branches-settings-pages.yml +++ b/changelogs/unreleased/26732-combine-deploy-keys-and-push-rules-and-mirror-repository-and-protect-branches-settings-pages.yml @@ -1,5 +1,5 @@ --- -title: Combined deploy keys and push rules settings options into a single one called +title: Combined deploy keys, push rules, protect branches and mirror repository settings options into a single one called Repository merge_request: author: diff --git a/spec/controllers/projects/settings/repository_controller_spec.rb b/spec/controllers/projects/settings/repository_controller_spec.rb new file mode 100644 index 00000000000..65f7bb34f4a --- /dev/null +++ b/spec/controllers/projects/settings/repository_controller_spec.rb @@ -0,0 +1,20 @@ +require 'spec_helper' + +describe Projects::Settings::IntegrationsController do + let(:project) { create(:empty_project, :public) } + let(:user) { create(:user) } + + before do + project.team << [user, :master] + sign_in(user) + end + + describe 'GET show' do + it 'renders show with 200 status code' do + get :show, namespace_id: project.namespace, project_id: project + + expect(response).to have_http_status(200) + expect(response).to render_template(:show) + end + end +end diff --git a/spec/helpers/repository_helper_spec.rb b/spec/helpers/repository_helper_spec.rb new file mode 100644 index 00000000000..f2a68cb2eae --- /dev/null +++ b/spec/helpers/repository_helper_spec.rb @@ -0,0 +1,22 @@ +require 'spec_helper' + +describe RepositoryHelper do + let(:user) { create(:user, :admin) } + let(:project) { create(:project, :repository) } + + before do + project.protected_branches.create(name: 'master') + end + + describe 'Access Level Options' do + it 'has three push access levels' do + push_access_levels = helper.access_levels_options[:push_access_levels]["Roles"] + expect(push_access_levels.size).to eq(3) + end + + it 'has one merge access level' do + merge_access_levels = helper.access_levels_options[:merge_access_levels]["Roles"] + expect(merge_access_levels.size).to eq(2) + end + end +end diff --git a/spec/presenters/projects/settings/deploy_keys_presenter_spec.rb b/spec/presenters/projects/settings/deploy_keys_presenter_spec.rb index 26ed9ac93a0..8faaaf55d72 100644 --- a/spec/presenters/projects/settings/deploy_keys_presenter_spec.rb +++ b/spec/presenters/projects/settings/deploy_keys_presenter_spec.rb @@ -3,6 +3,11 @@ require 'spec_helper' describe Projects::Settings::DeployKeysPresenter do let(:project) { create(:empty_project) } let(:user) { create(:user) } + let(:deploy_key) { create(:deploy_key, public: true) } + + let!(:deploy_keys_project) do + create(:deploy_keys_project, project: project, deploy_key: deploy_key) + end subject(:presenter) do described_class.new(project, current_user: user) @@ -13,16 +18,42 @@ describe Projects::Settings::DeployKeysPresenter do end describe '#enabled_keys' do - let(:deploy_key) do - create(:deploy_keys_project, project: project).deploy_key - end - - it 'returns project keys' do - expect(presenter.enabled_keys).to eq [deploy_key] + it 'returns currently enabled keys' do + expect(presenter.enabled_keys).to eq [deploy_keys_project.deploy_key] end it 'does not contain enabled_keys inside available_keys' do expect(presenter.available_keys).not_to include deploy_key end + + it 'returns the enabled_keys size' do + expect(presenter.enabled_keys_size).to eq(1) + end + + it 'returns true if there is any enabled_keys' do + expect(presenter.any_keys_enabled?).to eq(true) + end + end + + describe '#available_keys/#available_project_keys' do + it 'returns the current available_keys' do + expect(presenter.available_keys).to be_empty + end + + it 'returns the current available_project_keys' do + expect(presenter.available_project_keys).to be_empty + end + + it 'returns if any available_project_keys are enabled' do + expect(presenter.any_available_project_keys_enabled?).to eq(false) + end + + it 'returns the available_project_keys size' do + expect(presenter.available_project_keys_size).to eq(0) + end + + it 'shows if there is an available key' do + expect(presenter.key_available?(deploy_key)).to eq(false) + end end end -- cgit v1.2.1 From 43958926c5310642f2fc0c6f72952004d2ca5089 Mon Sep 17 00:00:00 2001 From: Jose Ivan Vargas Date: Tue, 28 Feb 2017 11:49:32 -0600 Subject: Added delegations to comply with the new rubocop rules Also fixed the deploy_keys view and moved the code from the repository_helper to the repository_controller --- .../projects/settings/repository_controller.rb | 23 ++++++++++++++++++++-- app/helpers/repository_helper.rb | 5 ++--- .../projects/settings/deploy_keys_presenter.rb | 15 +++----------- app/views/projects/deploy_keys/_index.html.haml | 9 +++------ .../settings/repository_controller_spec.rb | 4 ++-- spec/helpers/repository_helper_spec.rb | 22 --------------------- 6 files changed, 31 insertions(+), 47 deletions(-) delete mode 100644 spec/helpers/repository_helper_spec.rb diff --git a/app/controllers/projects/settings/repository_controller.rb b/app/controllers/projects/settings/repository_controller.rb index 3c9417b9270..7a1edee0822 100644 --- a/app/controllers/projects/settings/repository_controller.rb +++ b/app/controllers/projects/settings/repository_controller.rb @@ -1,8 +1,6 @@ module Projects module Settings class RepositoryController < Projects::ApplicationController - include RepositoryHelper - before_action :authorize_admin_project! def show @@ -23,6 +21,27 @@ module Projects def load_protected_branches @protected_branches = @project.protected_branches.order(:name).page(params[:page]) end + + def access_levels_options + { + push_access_levels: { + "Roles" => ProtectedBranch::PushAccessLevel.human_access_levels.map do |id, text| + { id: id, text: text, before_divider: true } + end + }, + merge_access_levels: { + "Roles" => ProtectedBranch::MergeAccessLevel.human_access_levels.map do |id, text| + { id: id, text: text, before_divider: true } + end + } + } + end + + def load_gon_index + open_branches = @project.open_branches.map { |br| { text: br.name, id: br.name, title: br.name } } + params = { open_branches: open_branches } + gon.push(params.merge(access_levels_options)) + end end end end diff --git a/app/helpers/repository_helper.rb b/app/helpers/repository_helper.rb index e34f9338b54..cd0ca3f9450 100644 --- a/app/helpers/repository_helper.rb +++ b/app/helpers/repository_helper.rb @@ -15,9 +15,8 @@ module RepositoryHelper end def load_gon_index - params = { open_branches: @project.open_branches.map do |br| - { text: br.name, id: br.name, title: br.name } - end } + open_branches = @project.open_branches.map { |br| { text: br.name, id: br.name, title: br.name } } + params = { open_branches: open_branches } gon.push(params.merge(access_levels_options)) end end diff --git a/app/presenters/projects/settings/deploy_keys_presenter.rb b/app/presenters/projects/settings/deploy_keys_presenter.rb index 25be14bd28b..86ac513b3c0 100644 --- a/app/presenters/projects/settings/deploy_keys_presenter.rb +++ b/app/presenters/projects/settings/deploy_keys_presenter.rb @@ -2,6 +2,9 @@ module Projects module Settings class DeployKeysPresenter < Gitlab::View::Presenter::Simple presents :project + delegate :size, to: :enabled_keys, prefix: true + delegate :size, to: :available_project_keys, prefix: true + delegate :size, to: :available_public_keys, prefix: true def new_key @key ||= DeployKey.new @@ -15,10 +18,6 @@ module Projects enabled_keys.any? end - def enabled_keys_size - enabled_keys.size - end - def available_keys @available_keys ||= current_user.accessible_deploy_keys - enabled_keys end @@ -31,10 +30,6 @@ module Projects available_project_keys.any? end - def available_project_keys_size - available_project_keys.size - end - def key_available?(deploy_key) available_keys.include?(deploy_key) end @@ -53,10 +48,6 @@ module Projects available_public_keys.any? end - def available_public_keys_size - available_public_keys.size - end - def to_partial_path 'projects/deploy_keys/index' end diff --git a/app/views/projects/deploy_keys/_index.html.haml b/app/views/projects/deploy_keys/_index.html.haml index 9f351d3b90e..0cbe9b3275a 100644 --- a/app/views/projects/deploy_keys/_index.html.haml +++ b/app/views/projects/deploy_keys/_index.html.haml @@ -15,8 +15,7 @@ Enabled deploy keys for this project (#{@deploy_keys.enabled_keys_size}) - if @deploy_keys.any_keys_enabled? %ul.well-list - - @deploy_keys.enabled_keys.each do |enabled_key| - = render partial: 'projects/deploy_keys/deploy_key', locals: {deploy_key: enabled_key} + = render partial: 'projects/deploy_keys/deploy_key', collection: @deploy_keys.enabled_keys, as: :deploy_key - else .settings-message.text-center No deploy keys found. Create one with the form above. @@ -24,8 +23,7 @@ Deploy keys from projects you have access to (#{@deploy_keys.available_project_keys_size}) - if @deploy_keys.any_available_project_keys_enabled? %ul.well-list - - @deploy_keys.available_project_keys.each do |available_key| - = render partial: 'projects/deploy_keys/deploy_key', locals: {deploy_key: available_key} + = render partial: 'projects/deploy_keys/deploy_key', collection: @deploy_keys.available_project_keys, as: :deploy_key - else .settings-message.text-center No deploy keys from your projects could be found. Create one with the form above or add existing one below. @@ -33,5 +31,4 @@ %h5.prepend-top-default Public deploy keys available to any project (#{@deploy_keys.available_public_keys_size}) %ul.well-list - - @deploy_keys.available_public_keys.each do |available_key| - = render partial: 'projects/deploy_keys/deploy_key', locals: {deploy_key: available_key} + = render partial: 'projects/deploy_keys/deploy_key', collection: @deploy_keys.available_public_keys, as: :deploy_key diff --git a/spec/controllers/projects/settings/repository_controller_spec.rb b/spec/controllers/projects/settings/repository_controller_spec.rb index 65f7bb34f4a..77faf96033d 100644 --- a/spec/controllers/projects/settings/repository_controller_spec.rb +++ b/spec/controllers/projects/settings/repository_controller_spec.rb @@ -1,11 +1,11 @@ require 'spec_helper' -describe Projects::Settings::IntegrationsController do +describe Projects::Settings::RepositoryController do let(:project) { create(:empty_project, :public) } let(:user) { create(:user) } before do - project.team << [user, :master] + project.add_master(user) sign_in(user) end diff --git a/spec/helpers/repository_helper_spec.rb b/spec/helpers/repository_helper_spec.rb deleted file mode 100644 index f2a68cb2eae..00000000000 --- a/spec/helpers/repository_helper_spec.rb +++ /dev/null @@ -1,22 +0,0 @@ -require 'spec_helper' - -describe RepositoryHelper do - let(:user) { create(:user, :admin) } - let(:project) { create(:project, :repository) } - - before do - project.protected_branches.create(name: 'master') - end - - describe 'Access Level Options' do - it 'has three push access levels' do - push_access_levels = helper.access_levels_options[:push_access_levels]["Roles"] - expect(push_access_levels.size).to eq(3) - end - - it 'has one merge access level' do - merge_access_levels = helper.access_levels_options[:merge_access_levels]["Roles"] - expect(merge_access_levels.size).to eq(2) - end - end -end -- cgit v1.2.1 From bd9887e61701492dc331d188d5b0e1740b037ea3 Mon Sep 17 00:00:00 2001 From: Jose Ivan Vargas Date: Wed, 1 Mar 2017 10:15:46 -0600 Subject: Fixed repository_controller_spec also added an #open_branches private method --- app/controllers/projects/settings/repository_controller.rb | 11 +++++++---- .../projects/settings/repository_controller_spec.rb | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/app/controllers/projects/settings/repository_controller.rb b/app/controllers/projects/settings/repository_controller.rb index 7a1edee0822..a9d10dcddef 100644 --- a/app/controllers/projects/settings/repository_controller.rb +++ b/app/controllers/projects/settings/repository_controller.rb @@ -5,7 +5,7 @@ module Projects def show @deploy_keys = DeployKeysPresenter - .new(@project, current_user: @current_user) + .new(@project, current_user: current_user) define_protected_branches end @@ -37,10 +37,13 @@ module Projects } end + def open_branches + branches = @project.open_branches.map { |br| { text: br.name, id: br.name, title: br.name } } + { open_branches: branches } + end + def load_gon_index - open_branches = @project.open_branches.map { |br| { text: br.name, id: br.name, title: br.name } } - params = { open_branches: open_branches } - gon.push(params.merge(access_levels_options)) + gon.push(open_branches.merge(access_levels_options)) end end end diff --git a/spec/controllers/projects/settings/repository_controller_spec.rb b/spec/controllers/projects/settings/repository_controller_spec.rb index 77faf96033d..f73471f8ca8 100644 --- a/spec/controllers/projects/settings/repository_controller_spec.rb +++ b/spec/controllers/projects/settings/repository_controller_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' describe Projects::Settings::RepositoryController do - let(:project) { create(:empty_project, :public) } + let(:project) { create(:project_empty_repo, :public) } let(:user) { create(:user) } before do -- cgit v1.2.1 From b17843a95471112bfdecdff2b4c905ab720f8ed0 Mon Sep 17 00:00:00 2001 From: Jose Ivan Vargas Date: Thu, 2 Mar 2017 09:28:26 -0600 Subject: Removed repository_helper.rb --- app/helpers/repository_helper.rb | 22 ---------------------- 1 file changed, 22 deletions(-) delete mode 100644 app/helpers/repository_helper.rb diff --git a/app/helpers/repository_helper.rb b/app/helpers/repository_helper.rb deleted file mode 100644 index cd0ca3f9450..00000000000 --- a/app/helpers/repository_helper.rb +++ /dev/null @@ -1,22 +0,0 @@ -module RepositoryHelper - def access_levels_options - { - push_access_levels: { - "Roles" => ProtectedBranch::PushAccessLevel.human_access_levels.map do |id, text| - { id: id, text: text, before_divider: true } - end - }, - merge_access_levels: { - "Roles" => ProtectedBranch::MergeAccessLevel.human_access_levels.map do |id, text| - { id: id, text: text, before_divider: true } - end - } - } - end - - def load_gon_index - open_branches = @project.open_branches.map { |br| { text: br.name, id: br.name, title: br.name } } - params = { open_branches: open_branches } - gon.push(params.merge(access_levels_options)) - end -end -- cgit v1.2.1 From 55b07533a9bede54728be91f97678a67f431c6b5 Mon Sep 17 00:00:00 2001 From: Jose Ivan Vargas Date: Fri, 3 Mar 2017 11:41:15 -0600 Subject: Renamed the redirect_request concern to repository_settings_redirect Also fixed naming of a test in the deploy_keys_presenter --- app/controllers/concerns/redirect_request.rb | 7 ------- app/controllers/concerns/repository_settings_redirect.rb | 7 +++++++ app/controllers/projects/deploy_keys_controller.rb | 2 +- app/controllers/projects/protected_branches_controller.rb | 2 +- spec/presenters/projects/settings/deploy_keys_presenter_spec.rb | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) delete mode 100644 app/controllers/concerns/redirect_request.rb create mode 100644 app/controllers/concerns/repository_settings_redirect.rb diff --git a/app/controllers/concerns/redirect_request.rb b/app/controllers/concerns/redirect_request.rb deleted file mode 100644 index acab5a8446a..00000000000 --- a/app/controllers/concerns/redirect_request.rb +++ /dev/null @@ -1,7 +0,0 @@ -module RedirectRequest - extend ActiveSupport::Concern - - def redirect_to_repository_settings(project) - redirect_to namespace_project_settings_repository_path(project.namespace, project) - end -end diff --git a/app/controllers/concerns/repository_settings_redirect.rb b/app/controllers/concerns/repository_settings_redirect.rb new file mode 100644 index 00000000000..0854c73a02f --- /dev/null +++ b/app/controllers/concerns/repository_settings_redirect.rb @@ -0,0 +1,7 @@ +module RepositorySettingsRedirect + extend ActiveSupport::Concern + + def redirect_to_repository_settings(project) + redirect_to namespace_project_settings_repository_path(project.namespace, project) + end +end diff --git a/app/controllers/projects/deploy_keys_controller.rb b/app/controllers/projects/deploy_keys_controller.rb index 465757e07b1..1502b734f37 100644 --- a/app/controllers/projects/deploy_keys_controller.rb +++ b/app/controllers/projects/deploy_keys_controller.rb @@ -1,5 +1,5 @@ class Projects::DeployKeysController < Projects::ApplicationController - include RedirectRequest + include RepositorySettingsRedirect respond_to :html # Authorize diff --git a/app/controllers/projects/protected_branches_controller.rb b/app/controllers/projects/protected_branches_controller.rb index b7817a71e0d..a8cb07eb67a 100644 --- a/app/controllers/projects/protected_branches_controller.rb +++ b/app/controllers/projects/protected_branches_controller.rb @@ -1,5 +1,5 @@ class Projects::ProtectedBranchesController < Projects::ApplicationController - include RedirectRequest + include RepositorySettingsRedirect # Authorize before_action :require_non_empty_project before_action :authorize_admin_project! diff --git a/spec/presenters/projects/settings/deploy_keys_presenter_spec.rb b/spec/presenters/projects/settings/deploy_keys_presenter_spec.rb index 8faaaf55d72..7245631a388 100644 --- a/spec/presenters/projects/settings/deploy_keys_presenter_spec.rb +++ b/spec/presenters/projects/settings/deploy_keys_presenter_spec.rb @@ -44,7 +44,7 @@ describe Projects::Settings::DeployKeysPresenter do expect(presenter.available_project_keys).to be_empty end - it 'returns if any available_project_keys are enabled' do + it 'returns false if any available_project_keys are enabled' do expect(presenter.any_available_project_keys_enabled?).to eq(false) end -- cgit v1.2.1 From 002d3a3e72de57c76a077ed5d09e857243c7effd Mon Sep 17 00:00:00 2001 From: Jose Ivan Vargas Date: Mon, 6 Mar 2017 14:42:04 -0600 Subject: Added test case for the avaiable project keys --- .../projects/settings/deploy_keys_presenter_spec.rb | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/spec/presenters/projects/settings/deploy_keys_presenter_spec.rb b/spec/presenters/projects/settings/deploy_keys_presenter_spec.rb index 7245631a388..6443f86b6a1 100644 --- a/spec/presenters/projects/settings/deploy_keys_presenter_spec.rb +++ b/spec/presenters/projects/settings/deploy_keys_presenter_spec.rb @@ -36,20 +36,27 @@ describe Projects::Settings::DeployKeysPresenter do end describe '#available_keys/#available_project_keys' do + let(:other_deploy_key) { create(:another_deploy_key) } + + before do + project_key = create(:deploy_keys_project, deploy_key: other_deploy_key) + project_key.project.add_developer(user) + end + it 'returns the current available_keys' do - expect(presenter.available_keys).to be_empty + expect(presenter.available_keys).not_to be_empty end it 'returns the current available_project_keys' do - expect(presenter.available_project_keys).to be_empty + expect(presenter.available_project_keys).not_to be_empty end it 'returns false if any available_project_keys are enabled' do - expect(presenter.any_available_project_keys_enabled?).to eq(false) + expect(presenter.any_available_project_keys_enabled?).to eq(true) end it 'returns the available_project_keys size' do - expect(presenter.available_project_keys_size).to eq(0) + expect(presenter.available_project_keys_size).to eq(1) end it 'shows if there is an available key' do -- cgit v1.2.1