diff --git a/app/controllers/experts/avis_controller.rb b/app/controllers/experts/avis_controller.rb index 7320afb24..56f10b2ca 100644 --- a/app/controllers/experts/avis_controller.rb +++ b/app/controllers/experts/avis_controller.rb @@ -13,7 +13,10 @@ module Experts DONNES_STATUS = 'donnes' def index - avis = current_expert.avis.not_revoked.not_termine.includes(dossier: [groupe_instructeur: :procedure]).not_hidden_by_administration + avis = current_expert.avis + .not_revoked + .includes(dossier: [groupe_instructeur: :procedure]) + .not_hidden_by_administration @avis_by_procedure = avis.to_a.group_by(&:procedure) end diff --git a/app/views/experts/avis/index.html.haml b/app/views/experts/avis/index.html.haml index 535c0e49d..b3a27f96d 100644 --- a/app/views/experts/avis/index.html.haml +++ b/app/views/experts/avis/index.html.haml @@ -5,7 +5,7 @@ %ul.procedure-list - @avis_by_procedure.each do |p, procedure_avis| - %li.procedure-item.flex.align-start.fr-my-3w.fr-p-2w + %li.procedure-item.flex.align-start.fr-my-3w.fr-p-2w{ id: dom_id(p) } .flex = link_to instructeur_procedure_path(p), class: 'procedure-logo-link' do .procedure-logo{ style: "background-image: url(#{p.logo_url})" } @@ -16,17 +16,17 @@ = link_to(p.libelle, procedure_expert_avis_index_path(p), class: "fr-link fr-ml-1w") %ul.procedure-stats.flex - %li + %li.avis-a-donner %object = link_to(procedure_expert_avis_index_path(p, statut: Instructeurs::AvisController::A_DONNER_STATUS)) do - - without_answer_count = procedure_avis.select { |a| a.answer.nil? }.size + - without_answer_count = procedure_avis.select { _1.answer.nil? }.reject{ _1.dossier.termine?}.size - if without_answer_count > 0 %span.notifications{ 'aria-label': "notifications" } .stats-number = without_answer_count .stats-legend avis à donner - %li + %li.avis-donne %object = link_to(procedure_expert_avis_index_path(p, statut: Instructeurs::AvisController::DONNES_STATUS)) do - with_answer_count = procedure_avis.select { |a| a.answer.present? }.size diff --git a/spec/controllers/experts/avis_controller_spec.rb b/spec/controllers/experts/avis_controller_spec.rb index c676f58f2..20873a21e 100644 --- a/spec/controllers/experts/avis_controller_spec.rb +++ b/spec/controllers/experts/avis_controller_spec.rb @@ -28,11 +28,34 @@ describe Experts::AvisController, type: :controller do end describe '#index' do - before { get :index } - it do - expect(response).to have_http_status(:success) - expect(assigns(:avis_by_procedure).keys).to match_array(procedure) - expect(assigns(:avis_by_procedure).values.flatten).to match_array([avis_without_answer, avis_with_answer]) + context 'nominal' do + before { get :index } + + it do + expect(response).to have_http_status(:success) + expect(assigns(:avis_by_procedure).keys).to match_array(procedure) + expect(assigns(:avis_by_procedure).values.flatten).to match_array([avis_without_answer, avis_with_answer]) + end + end + + context 'avis on termine dossier' do + let(:another_experts_procedure) { create(:experts_procedure, expert:, procedure: another_procedure) } + let(:dossier_termine) { create(:dossier, :accepte, procedure: another_procedure) } + let(:another_avis_without_answer) { create(:avis, claimant:, dossier: dossier_termine, experts_procedure: another_experts_procedure) } + let(:another_avis_with_answer) { create(:avis, claimant:, dossier: dossier_termine, experts_procedure: another_experts_procedure, answer: 'yop') } + + before do + another_experts_procedure + dossier_termine + another_avis_without_answer + another_avis_with_answer + get :index + end + + it do + expect(response).to have_http_status(:success) + expect(assigns(:avis_by_procedure).keys).to match_array([procedure, another_procedure]) + end end end diff --git a/spec/views/experts/avis/index.html.haml_spec.rb b/spec/views/experts/avis/index.html.haml_spec.rb index b7de4602e..54cd86c6f 100644 --- a/spec/views/experts/avis/index.html.haml_spec.rb +++ b/spec/views/experts/avis/index.html.haml_spec.rb @@ -17,6 +17,16 @@ describe 'experts/avis/index', type: :view do expect(subject).to have_text("avis à donner") end + context 'dossier is termine' do + before do + avis.dossier.update!(state: "accepte") + end + + it 'doesn’t count avis a donner when dossier is termine' do + expect(subject).to have_selector("##{dom_id(procedure)} .avis-a-donner .stats-number", text: 0) + end + end + context 'when the dossier is deleted by instructeur' do before do avis.dossier.update!(state: "accepte", hidden_by_administration_at: Time.zone.now.beginning_of_day.utc)