Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compte Démo: planifie la ré-initialisation du compte de démo quotidiennement #1564

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions app/jobs/reinitialise_compte_demo_job.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# frozen_string_literal: true

class ReinitialiseCompteDemoJob < ApplicationJob
queue_as :default

def perform
logger.info 'création de la structure si nécessaire'
structure_demo = cree_structure_demo

logger.info "Recherche et nettoyage d'un compte de démo existant"
compte_demo = Compte.find_by(email: Eva::EMAIL_DEMO)
vide_compte compte_demo if compte_demo.present?

logger.info "S'assure qu'il y a un compte admin dans cette structure"
verifie_ou_cree_admin structure_demo

logger.info "Création d'un compte de démo vierge"
cree_compte_demo_vierge structure_demo
end

private

def cree_structure_demo
StructureLocale.where(nom: Eva::STRUCTURE_DEMO).first_or_create do |s|
s.type_structure = :autre
s.code_postal = '69003'
end
end

def vide_compte(compte)
Campagne.where(compte: compte).find_each do |campagne|
logger.info "destruction de la campagne #{campagne.libelle}"
Evaluation.where(campagne: campagne).find_each do |evaluation|
beneficiaire = evaluation.beneficiaire
evaluation.really_destroy!
beneficiaire.really_destroy! unless Evaluation.exists?(beneficiaire: beneficiaire)
end
campagne.really_destroy!
end
end

def verifie_ou_cree_admin(structure)
return if Compte.exists?(role: :admin, structure: structure)

logger.info 'Création du compte Admin'
Compte.create!(prenom: 'Alex', nom: 'Admin', role: :admin,
email: 'admin@eva.beta.gouv.fr',
statut_validation: :acceptee,
structure: structure, confirmed_at: Time.zone.now,
email_bienvenue_envoye: true,
password: SecureRandom.uuid)
end

def cree_compte_demo_vierge(structure_demo)
Compte.where(email: Eva::EMAIL_DEMO).first_or_create do |c|
assigne_champs_compte_demo c
c.structure = structure_demo
end
end

def assigne_champs_compte_demo(compte)
compte.prenom = 'Dominique'
compte.nom = 'Démo'
compte.role = :conseiller
compte.statut_validation = :acceptee
compte.confirmed_at = Time.zone.now
compte.cgu_acceptees = true
compte.email_bienvenue_envoye = true
compte.password = SecureRandom.uuid
end
end
1 change: 1 addition & 0 deletions app/lib/eva.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ module Eva
EMAIL_CONTACT = 'contact@eva.beta.gouv.fr'
EMAIL_SUPPORT = 'support@eva.beta.gouv.fr'
EMAIL_DEMO = 'demo@eva.beta.gouv.fr'
STRUCTURE_DEMO = 'Structure démo ANLCI'
LIEN_LIVESTORM = 'https://app.livestorm.co/eva-diagnostic-cptc/presentation-et-demonstration-eva-session?type=detailed'
LIEN_DEMANDE_ACCOMPAGNEMENT_ILLETTRISME = 'https://evabetagouv.typeform.com/to/oWr4IPEq'
end
4 changes: 4 additions & 0 deletions config/initializers/sidekiq.rb
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@
require 'sidekiq/web'
require 'sidekiq-scheduler/web'

Sidekiq.configure_server do |config|
config.logger = Sidekiq::Logger.new($stdout)
end
7 changes: 6 additions & 1 deletion config/sidekiq.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,15 @@
notification_admin_job:
cron: '0 9 * * 1'
class: NotificationAdminComptesEnAttenteJob
description: Notifie à l'administrateur toutes les semaines des comptes en attentes
description: Notifie à l'administrateur toutes les semaines des comptes en attentes
enabled: true
structure_assigne_region_job:
cron: '0 1 * * *'
class: Structure::AssigneRegionJob
description: Assigne les régions pour les structures sans région. (job exécuté chaque jour)
enabled: true
reinitialise_compte_demo_job:
cron: '0 2 * * *'
class: ReinitialiseCompteDemoJob
description: Efface les campagnes, évaluations et bénéficiaires du compte de démo (job exécuté chaque jour)
enabled: true
51 changes: 0 additions & 51 deletions lib/tasks/migration_donnees.rake
Original file line number Diff line number Diff line change
Expand Up @@ -32,55 +32,4 @@ namespace :migration_donnees do
end
logger.info "C'est fini"
end

def detruit_compte(compte, logger)
Campagne.where(compte: compte).find_each do |campagne|
logger.info "destruction de la campagne #{campagne.libelle}"
Evaluation.where(campagne: campagne).find_each(&:really_destroy!)
campagne.really_destroy!
end
logger.info "destruction du compte #{compte.email}"
compte.really_destroy!
end

def verifie_ou_cree_admin(structure, logger)
return if Compte.exists?(role: :admin, structure: structure)

logger.info 'Création du compte Admin'
Compte.create!(prenom: 'Alex', nom: 'Admin', role: :admin,
email: 'admin@eva.beta.gouv.fr',
statut_validation: :acceptee,
structure: structure, confirmed_at: Time.zone.now,
email_bienvenue_envoye: true,
password: SecureRandom.uuid)
end

desc '(re-)initialise le compte de démo'
task reinit_compte_demo: :environment do
logger = RakeLogger.logger
logger.info 'création de la structure si nécessaire'
structure_demo = StructureLocale.where(nom: 'Structure démo ANLCI').first_or_create do |s|
s.type_structure = :autre
s.code_postal = '69003'
end

logger.info "Recherche et suppression d'un compte de démo existant"
compte_demo = Compte.find_by(email: Eva::EMAIL_DEMO)
detruit_compte compte_demo, logger if compte_demo.present?

logger.info "S'assure qu'il y a un compte admin dans cette structure"
verifie_ou_cree_admin structure_demo, logger

logger.info "Création d'un compte de démo vierge"
Compte.create!(prenom: 'Dominique',
nom: 'Démo',
email: Eva::EMAIL_DEMO,
role: :conseiller,
statut_validation: :acceptee,
structure: structure_demo,
confirmed_at: Time.zone.now,
cgu_acceptees: true,
email_bienvenue_envoye: true,
password: SecureRandom.uuid)
end
end
1 change: 1 addition & 0 deletions spec/factories/compte.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
role { 'superadmin' }
statut_validation { :acceptee }
cgu_acceptees { true }
email_bienvenue_envoye { true }
structure factory: :structure_locale

trait :structure_avec_admin do
Expand Down
23 changes: 16 additions & 7 deletions spec/integrations/compte_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,12 @@
let!(:structure) { create :structure_locale }

it 'programme un mail de bienvenue' do
expect { create :compte_admin, structure: structure, confirmed_at: Time.zone.now }
.to have_enqueued_mail(CompteMailer, :nouveau_compte).exactly(1)
expect do
create :compte_admin,
structure: structure,
confirmed_at: Time.zone.now,
email_bienvenue_envoye: false
end.to have_enqueued_mail(CompteMailer, :nouveau_compte).exactly(1)
end

it "attend la validation de l'email pour envoyer les mails" do
Expand Down Expand Up @@ -58,7 +62,8 @@
create :compte_conseiller,
structure: structure,
statut_validation: :acceptee,
confirmed_at: Time.zone.now
confirmed_at: Time.zone.now,
email_bienvenue_envoye: false
end.to have_enqueued_mail(CompteMailer, :alerte_admin).exactly(0)
end

Expand All @@ -67,7 +72,8 @@
create :compte_conseiller,
structure: structure,
statut_validation: :en_attente,
confirmed_at: Time.zone.now
confirmed_at: Time.zone.now,
email_bienvenue_envoye: false
end.to have_enqueued_mail(CompteMailer, :alerte_admin).exactly(1)
end
end
Expand All @@ -80,7 +86,8 @@
expect do
create :compte_admin,
structure: structure,
confirmed_at: Time.zone.now
confirmed_at: Time.zone.now,
email_bienvenue_envoye: false
end.to have_enqueued_job(RelanceUtilisateurPourNonActivationJob).exactly(1)
end
end
Expand All @@ -92,7 +99,8 @@
expect do
create :compte_admin,
structure: structure,
confirmed_at: Time.zone.now
confirmed_at: Time.zone.now,
email_bienvenue_envoye: false
end.to have_enqueued_job(RelanceUtilisateurPourNonActivationJob).exactly(0)
end
end
Expand All @@ -102,7 +110,8 @@
expect do
create :compte_admin,
structure: nil,
confirmed_at: Time.zone.now
confirmed_at: Time.zone.now,
email_bienvenue_envoye: false
end.to have_enqueued_job(RelanceUtilisateurPourNonActivationJob).exactly(0)
end
end
Expand Down
49 changes: 49 additions & 0 deletions spec/jobs/reinitialise_compte_demo_job_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# frozen_string_literal: true

require 'rails_helper'

describe ReinitialiseCompteDemoJob, type: :job do
it "Créé la structure et le compte de démo si rien n'existe" do
ReinitialiseCompteDemoJob.perform_now

compte_demo = Compte.find_by(email: Eva::EMAIL_DEMO)
expect(compte_demo).not_to be_nil
expect(compte_demo.structure.nom).to eq(Eva::STRUCTURE_DEMO)
end

it 'Ne re-créé pas la structure si elle existe déjà' do
structure = create :structure_locale, nom: Eva::STRUCTURE_DEMO

ReinitialiseCompteDemoJob.perform_now

compte_demo = Compte.find_by(email: Eva::EMAIL_DEMO)
expect(compte_demo.structure).to eq(structure)
end

it "Ne re-créé pas l'admin de la structure s'il existe déjà" do
structure = create :structure_locale, nom: Eva::STRUCTURE_DEMO
create :compte_admin, structure: structure

ReinitialiseCompteDemoJob.perform_now

expect(Compte.where(role: :admin).count).to eq(1)
end

it 'Supprime les campagnes et les évaluations du compte de démo' do
structure = create :structure_locale, nom: Eva::STRUCTURE_DEMO
create :compte_admin, structure: structure
compte_existant = create :compte_conseiller, structure: structure, email: Eva::EMAIL_DEMO
campagne = create :campagne, compte: compte_existant
beneficiaire = create :beneficiaire, nom: 'nom'
create :evaluation, campagne: campagne, beneficiaire: beneficiaire
create :evaluation, campagne: campagne, beneficiaire: beneficiaire

ReinitialiseCompteDemoJob.perform_now

compte_demo = Compte.find_by(email: Eva::EMAIL_DEMO)
expect(compte_demo.id).to eq(compte_existant.id)
expect(Evaluation.count).to eq(0)
expect(Beneficiaire.count).to eq(0)
expect(Campagne.where(compte: compte_demo).count).to eq(0)
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
require 'rails_helper'

describe RelanceUtilisateurPourNonActivationJob, type: :job do
let(:compte) { create :compte_admin }
let(:compte) { create :compte_admin, email_bienvenue_envoye: false }

context "quand le compte n'a pas de campagne" do
it "envoie un email pour relancer l'utilisateur" do
Expand Down