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
This commit is contained in:
parent
336b818bcb
commit
a29517dd0c
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
define_protected_branches
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
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
|
||||
|
||||
private
|
||||
|
||||
def define_protected_branches_controller
|
||||
@protected_branch = @project.protected_branches.new
|
||||
load_gon_index
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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?
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue