Service: can be destroyed
This commit is contained in:
parent
af7be58132
commit
6b8a878ec1
4 changed files with 53 additions and 1 deletions
|
@ -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
|
||||
|
|
|
@ -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}" }
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue