|
2769 | 2769 | end |
2770 | 2770 | end |
2771 | 2771 |
|
| 2772 | + describe 'GET #index with personnalisation values' do |
| 2773 | + render_views |
| 2774 | + |
| 2775 | + let(:user) { create(:user) } |
| 2776 | + let(:procedure) { create(:procedure, :published, types_de_champ_public: [{ type: :text, libelle: 'Titre' }]) } |
| 2777 | + let(:column) { procedure.personnalisable_columns.first } |
| 2778 | + |
| 2779 | + before do |
| 2780 | + Flipper.enable(:dossiers_list_personnalisation, user) |
| 2781 | + create(:dossiers_list_personnalisation, user:, procedure:, displayed_columns: [column]) |
| 2782 | + sign_in(user) |
| 2783 | + end |
| 2784 | + |
| 2785 | + def query_count |
| 2786 | + count = 0 |
| 2787 | + callback = -> (*) { count += 1 } |
| 2788 | + ActiveSupport::Notifications.subscribed(callback, 'sql.active_record') { get :index } |
| 2789 | + count |
| 2790 | + end |
| 2791 | + |
| 2792 | + it 'does not issue more queries as more dossiers are added (no N+1)' do |
| 2793 | + create_list(:dossier, 6, :en_construction, user:, procedure:, populate_champs: true) |
| 2794 | + baseline = query_count |
| 2795 | + |
| 2796 | + create_list(:dossier, 6, :en_construction, user:, procedure:, populate_champs: true) |
| 2797 | + expect(query_count).to be <= baseline + 3 |
| 2798 | + end |
| 2799 | + end |
| 2800 | + |
| 2801 | + describe 'GET #index with personnalisation values – multi-procedure N+1 guard' do |
| 2802 | + render_views |
| 2803 | + |
| 2804 | + let(:user) { create(:user) } |
| 2805 | + let(:procedure1) { create(:procedure, :published, types_de_champ_public: [{ type: :text, libelle: 'Titre' }]) } |
| 2806 | + let(:procedure2) { create(:procedure, :published, types_de_champ_public: [{ type: :text, libelle: 'Intitulé' }]) } |
| 2807 | + |
| 2808 | + before do |
| 2809 | + Flipper.enable(:dossiers_list_personnalisation, user) |
| 2810 | + create(:dossiers_list_personnalisation, user:, procedure: procedure1, displayed_columns: [procedure1.personnalisable_columns.first]) |
| 2811 | + create(:dossiers_list_personnalisation, user:, procedure: procedure2, displayed_columns: [procedure2.personnalisable_columns.first]) |
| 2812 | + sign_in(user) |
| 2813 | + end |
| 2814 | + |
| 2815 | + def query_count |
| 2816 | + count = 0 |
| 2817 | + callback = -> (*) { count += 1 } |
| 2818 | + ActiveSupport::Notifications.subscribed(callback, 'sql.active_record') { get :index } |
| 2819 | + count |
| 2820 | + end |
| 2821 | + |
| 2822 | + it 'does not issue more queries per dossier with multiple procedures (no N+1 on Column.find)' do |
| 2823 | + create_list(:dossier, 3, :en_construction, user:, procedure: procedure1, populate_champs: true) |
| 2824 | + create_list(:dossier, 3, :en_construction, user:, procedure: procedure2, populate_champs: true) |
| 2825 | + baseline = query_count |
| 2826 | + |
| 2827 | + create_list(:dossier, 3, :en_construction, user:, procedure: procedure1, populate_champs: true) |
| 2828 | + create_list(:dossier, 3, :en_construction, user:, procedure: procedure2, populate_champs: true) |
| 2829 | + expect(query_count).to be <= baseline + 3 |
| 2830 | + end |
| 2831 | + end |
| 2832 | + |
2772 | 2833 | private |
2773 | 2834 |
|
2774 | 2835 | def find_champ_by_stable_id(dossier, stable_id) |
|
0 commit comments