Commit 9c14ed06 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge branch 'public-deploy-keys' into 'master'

Allow admin to create public deploy keys that are accessible to any project.

Addresses private issue https://dev.gitlab.org/gitlab/gitlabhq/issues/1774.

Project settings:

![Screen_Shot_2015-03-27_at_14.46.48](https://gitlab.com/gitlab-org/gitlab-ce/uploads/01799ff912671ba6db3f828ea1aca1a6/Screen_Shot_2015-03-27_at_14.46.48.png)

The "Public deploy keys" section is only shown when there are any. If there are public deploy keys but no project deploy keys, only public deploy keys are shown. If there are no public deploy keys and no project deploy keys, the current "Deploy keys from projects you have access to will be displayed here" placeholder is shown.

The list of projects below the public key has been changed to only show projects the user has access to.

"Public deploy key" seems to be repeated on the left, but the first is just the title. The label is always visible for public deploy keys.

Admin index:

![Screen_Shot_2015-03-27_at_14.47.06](https://gitlab.com/gitlab-org/gitlab-ce/uploads/ea889d274cfd3f0694d47d602f4f3e94/Screen_Shot_2015-03-27_at_14.47.06.png)

Admin detail page:

![Screen_Shot_2015-03-27_at_14.47.16](https://gitlab.com/gitlab-org/gitlab-ce/uploads/8c8475e05bf6b497da3b9f1bc102329f/Screen_Shot_2015-03-27_at_14.47.16.png)

Projects using the deploy key are listed on the left and can be disabled easily.

See merge request !469
parents 0c24192f 6237cae1
...@@ -77,6 +77,8 @@ v 7.10.0 (unreleased) ...@@ -77,6 +77,8 @@ v 7.10.0 (unreleased)
v 7.9.3 v 7.9.3
- Contains no changes - Contains no changes
- Add icons to Add dropdown items. - Add icons to Add dropdown items.
- Allow admin to create public deploy keys that are accessible to any project.
v 7.9.2 v 7.9.2
- Contains no changes - Contains no changes
......
class Admin::DeployKeysController < Admin::ApplicationController
before_filter :deploy_keys, only: [:index]
before_filter :deploy_key, only: [:show, :destroy]
def index
end
def show
end
def new
@deploy_key = deploy_keys.new
end
def create
@deploy_key = deploy_keys.new(deploy_key_params)
if @deploy_key.save
redirect_to admin_deploy_keys_path
else
render "new"
end
end
def destroy
deploy_key.destroy
respond_to do |format|
format.html { redirect_to admin_deploy_keys_path }
format.json { head :ok }
end
end
protected
def deploy_key
@deploy_key ||= deploy_keys.find(params[:id])
end
def deploy_keys
@deploy_keys ||= DeployKey.are_public
end
def deploy_key_params
params.require(:deploy_key).permit(:key, :title)
end
end
...@@ -8,7 +8,14 @@ class Projects::DeployKeysController < Projects::ApplicationController ...@@ -8,7 +8,14 @@ class Projects::DeployKeysController < Projects::ApplicationController
def index def index
@enabled_keys = @project.deploy_keys @enabled_keys = @project.deploy_keys
@available_keys = available_keys - @enabled_keys
@available_keys = accessible_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 end
def show def show
...@@ -32,18 +39,9 @@ class Projects::DeployKeysController < Projects::ApplicationController ...@@ -32,18 +39,9 @@ class Projects::DeployKeysController < Projects::ApplicationController
end end
end end
def destroy
@key = @project.deploy_keys.find(params[:id])
@key.destroy
respond_to do |format|
format.html { redirect_to namespace_project_deploy_keys_path(@project.namespace, @project) }
format.js { render nothing: true }
end
end
def enable def enable
@project.deploy_keys << available_keys.find(params[:id]) @key = accessible_keys.find(params[:id])
@project.deploy_keys << @key
redirect_to namespace_project_deploy_keys_path(@project.namespace, redirect_to namespace_project_deploy_keys_path(@project.namespace,
@project) @project)
...@@ -52,14 +50,13 @@ class Projects::DeployKeysController < Projects::ApplicationController ...@@ -52,14 +50,13 @@ class Projects::DeployKeysController < Projects::ApplicationController
def disable def disable
@project.deploy_keys_projects.find_by(deploy_key_id: params[:id]).destroy @project.deploy_keys_projects.find_by(deploy_key_id: params[:id]).destroy
redirect_to namespace_project_deploy_keys_path(@project.namespace, redirect_to :back
@project)
end end
protected protected
def available_keys def accessible_keys
@available_keys ||= current_user.accessible_deploy_keys @accessible_keys ||= current_user.accessible_deploy_keys
end end
def deploy_key_params def deploy_key_params
......
...@@ -127,6 +127,14 @@ module ProjectsHelper ...@@ -127,6 +127,14 @@ module ProjectsHelper
html + count_html html + count_html
end end
def project_for_deploy_key(deploy_key)
if deploy_key.projects.include?(@project)
@project
else
deploy_key.projects.find { |project| can?(current_user, :read_project, project) }
end
end
private private
def get_project_nav_tabs(project, current_user) def get_project_nav_tabs(project, current_user)
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
# created_at :datetime # created_at :datetime
# updated_at :datetime # updated_at :datetime
# key :text # key :text
# public :boolean default(FALSE)
# title :string(255) # title :string(255)
# type :string(255) # type :string(255)
# fingerprint :string(255) # fingerprint :string(255)
...@@ -17,4 +18,21 @@ class DeployKey < Key ...@@ -17,4 +18,21 @@ class DeployKey < Key
has_many :projects, through: :deploy_keys_projects has_many :projects, through: :deploy_keys_projects
scope :in_projects, ->(projects) { joins(:deploy_keys_projects).where('deploy_keys_projects.project_id in (?)', projects) } scope :in_projects, ->(projects) { joins(:deploy_keys_projects).where('deploy_keys_projects.project_id in (?)', projects) }
scope :are_public, -> { where(public: true) }
def private?
!public?
end
def orphaned?
self.deploy_keys_projects.length == 0
end
def almost_orphaned?
self.deploy_keys_projects.length == 1
end
def destroyed_when_orphaned?
self.private?
end
end end
...@@ -22,6 +22,8 @@ class DeployKeysProject < ActiveRecord::Base ...@@ -22,6 +22,8 @@ class DeployKeysProject < ActiveRecord::Base
private private
def destroy_orphaned_deploy_key def destroy_orphaned_deploy_key
self.deploy_key.destroy if self.deploy_key.deploy_keys_projects.length == 0 return unless self.deploy_key.destroyed_when_orphaned? && self.deploy_key.orphaned?
self.deploy_key.destroy
end end
end end
...@@ -414,8 +414,16 @@ class User < ActiveRecord::Base ...@@ -414,8 +414,16 @@ class User < ActiveRecord::Base
@ldap_identity ||= identities.find_by(["provider LIKE ?", "ldap%"]) @ldap_identity ||= identities.find_by(["provider LIKE ?", "ldap%"])
end end
def project_deploy_keys
DeployKey.in_projects(self.authorized_projects.pluck(:id))
end
def accessible_deploy_keys def accessible_deploy_keys
DeployKey.in_projects(self.authorized_projects.pluck(:id)).uniq @accessible_deploy_keys ||= begin
key_ids = project_deploy_keys.pluck(:id)
key_ids.push(*DeployKey.are_public.pluck(:id))
DeployKey.where(id: key_ids)
end
end end
def created_by def created_by
......
.panel.panel-default
.panel-heading
Public deploy keys (#{@deploy_keys.count})
.panel-head-actions
= link_to 'New Deploy Key', new_admin_deploy_key_path, class: "btn btn-new btn-sm"
- if @deploy_keys.any?
%table.table
%thead.panel-heading
%tr
%th Title
%th Fingerprint
%th Added at
%th
%tbody
- @deploy_keys.each do |deploy_key|
%tr
%td
= link_to admin_deploy_key_path(deploy_key) do
%strong= deploy_key.title
%td
%span
(#{deploy_key.fingerprint})
%td
%span.cgray
added #{time_ago_with_tooltip(deploy_key.created_at)}
%td
= link_to 'Remove', admin_deploy_key_path(deploy_key), data: { confirm: 'Are you sure?'}, method: :delete, class: "btn btn-sm btn-remove delete-key pull-right"
%h3.page-title New public deploy key
%hr
%div
= form_for [:admin, @deploy_key], html: { class: 'deploy-key-form form-horizontal' } do |f|
-if @deploy_key.errors.any?
.alert.alert-danger
%ul
- @deploy_key.errors.full_messages.each do |msg|
%li= msg
.form-group
= f.label :title, class: "control-label"
.col-sm-10= f.text_field :title, class: 'form-control'
.form-group
= f.label :key, class: "control-label"
.col-sm-10
%p.light
Paste a machine public key here. Read more about how to generate it
= link_to "here", help_page_path("ssh", "README")
= f.text_area :key, class: "form-control thin_area", rows: 5
.form-actions
= f.submit 'Create', class: "btn-create btn"
= link_to "Cancel", admin_deploy_keys_path, class: "btn btn-cancel"
.row
.col-md-4
.panel.panel-default
.panel-heading
Deploy Key
%ul.well-list
%li
%span.light Title:
%strong= @deploy_key.title
%li
%span.light Created on:
%strong= @deploy_key.created_at.stamp("Aug 21, 2011")
.panel.panel-default
.panel-heading Projects (#{@deploy_key.deploy_keys_projects.count})
- if @deploy_key.deploy_keys_projects.any?
%ul.well-list
- @deploy_key.projects.each do |project|
%li
%span
%strong
= link_to project.name_with_namespace, [:admin, project.namespace.becomes(Namespace), project]
.pull-right
= link_to disable_namespace_project_deploy_key_path(project.namespace, project, @deploy_key), data: { confirm: "Are you sure?" }, method: :put, class: "btn-xs btn btn-remove", title: 'Remove deploy key from project' do
%i.fa.fa-times.fa-inverse
.col-md-8
%p
%span.light Fingerprint:
%strong= @deploy_key.fingerprint
%pre.well-pre
= @deploy_key.key
.pull-right
= link_to 'Remove', admin_deploy_key_path(@deploy_key), data: {confirm: 'Are you sure?'}, method: :delete, class: "btn btn-remove delete-key"
...@@ -19,6 +19,11 @@ ...@@ -19,6 +19,11 @@
%i.fa.fa-group %i.fa.fa-group
%span %span
Groups Groups
= nav_link(controller: :deploy_keys) do
= link_to admin_deploy_keys_path, title: 'Deploy Keys' do
%i.fa.fa-key
%span
Deploy Keys
= nav_link(controller: :logs) do = nav_link(controller: :logs) do
= link_to admin_logs_path, title: 'Logs' do = link_to admin_logs_path, title: 'Logs' do
%i.fa.fa-file-text %i.fa.fa-file-text
......
...@@ -5,21 +5,32 @@ ...@@ -5,21 +5,32 @@
%i.fa.fa-plus %i.fa.fa-plus
Enable Enable
- else - else
- if deploy_key.projects.count > 1 - if deploy_key.destroyed_when_orphaned? && deploy_key.almost_orphaned?
= link_to 'Remove', disable_namespace_project_deploy_key_path(@project.namespace, @project, deploy_key), data: { confirm: 'You are going to remove deploy key. Are you sure?'}, method: :put, class: "btn btn-remove delete-key btn-sm pull-right"
- else
= link_to disable_namespace_project_deploy_key_path(@project.namespace, @project, deploy_key), class: 'btn btn-sm', method: :put do = link_to disable_namespace_project_deploy_key_path(@project.namespace, @project, deploy_key), class: 'btn btn-sm', method: :put do
%i.fa.fa-power-off %i.fa.fa-power-off
Disable Disable
- else
= link_to 'Remove', namespace_project_deploy_key_path(@project.namespace, @project, deploy_key), data: { confirm: 'You are going to remove deploy key. Are you sure?'}, method: :delete, class: "btn btn-remove delete-key btn-sm pull-right"
- key_project = deploy_key.projects.include?(@project) ? @project : deploy_key.projects.first - if project = project_for_deploy_key(deploy_key)
= link_to namespace_project_deploy_key_path(key_project.namespace, key_project, deploy_key) do = link_to namespace_project_deploy_key_path(project.namespace, project, deploy_key) do
%i.fa.fa-key
%strong= deploy_key.title
- else
%i.fa.fa-key %i.fa.fa-key
%strong= deploy_key.title %strong= deploy_key.title
%p.light.prepend-top-10 %p.light.prepend-top-10
- deploy_key.projects.map(&:name_with_namespace).each do |project_name| - if deploy_key.public?
%span.label.label-gray.deploy-project-label= project_name %span.label.label-info.deploy-project-label
Public deploy key
- deploy_key.projects.each do |project|
- if can?(current_user, :read_project, project)
%span.label.label-gray.deploy-project-label
= link_to namespace_project_path(project.namespace, project) do
= project.name_with_namespace
%small.pull-right %small.pull-right
Created #{time_ago_with_tooltip(deploy_key.created_at)} Created #{time_ago_with_tooltip(deploy_key.created_at)}
...@@ -22,11 +22,20 @@ ...@@ -22,11 +22,20 @@
.light-well .light-well
.nothing-here-block Create a #{link_to 'new deploy key', new_namespace_project_deploy_key_path(@project.namespace, @project)} or add an existing one .nothing-here-block Create a #{link_to 'new deploy key', new_namespace_project_deploy_key_path(@project.namespace, @project)} or add an existing one
.col-md-6.available-keys .col-md-6.available-keys
%h5 - # If there are available public deploy keys but no available project deploy keys, only public deploy keys are shown.
%strong Deploy keys - if @available_project_keys.any? || @available_public_keys.blank?
from projects available to you %h5
%ul.bordered-list %strong Deploy keys
= render @available_keys from projects you have access to
- if @available_keys.blank? %ul.bordered-list
.light-well = render @available_project_keys
.nothing-here-block Deploy keys from projects you have access to will be displayed here - if @available_project_keys.blank?
.light-well
.nothing-here-block Deploy keys from projects you have access to will be displayed here
- if @available_public_keys.any?
%h5
%strong Public deploy keys
available to any project
%ul.bordered-list
= render @available_public_keys
...@@ -145,6 +145,8 @@ Gitlab::Application.routes.draw do ...@@ -145,6 +145,8 @@ Gitlab::Application.routes.draw do
end end
end end
resources :deploy_keys, only: [:index, :show, :new, :create, :destroy]
resources :hooks, only: [:index, :create, :destroy] do resources :hooks, only: [:index, :create, :destroy] do
get :test get :test
end end
...@@ -393,7 +395,7 @@ Gitlab::Application.routes.draw do ...@@ -393,7 +395,7 @@ Gitlab::Application.routes.draw do
end end
end end
resources :deploy_keys, constraints: { id: /\d+/ } do resources :deploy_keys, constraints: { id: /\d+/ }, only: [:index, :show, :new, :create] do
member do member do
put :enable put :enable
put :disable put :disable
......
class AddPublicToKey < ActiveRecord::Migration
def change
add_column :keys, :public, :boolean, default: false, null: false
end
end
...@@ -132,6 +132,7 @@ ActiveRecord::Schema.define(version: 20150411180045) do ...@@ -132,6 +132,7 @@ ActiveRecord::Schema.define(version: 20150411180045) do
t.string "title" t.string "title"
t.string "type" t.string "type"
t.string "fingerprint" t.string "fingerprint"
t.boolean "public", default: false, null: false
end end
add_index "keys", ["created_at", "id"], name: "index_keys_on_created_at_and_id", using: :btree add_index "keys", ["created_at", "id"], name: "index_keys_on_created_at_and_id", using: :btree
......
@admin
Feature: Admin Deploy Keys
Background:
Given I sign in as an admin
And there are public deploy keys in system
Scenario: Deploy Keys list
When I visit admin deploy keys page
Then I should see all public deploy keys
Scenario: Deploy Keys show
When I visit admin deploy keys page
And I click on first deploy key
Then I should see deploy key details
Scenario: Deploy Keys new
When I visit admin deploy keys page
And I click 'New Deploy Key'
And I submit new deploy key
Then I should be on admin deploy keys page
And I should see newly created deploy key
...@@ -6,7 +6,17 @@ Feature: Project Deploy Keys ...@@ -6,7 +6,17 @@ Feature: Project Deploy Keys
Scenario: I should see deploy keys list Scenario: I should see deploy keys list
Given project has deploy key Given project has deploy key
When I visit project deploy keys page When I visit project deploy keys page
Then I should see project deploy keys Then I should see project deploy key
Scenario: I should see project deploy keys
Given other project has deploy key
When I visit project deploy keys page
Then I should see other project deploy key
Scenario: I should see public deploy keys
Given public deploy key exists
When I visit project deploy keys page
Then I should see public deploy key
Scenario: I add new deploy key Scenario: I add new deploy key
Given I visit project deploy keys page Given I visit project deploy keys page
...@@ -15,9 +25,16 @@ Feature: Project Deploy Keys ...@@ -15,9 +25,16 @@ Feature: Project Deploy Keys
Then I should be on deploy keys page Then I should be on deploy keys page
And I should see newly created deploy key And I should see newly created deploy key
Scenario: I attach deploy key to project Scenario: I attach other project deploy key to project
Given other project has deploy key Given other project has deploy key
And I visit project deploy keys page And I visit project deploy keys page
When I click attach deploy key When I click attach deploy key
Then I should be on deploy keys page Then I should be on deploy keys page
And I should see newly created deploy key And I should see newly created deploy key
Scenario: I attach public deploy key to project
Given public deploy key exists
And I visit project deploy keys page
When I click attach deploy key
Then I should be on deploy keys page
And I should see newly created deploy key
class Spinach::Features::AdminDeployKeys < Spinach::FeatureSteps
include SharedAuthentication
include SharedPaths
include SharedAdmin
step 'there are public deploy keys in system' do
create(:deploy_key, public: true)
create(:another_deploy_key, public: true)
end
step 'I should see all public deploy keys' do
DeployKey.are_public.each do |p|
page.should have_content p.title
end
end
step 'I click on first deploy key' do
click_link DeployKey.are_public.first.title
end
step 'I should see deploy key details' do
deploy_key = DeployKey.are_public.first
current_path.should == admin_deploy_key_path(deploy_key)
page.should have_content(deploy_key.title)
page.should have_content(deploy_key.key)
end
step 'I visit admin deploy key page' do
visit admin_deploy_key_path(deploy_key)
end
step 'I visit admin deploy keys page' do
visit admin_deploy_keys_path
end
step 'I click \'New Deploy Key\'' do
click_link 'New Deploy Key'
end
step 'I submit new deploy key' do
fill_in "deploy_key_title", with: "laptop"
fill_in "deploy_key_key", with: "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzrEJUIR6Y03TCE9rIJ+GqTBvgb8t1jI9h5UBzCLuK4VawOmkLornPqLDrGbm6tcwM/wBrrLvVOqi2HwmkKEIecVO0a64A4rIYScVsXIniHRS6w5twyn1MD3sIbN+socBDcaldECQa2u1dI3tnNVcs8wi77fiRe7RSxePsJceGoheRQgC8AZ510UdIlO+9rjIHUdVN7LLyz512auAfYsgx1OfablkQ/XJcdEwDNgi9imI6nAXhmoKUm1IPLT2yKajTIC64AjLOnE0YyCh6+7RFMpiMyu1qiOCpdjYwTgBRiciNRZCH8xIedyCoAmiUgkUT40XYHwLuwiPJICpkAzp7Q== user@laptop"
click_button "Create"
end
step 'I should be on admin deploy keys page' do
current_path.should == admin_deploy_keys_path
end
step 'I should see newly created deploy key' do
page.should have_content(deploy_key.title)
end
def deploy_key
@deploy_key ||= DeployKey.are_public.first
end
end
...@@ -7,12 +7,24 @@ class Spinach::Features::ProjectDeployKeys < Spinach::FeatureSteps ...@@ -7,12 +7,24 @@ class Spinach::Features::ProjectDeployKeys < Spinach::FeatureSteps
create(:deploy_keys_project, project: @project) create(:deploy_keys_project, project: @project)
end end
step 'I should see project deploy keys' do step 'I should see project deploy key' do
within '.enabled-keys' do within '.enabled-keys' do
page.should have_content deploy_key.title page.should have_content deploy_key.title
end end
end end
step 'I should see other project deploy key' do
within '.available-keys' do
page.should have_content other_deploy_key.title
end
end
step 'I should see public deploy key' do
within '.available-keys' do
page.should have_content public_deploy_key.title
end
end
step 'I click \'New Deploy Key\'' do step 'I click \'New Deploy Key\'' do
click_link 'New Deploy Key' click_link 'New Deploy Key'
end end
...@@ -39,6 +51,10 @@ class Spinach::Features::ProjectDeployKeys < Spinach::FeatureSteps ...@@ -39,6 +51,10 @@ class Spinach::Features::ProjectDeployKeys < Spinach::FeatureSteps
create(:deploy_keys_project, project: @second_project) create(:deploy_keys_project, project: @second_project)
end end
step 'public deploy key exists' do
create(:deploy_key, public: true)
end
step 'I click attach deploy key' do step 'I click attach deploy key' do
within '.available-keys' do within '.available-keys' do
click_link 'Enable' click_link 'Enable'
...@@ -50,4 +66,12 @@ class Spinach::Features::ProjectDeployKeys < Spinach::FeatureSteps ...@@ -50,4 +66,12 @@ class Spinach::Features::ProjectDeployKeys < Spinach::FeatureSteps
def deploy_key def deploy_key
@project.deploy_keys.last @project.deploy_keys.last
end end
def other_deploy_key
@second_project.deploy_keys.last
end
def public_deploy_key
DeployKey.are_public.last
end
end end
...@@ -111,6 +111,9 @@ FactoryGirl.define do ...@@ -111,6 +111,9 @@ FactoryGirl.define do
key do key do
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDmTillFzNTrrGgwaCKaSj+QCz81E6jBc/s9av0+3b1Hwfxgkqjl4nAK/OD2NjgyrONDTDfR8cRN4eAAy6nY8GLkOyYBDyuc5nTMqs5z3yVuTwf3koGm/YQQCmo91psZ2BgDFTor8SVEE5Mm1D1k3JDMhDFxzzrOtRYFPci9lskTJaBjpqWZ4E9rDTD2q/QZntCqbC3wE9uSemRQB5f8kik7vD/AD8VQXuzKladrZKkzkONCPWsXDspUitjM8HkQdOf0PsYn1CMUC1xKYbCxkg5TkEosIwGv6CoEArUrdu/4+10LVslq494mAvEItywzrluCLCnwELfW+h/m8UHoVhZ" "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDmTillFzNTrrGgwaCKaSj+QCz81E6jBc/s9av0+3b1Hwfxgkqjl4nAK/OD2NjgyrONDTDfR8cRN4eAAy6nY8GLkOyYBDyuc5nTMqs5z3yVuTwf3koGm/YQQCmo91psZ2BgDFTor8SVEE5Mm1D1k3JDMhDFxzzrOtRYFPci9lskTJaBjpqWZ4E9rDTD2q/QZntCqbC3wE9uSemRQB5f8kik7vD/AD8VQXuzKladrZKkzkONCPWsXDspUitjM8HkQdOf0PsYn1CMUC1xKYbCxkg5TkEosIwGv6CoEArUrdu/4+10LVslq494mAvEItywzrluCLCnwELfW+h/m8UHoVhZ"
end end
factory :another_deploy_key, class: 'DeployKey' do
end
end end
factory :invalid_key do factory :invalid_key do
......
...@@ -28,17 +28,32 @@ describe DeployKeysProject do ...@@ -28,17 +28,32 @@ describe DeployKeysProject do
let(:deploy_key) { subject.deploy_key } let(:deploy_key) { subject.deploy_key }
context "when the deploy key is only used by this project" do context "when the deploy key is only used by this project" do
it "destroys the deploy key" do context "when the deploy key is public" do
subject.destroy before do
deploy_key.update_attribute(:public, true)
end
expect { it "doesn't destroy the deploy key" do
deploy_key.reload subject.destroy
}.to raise_error(ActiveRecord::RecordNotFound)
expect {
deploy_key.reload
}.not_to raise_error(ActiveRecord::RecordNotFound)
end
end
context "when the deploy key is private" do
it "destroys the deploy key" do
subject.destroy
expect {
deploy_key.reload
}.to raise_error(ActiveRecord::RecordNotFound)
end
end end
end end
context "when the deploy key is used by more than one project" do context "when the deploy key is used by more than one project" do
let!(:other_project) { create(:project) } let!(:other_project) { create(:project) }
before do before do
......
...@@ -168,12 +168,11 @@ end ...@@ -168,12 +168,11 @@ end
# project_deploy_keys GET /:project_id/deploy_keys(.:format) deploy_keys#index # project_deploy_keys GET /:project_id/deploy_keys(.:format) deploy_keys#index
# POST /:project_id/deploy_keys(.:format) deploy_keys#create # POST /:project_id/deploy_keys(.:format) deploy_keys#create
# new_project_deploy_key GET /:project_id/deploy_keys/new(.:format) deploy_keys#new # new_project_deploy_key GET /:project_id/deploy_keys/new(.:format) deploy_keys#new
# edit_project_deploy_key GET /:project_id/deploy_keys/:id/edit(.:format) deploy_keys#edit
# project_deploy_key GET /:project_id/deploy_keys/:id(.:format) deploy_keys#show # project_deploy_key GET /:project_id/deploy_keys/:id(.:format) deploy_keys#show
# PUT /:project_id/deploy_keys/:id(.:format) deploy_keys#update
# DELETE /:project_id/deploy_keys/:id(.:format) deploy_keys#destroy # DELETE /:project_id/deploy_keys/:id(.:format) deploy_keys#destroy
describe Projects::DeployKeysController, 'routing' do describe Projects::DeployKeysController, 'routing' do
it_behaves_like 'RESTful project resources' do it_behaves_like 'RESTful project resources' do
let(:actions) { [:index, :show, :new, :create] }
let(:controller) { 'deploy_keys' } let(:controller) { 'deploy_keys' }
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment