Service: can be destroyed

This commit is contained in:
simon lehericey 2018-04-23 15:32:27 +02:00
parent af7be58132
commit 6b8a878ec1
4 changed files with 53 additions and 1 deletions

View file

@ -47,6 +47,24 @@ module NewAdministrateur
notice: "service affecté : #{procedure.service.nom}"
end
def destroy
service_to_destroy = service
if service_to_destroy.procedures.present?
if service_to_destroy.procedures.count == 1
message = "la procédure #{service_to_destroy.procedures.first.libelle} utilise encore le service #{service_to_destroy.nom}. Veuillez l'affecter à un autre service avant de pouvoir le supprimer"
else
message = "les procédures #{service_to_destroy.procedures.map(&:libelle).join(', ')} utilisent encore le service #{service.nom}. Veuillez les affecter à un autre service avant de pouvoir le supprimer"
end
flash[:alert] = message
redirect_to services_path(procedure_id: params[:procedure_id])
else
service_to_destroy.destroy
redirect_to services_path(procedure_id: params[:procedure_id]),
notice: "#{service_to_destroy.nom} est supprimé"
end
end
private
def service_params

View file

@ -28,3 +28,7 @@
= service.nom
%td.change
= link_to('modifier', edit_service_path(service, procedure_id: params[:procedure_id]))
= link_to 'supprimer',
service_path(service, procedure_id: params[:procedure_id]),
method: :delete,
data: { confirm: "Confirmez vous la suppression de #{service.nom}" }

View file

@ -287,7 +287,7 @@ Rails.application.routes.draw do
end
end
resources :services, except: [:destroy, :show] do
resources :services, except: [:show] do
collection do
patch 'add_to_procedure'
end

View file

@ -94,4 +94,34 @@ describe NewAdministrateur::ServicesController, type: :controller do
it { expect { post_add_to_procedure }.to raise_error(ActiveRecord::RecordNotFound) }
end
end
describe '#destroy' do
let!(:service) { create(:service, administrateur: admin) }
context 'when a service has no related procedure' do
before do
sign_in admin
delete :destroy, params: { id: service.id, procedure_id: 12 }
end
it { expect{ service.reload }.to raise_error(ActiveRecord::RecordNotFound) }
it { expect(flash.alert).to be_nil }
it { expect(flash.notice).to eq("#{service.nom} est supprimé") }
it { expect(response).to redirect_to(services_path(procedure_id: 12)) }
end
context 'when a service still has some related procedures' do
let!(:procedure) { create(:procedure, service: service) }
before do
sign_in admin
delete :destroy, params: { id: service.id, procedure_id: 12 }
end
it { expect(service.reload).not_to be_nil }
it { expect(flash.alert).to eq("la procédure #{procedure.libelle} utilise encore le service service. Veuillez l'affecter à un autre service avant de pouvoir le supprimer") }
it { expect(flash.notice).to be_nil }
it { expect(response).to redirect_to(services_path(procedure_id: 12)) }
end
end
end