From 56987e5147fbf037708e56c3ff2775808cc61d7d Mon Sep 17 00:00:00 2001 From: Pierre de La Morinerie Date: Tue, 3 Jul 2018 20:18:06 +0200 Subject: [PATCH] procedures: add tests for new_from_existing --- .../admin/procedures_controller.rb | 8 +++-- .../admin/procedures_controller_spec.rb | 30 +++++++++++++++++++ spec/factories/procedure.rb | 10 +++++++ 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/app/controllers/admin/procedures_controller.rb b/app/controllers/admin/procedures_controller.rb index ae08d5001..ac5cc6a9a 100644 --- a/app/controllers/admin/procedures_controller.rb +++ b/app/controllers/admin/procedures_controller.rb @@ -174,16 +174,18 @@ class Admin::ProceduresController < AdminController redirect_to admin_procedures_path end + SIGNIFICANT_DOSSIERS_THRESHOLD = 30 + def new_from_existing - procedures_with_more_than_30_dossiers_ids = Procedure + significant_procedure_ids = Procedure .publiees_ou_archivees .joins(:dossiers) .group("procedures.id") - .having("count(dossiers.id) > ?", 30) + .having("count(dossiers.id) >= ?", SIGNIFICANT_DOSSIERS_THRESHOLD) .pluck('procedures.id') @grouped_procedures = Procedure - .where(id: procedures_with_more_than_30_dossiers_ids) + .where(id: significant_procedure_ids) .group_by(&:administrateur) .sort_by { |a, _| a.created_at } end diff --git a/spec/controllers/admin/procedures_controller_spec.rb b/spec/controllers/admin/procedures_controller_spec.rb index 33819ca8a..6fe5ebcf2 100644 --- a/spec/controllers/admin/procedures_controller_spec.rb +++ b/spec/controllers/admin/procedures_controller_spec.rb @@ -525,6 +525,36 @@ describe Admin::ProceduresController, type: :controller do end end + describe 'GET #new_from_existing' do + before do + stub_const("Admin::ProceduresController::SIGNIFICANT_DOSSIERS_THRESHOLD", 2) + end + + subject { get :new_from_existing } + let(:grouped_procedures) { subject; assigns(:grouped_procedures) } + let(:response_procedures) { grouped_procedures.map{ |o, procedures| procedures }.flatten } + + describe 'selecting' do + let!(:large_draft_procedure) { create(:procedure_with_dossiers, dossiers_count: 2) } + let!(:large_published_procedure) { create(:procedure_with_dossiers, :published, dossiers_count: 2) } + let!(:large_archived_procedure) { create(:procedure_with_dossiers, :archived, dossiers_count: 2) } + let!(:small_archived_procedure) { create(:procedure_with_dossiers, :archived, dossiers_count: 1) } + + it 'displays published and archived procedures' do + expect(response_procedures).to include(large_published_procedure) + expect(response_procedures).to include(large_archived_procedure) + end + + it 'doesn’t display procedures without a significant number of dossiers' do + expect(response_procedures).not_to include(small_archived_procedure) + end + + it 'doesn’t display draft procedures' do + expect(response_procedures).not_to include(large_draft_procedure) + end + end + end + describe 'GET #path_list' do let!(:procedure) { create(:procedure, :published, administrateur: admin) } let(:admin2) { create(:administrateur) } diff --git a/spec/factories/procedure.rb b/spec/factories/procedure.rb index 79c0eb9e0..0e5b3c413 100644 --- a/spec/factories/procedure.rb +++ b/spec/factories/procedure.rb @@ -12,6 +12,16 @@ FactoryBot.define do duree_conservation_dossiers_dans_ds 3 duree_conservation_dossiers_hors_ds 6 + factory :procedure_with_dossiers do + transient do + dossiers_count 1 + end + + after(:build) do |procedure, _evaluator| + procedure.dossiers << create_list(:dossier, _evaluator.dossiers_count, procedure: procedure) + end + end + after(:build) do |procedure, _evaluator| if procedure.module_api_carto.nil? module_api_carto = create(:module_api_carto)