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 ...@@ -39,6 +39,7 @@ class Projects::VariablesController < Projects::ApplicationController
return head :bad_request unless @variables.all?(&:valid?) return head :bad_request unless @variables.all?(&:valid?)
@variables.each(&:save) @variables.each(&:save)
@variables_destroy.each(&:destroy)
head :ok head :ok
end end
end end
...@@ -75,10 +76,16 @@ class Projects::VariablesController < Projects::ApplicationController ...@@ -75,10 +76,16 @@ class Projects::VariablesController < Projects::ApplicationController
end end
def variables 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]) variable = project.variables.where(key: variable_hash[:key])
.first_or_initialize(variable_hash).present(current_user: current_user) .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 variable
end end
end end
......
...@@ -110,5 +110,25 @@ describe Projects::VariablesController do ...@@ -110,5 +110,25 @@ describe Projects::VariablesController do
expect(response).to have_gitlab_http_status(:ok) expect(response).to have_gitlab_http_status(:ok)
end end
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
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