Commit ba077841 authored by Matija Čupić's avatar Matija Čupić

Add destroy functionality to save_multiple

parent c64181ce
......@@ -39,6 +39,7 @@ class Projects::VariablesController < Projects::ApplicationController
return head :bad_request unless @variables.all?(&:valid?)
@variables.each(&:save)
@variables_destroy.each(&:destroy)
head :ok
end
end
......@@ -75,10 +76,16 @@ class Projects::VariablesController < Projects::ApplicationController
end
def variables
@variables = variables_params[:variables].map do |variable_hash|
destroy, edit = variables_params[:variables].partition { |hash| hash[:_destroy] == 'true' }
@variables = initialize_or_update_variables_from_hash(edit)
@variables_destroy = initialize_or_update_variables_from_hash(destroy)
end
def initialize_or_update_variables_from_hash(hash)
hash.map do |variable_hash|
variable = project.variables.where(key: variable_hash[:key])
.first_or_initialize(variable_hash).present(current_user: current_user)
variable.assign_attributes(variable_hash) unless variable.new_record?
variable.assign_attributes(variable_hash.except(:_destroy)) unless variable.new_record?
variable
end
end
......
......@@ -110,5 +110,25 @@ describe Projects::VariablesController do
expect(response).to have_gitlab_http_status(:ok)
end
end
context 'with a deleted variable' do
subject do
post :save_multiple,
namespace_id: project.namespace.to_param, project_id: project,
variables: [{ key: variable.key, value: variable.value, _destroy: 'true' }],
format: :json
end
it 'destroys the variable' do
expect { subject }.to change { project.variables.count }.by(-1)
expect { variable.reload }.to raise_error ActiveRecord::RecordNotFound
end
it 'returns a successful response' do
subject
expect(response).to have_gitlab_http_status(:ok)
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