From 96dd6bec524aef6c147442a299d7799401fdafe5 Mon Sep 17 00:00:00 2001 From: seb-by-ouidou Date: Sat, 30 Sep 2023 10:45:54 +0000 Subject: [PATCH] feat: US4.3 update and delete groupe gestionnaire --- app/models/groupe_gestionnaire.rb | 4 + .../groupe_gestionnaires_controller_spec.rb | 84 +++++++++++++++++++ 2 files changed, 88 insertions(+) diff --git a/app/models/groupe_gestionnaire.rb b/app/models/groupe_gestionnaire.rb index 31a30abfb..f0a4d26a8 100644 --- a/app/models/groupe_gestionnaire.rb +++ b/app/models/groupe_gestionnaire.rb @@ -26,4 +26,8 @@ class GroupeGestionnaire < ApplicationRecord def parent_name parent&.name end + + def can_be_deleted?(current_user) + (gestionnaires.empty? || (gestionnaires == [current_user]))&& administrateurs.empty? && children.empty? + end end diff --git a/spec/controllers/gestionnaires/groupe_gestionnaires_controller_spec.rb b/spec/controllers/gestionnaires/groupe_gestionnaires_controller_spec.rb index 63c57d385..8d377a9b3 100644 --- a/spec/controllers/gestionnaires/groupe_gestionnaires_controller_spec.rb +++ b/spec/controllers/gestionnaires/groupe_gestionnaires_controller_spec.rb @@ -110,4 +110,88 @@ describe Gestionnaires::GroupeGestionnairesController, type: :controller do it { expect(response).to redirect_to(gestionnaire_groupe_gestionnaires_path) } end end + + describe "#show" do + subject { get :show, params: { id: child_groupe_gestionnaire.id } } + let!(:groupe_gestionnaire_root) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire]) } + let!(:child_groupe_gestionnaire) { create(:groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire_root, gestionnaires: [gestionnaire]) } + + context "when not logged" do + before { subject } + it { expect(response).to redirect_to(new_user_session_path) } + end + + context "when logged in" do + before do + sign_in(gestionnaire.user) + subject + end + + it { expect(response).to have_http_status(:ok) } + it { expect(assigns(:groupe_gestionnaire)).to eq(child_groupe_gestionnaire) } + end + end + + describe "#edit" do + subject { get :edit, params: { id: child_groupe_gestionnaire.id } } + let!(:groupe_gestionnaire_root) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire]) } + let!(:child_groupe_gestionnaire) { create(:groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire_root, gestionnaires: [gestionnaire]) } + + context "when not logged" do + before { subject } + it { expect(response).to redirect_to(new_user_session_path) } + end + + context "when logged in" do + before do + sign_in(gestionnaire.user) + subject + end + + it { expect(response).to have_http_status(:ok) } + it { expect(assigns(:groupe_gestionnaire)).to eq(child_groupe_gestionnaire) } + end + end + + describe "#update" do + subject { post :update, params: { id: child_groupe_gestionnaire.id, groupe_gestionnaire: { name: 'new child name' } } } + let!(:groupe_gestionnaire_root) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire]) } + let!(:child_groupe_gestionnaire) { create(:groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire_root, gestionnaires: [gestionnaire]) } + + context "when not logged" do + before { subject } + it { expect(response).to redirect_to(new_user_session_path) } + end + + context "when logged in" do + before do + sign_in(gestionnaire.user) + subject + end + + it { expect(child_groupe_gestionnaire.reload.name).to eq('new child name') } + it { expect(response).to redirect_to(gestionnaire_groupe_gestionnaire_path(child_groupe_gestionnaire)) } + end + end + + describe "#destroy" do + subject { post :destroy, params: { id: child_groupe_gestionnaire.id } } + let!(:groupe_gestionnaire_root) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire]) } + let!(:child_groupe_gestionnaire) { create(:groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire_root, gestionnaires: [gestionnaire]) } + + context "when not logged" do + before { subject } + it { expect(response).to redirect_to(new_user_session_path) } + end + + context "when logged in" do + before do + sign_in(gestionnaire.user) + subject + end + + it { expect(GroupeGestionnaire.all.count).to eq(1) } + it { expect(response).to redirect_to(gestionnaire_groupe_gestionnaires_path) } + end + end end