Merge pull request #10721 from demarches-simplifiees/feat/10671
ETQ admin la non divulgation d'email des instructeurs n'est plus sous feature flag
This commit is contained in:
commit
7bc43bd94b
11 changed files with 118 additions and 9 deletions
|
@ -15,6 +15,17 @@
|
|||
hint: "L’autogestion des instructeurs permet aux instructeurs de gérer eux-mêmes la liste des instructeurs de la démarche.#{ 'Nous recommandons de laisser l’autogestion des instructeurs activée.' if @procedure.routing_enabled? }",
|
||||
disabled: false)
|
||||
|
||||
%li
|
||||
= form_for @procedure,
|
||||
method: :patch,
|
||||
url: update_hide_instructeurs_email_admin_procedure_groupe_instructeurs_path(@procedure),
|
||||
data: { controller: 'autosubmit', turbo: 'true' } do |f|
|
||||
|
||||
= render Dsfr::ToggleComponent.new(form: f,
|
||||
target: :hide_instructeurs_email,
|
||||
title: "Anonymat des instructeurs",
|
||||
hint: "Permet de cacher l'adresse mail des instructeurs aux usagers lors de leurs interactions par le biais de la messagerie. Cette option est à activer pour les démarches sensibles.",
|
||||
disabled: false)
|
||||
%hr
|
||||
%p.fr-mt-2w Routage
|
||||
%p.fr-mt-2w= t('.routing_configuration_notice_1')
|
||||
|
|
|
@ -320,6 +320,13 @@ module Administrateurs
|
|||
notice: "L’autogestion des instructeurs est #{procedure.instructeurs_self_management_enabled? ? "activée" : "désactivée"}."
|
||||
end
|
||||
|
||||
def update_hide_instructeurs_email
|
||||
procedure.update!(hide_instructeurs_email_params)
|
||||
|
||||
redirect_to options_admin_procedure_groupe_instructeurs_path(procedure),
|
||||
notice: "L'anonymisation des instructeurs est #{procedure.hide_instructeurs_email? ? "activée" : "désactivée"}."
|
||||
end
|
||||
|
||||
def import
|
||||
if procedure.publiee_or_close?
|
||||
if !CSV_ACCEPTED_CONTENT_TYPES.include?(csv_file.content_type) && !CSV_ACCEPTED_CONTENT_TYPES.include?(marcel_content_type)
|
||||
|
@ -463,6 +470,10 @@ module Administrateurs
|
|||
params.require(:procedure).permit(:instructeurs_self_management_enabled)
|
||||
end
|
||||
|
||||
def hide_instructeurs_email_params
|
||||
params.require(:procedure).permit(:hide_instructeurs_email)
|
||||
end
|
||||
|
||||
def routing_enabled_params
|
||||
{ routing_enabled: params.require(:routing) == 'enable' }
|
||||
end
|
||||
|
|
|
@ -39,7 +39,7 @@ class Commentaire < ApplicationRecord
|
|||
|
||||
def redacted_email
|
||||
if sent_by_instructeur?
|
||||
if dossier.procedure.feature_enabled?(:hide_instructeur_email)
|
||||
if dossier.procedure.hide_instructeurs_email?
|
||||
"Instructeur n° #{instructeur.id}"
|
||||
else
|
||||
instructeur.email.split('@').first
|
||||
|
|
|
@ -31,7 +31,6 @@ features = [
|
|||
:expression_reguliere_type_de_champ,
|
||||
:gallery_demande,
|
||||
:groupe_instructeur_api_hack,
|
||||
:hide_instructeur_email,
|
||||
:sva,
|
||||
:switch_domain
|
||||
]
|
||||
|
|
|
@ -669,6 +669,7 @@ Rails.application.routes.draw do
|
|||
post 'create_simple_routing'
|
||||
delete 'destroy_all_groups_but_defaut'
|
||||
patch 'update_instructeurs_self_management_enabled'
|
||||
patch 'update_hide_instructeurs_email'
|
||||
post 'import'
|
||||
get 'export_groupe_instructeurs'
|
||||
end
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddHideInstructeurEmailToProcedures < ActiveRecord::Migration[7.0]
|
||||
def change
|
||||
add_column :procedures, :hide_instructeurs_email, :boolean, default: false, null: false
|
||||
end
|
||||
end
|
|
@ -942,6 +942,7 @@ ActiveRecord::Schema[7.0].define(version: 2024_08_29_141049) do
|
|||
t.boolean "for_tiers_enabled", default: true, null: false
|
||||
t.datetime "hidden_at", precision: nil
|
||||
t.datetime "hidden_at_as_template", precision: nil
|
||||
t.boolean "hide_instructeurs_email", default: false, null: false
|
||||
t.boolean "instructeurs_self_management_enabled", default: false
|
||||
t.boolean "juridique_required", default: true
|
||||
t.string "libelle"
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
namespace :after_party do
|
||||
desc 'Deployment task: backfill_hide_instructeurs_email'
|
||||
task backfill_hide_instructeurs_email: :environment do
|
||||
puts "Running deploy task 'backfill_hide_instructeurs_email'"
|
||||
|
||||
feature_name = "hide_instructeur_email"
|
||||
feature = Flipper.feature(feature_name)
|
||||
|
||||
gates = Flipper::Adapters::ActiveRecord::Gate
|
||||
.where(feature_key: feature.key, key: 'actors')
|
||||
|
||||
total_gates = gates.count
|
||||
progress = ProgressReport.new(total_gates)
|
||||
|
||||
puts 'Collecte des démarches avec le feature flag'
|
||||
|
||||
procedure_ids = gates.ids
|
||||
puts procedure_ids
|
||||
|
||||
progress.finish
|
||||
|
||||
puts progress
|
||||
|
||||
puts "Mise à jour des #{procedure_ids.size} démarches"
|
||||
update_progress = ProgressReport.new(procedure_ids.size)
|
||||
|
||||
Procedure.where(id: procedure_ids).in_batches(of: 500) do |batch|
|
||||
batch.update_all(hide_instructeurs_email: true)
|
||||
update_progress.inc(batch.size)
|
||||
puts update_progress
|
||||
end
|
||||
|
||||
update_progress.finish
|
||||
puts update_progress
|
||||
|
||||
puts "Suppression du feature flag '#{feature_name}'"
|
||||
Flipper.remove(feature_name)
|
||||
puts "Feature flag '#{feature_name}' supprimé avec succès"
|
||||
|
||||
AfterParty::TaskRecord
|
||||
.create version: AfterParty::TaskRecorder.new(__FILE__).timestamp
|
||||
end
|
||||
end
|
|
@ -42,13 +42,11 @@ RSpec.describe Dossiers::MessageComponent, type: :component do
|
|||
|
||||
context 'with an instructeur message' do
|
||||
let(:instructeur) { create(:instructeur) }
|
||||
let(:procedure) { create(:procedure) }
|
||||
let(:procedure) { create(:procedure, hide_instructeurs_email: true) }
|
||||
let(:commentaire) { create(:commentaire, instructeur: instructeur, body: 'Second message') }
|
||||
let(:dossier) { create(:dossier, :en_construction, commentaires: [commentaire], procedure: procedure) }
|
||||
|
||||
context 'on a procedure with anonymous instructeurs' do
|
||||
before { Flipper.enable(:hide_instructeur_email, procedure) }
|
||||
|
||||
context 'redacts the instructeur email' do
|
||||
it { is_expected.to have_text(commentaire.body) }
|
||||
it { is_expected.to have_text("Instructeur n° #{instructeur.id}") }
|
||||
|
@ -57,7 +55,7 @@ RSpec.describe Dossiers::MessageComponent, type: :component do
|
|||
end
|
||||
|
||||
context 'on a procedure where instructeurs names are not redacted' do
|
||||
before { Flipper.disable(:hide_instructeur_email, procedure) }
|
||||
let(:procedure) { create(:procedure, hide_instructeurs_email: false) }
|
||||
|
||||
context 'redacts the instructeur email but keeps the name' do
|
||||
it { is_expected.to have_text(commentaire.body) }
|
||||
|
|
|
@ -995,4 +995,41 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
|
|||
expect(gi_1_1.signature).to be_attached
|
||||
end
|
||||
end
|
||||
|
||||
describe '#update_hide_instructeurs_email' do
|
||||
let(:administrateur) { administrateurs(:default_admin) }
|
||||
let(:procedure) { create(:procedure, administrateurs: [administrateur]) }
|
||||
|
||||
before do
|
||||
sign_in(administrateur.user)
|
||||
end
|
||||
|
||||
context 'when activating hide_instructeurs_email' do
|
||||
it 'updates the procedure and redirects with correct notice' do
|
||||
patch :update_hide_instructeurs_email, params: {
|
||||
procedure_id: procedure.id,
|
||||
procedure: { hide_instructeurs_email: "1" }
|
||||
}
|
||||
|
||||
expect(procedure.reload.hide_instructeurs_email).to be true
|
||||
expect(response).to redirect_to(options_admin_procedure_groupe_instructeurs_path(procedure))
|
||||
expect(flash[:notice]).to eq("L'anonymisation des instructeurs est activée.")
|
||||
end
|
||||
end
|
||||
|
||||
context 'when deactivating hide_instructeurs_email' do
|
||||
let(:procedure) { create(:procedure, hide_instructeurs_email: true, administrateurs: [administrateur]) }
|
||||
|
||||
it 'updates the procedure and redirects with correct notice' do
|
||||
patch :update_hide_instructeurs_email, params: {
|
||||
procedure_id: procedure.id,
|
||||
procedure: { hide_instructeurs_email: "0" }
|
||||
}
|
||||
|
||||
expect(procedure.reload.hide_instructeurs_email).to be false
|
||||
expect(response).to redirect_to(options_admin_procedure_groupe_instructeurs_path(procedure))
|
||||
expect(flash[:notice]).to eq("L'anonymisation des instructeurs est désactivée.")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -51,7 +51,7 @@ describe Commentaire do
|
|||
describe "#redacted_email" do
|
||||
subject { commentaire.redacted_email }
|
||||
|
||||
let(:procedure) { create(:procedure) }
|
||||
let(:procedure) { create(:procedure, hide_instructeurs_email: false) }
|
||||
let(:dossier) { create(:dossier, procedure: procedure) }
|
||||
|
||||
context 'with a commentaire created by a instructeur' do
|
||||
|
@ -59,12 +59,11 @@ describe Commentaire do
|
|||
let(:commentaire) { build :commentaire, instructeur: instructeur, dossier: dossier }
|
||||
|
||||
context 'when the procedure shows instructeurs email' do
|
||||
before { Flipper.disable(:hide_instructeur_email, procedure) }
|
||||
it { is_expected.to eq 'some_user' }
|
||||
end
|
||||
|
||||
context 'when the procedure hides instructeurs email' do
|
||||
before { Flipper.enable(:hide_instructeur_email, procedure) }
|
||||
let(:procedure) { create(:procedure, hide_instructeurs_email: true) }
|
||||
it { is_expected.to eq "Instructeur n° #{instructeur.id}" }
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue