Commit bfc8ded1 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge branch 'last-deploy-key' into 'master'

Delete deploy key when last connection to a project is destroyed.

Addresses #1959.

See merge request !1710
parents 9162e34b 7d2b34bd
......@@ -75,6 +75,7 @@ v 7.9.0 (unreleased)
- Use same layout and interactivity for project members as group members.
- Prevent gitlab-shell character encoding issues by receiving its changes as raw data.
- Ability to unsubscribe/subscribe to issue or merge request
- Delete deploy key when last connection to a project is destroyed.
v 7.8.4
- Fix issue_tracker_id substitution in custom issue trackers
......
......@@ -37,7 +37,7 @@ class Projects::DeployKeysController < Projects::ApplicationController
@key.destroy
respond_to do |format|
format.html { redirect_to project_deploy_keys_url }
format.html { redirect_to namespace_project_deploy_keys_path(@project.namespace, @project) }
format.js { render nothing: true }
end
end
......@@ -50,7 +50,7 @@ class Projects::DeployKeysController < Projects::ApplicationController
end
def disable
@project.deploy_keys_projects.where(deploy_key_id: params[:id]).last.destroy
@project.deploy_keys_projects.find_by(deploy_key_id: params[:id]).destroy
redirect_to namespace_project_deploy_keys_path(@project.namespace,
@project)
......
......@@ -16,4 +16,12 @@ class DeployKeysProject < ActiveRecord::Base
validates :deploy_key_id, presence: true
validates :deploy_key_id, uniqueness: { scope: [:project_id], message: "already exists in project" }
validates :project_id, presence: true
after_destroy :destroy_orphaned_deploy_key
private
def destroy_orphaned_deploy_key
self.deploy_key.destroy if self.deploy_key.deploy_keys_projects.length == 0
end
end
......@@ -21,4 +21,37 @@ describe DeployKeysProject do
it { is_expected.to validate_presence_of(:project_id) }
it { is_expected.to validate_presence_of(:deploy_key_id) }
end
describe "Destroying" do
let(:project) { create(:project) }
subject { create(:deploy_keys_project, project: project) }
let(:deploy_key) { subject.deploy_key }
context "when the deploy key is only used by this project" do
it "destroys the deploy key" do
subject.destroy
expect {
deploy_key.reload
}.to raise_error(ActiveRecord::RecordNotFound)
end
end
context "when the deploy key is used by more than one project" do
let!(:other_project) { create(:project) }
before do
other_project.deploy_keys << deploy_key
end
it "doesn't destroy the deploy key" do
subject.destroy
expect {
deploy_key.reload
}.not_to raise_error(ActiveRecord::RecordNotFound)
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