2017-09-25 14:57:55 +02:00
|
|
|
|
require 'spec_helper'
|
|
|
|
|
|
|
|
|
|
feature 'The gestionnaire part' do
|
2018-05-25 18:05:28 +02:00
|
|
|
|
include ActiveJob::TestHelper
|
|
|
|
|
|
2017-09-25 14:57:55 +02:00
|
|
|
|
let(:password) { 'secret_password' }
|
2018-11-08 17:14:24 +01:00
|
|
|
|
let!(:gestionnaire) { create(:gestionnaire, :with_trusted_device, password: password) }
|
2017-09-25 14:57:55 +02:00
|
|
|
|
|
|
|
|
|
let!(:procedure) { create(:procedure, :published, gestionnaires: [gestionnaire]) }
|
2018-08-28 14:10:55 +02:00
|
|
|
|
let!(:dossier) { create(:dossier, state: Dossier.states.fetch(:en_construction), procedure: procedure) }
|
2017-09-25 14:57:55 +02:00
|
|
|
|
|
2018-11-22 18:11:00 +01:00
|
|
|
|
context 'when the gestionnaire is also a user' do
|
|
|
|
|
let!(:user) { create(:user, email: gestionnaire.email, password: password) }
|
|
|
|
|
|
|
|
|
|
scenario 'a gestionnaire can fill a dossier' do
|
|
|
|
|
visit commencer_path(path: procedure.path)
|
2019-01-16 11:57:58 +01:00
|
|
|
|
click_on 'J’ai déjà un compte'
|
2018-11-22 18:11:00 +01:00
|
|
|
|
|
|
|
|
|
expect(page).to have_current_path new_user_session_path
|
|
|
|
|
sign_in_with(gestionnaire.email, password, true)
|
|
|
|
|
|
2019-01-16 16:16:15 +01:00
|
|
|
|
expect(page).to have_current_path(commencer_path(path: procedure.path))
|
|
|
|
|
click_on 'Commencer la démarche'
|
|
|
|
|
|
|
|
|
|
expect(page).to have_content('Identifier votre établissement')
|
2019-01-16 11:57:58 +01:00
|
|
|
|
expect(page).to have_current_path(siret_dossier_path(procedure.reload.dossiers.last))
|
2018-11-22 18:11:00 +01:00
|
|
|
|
expect(page).to have_content(procedure.libelle)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2018-09-13 17:13:09 +02:00
|
|
|
|
scenario 'A gestionnaire can accept a dossier', :js do
|
2017-09-25 14:57:55 +02:00
|
|
|
|
log_in(gestionnaire.email, password)
|
|
|
|
|
|
2018-02-21 15:06:21 +01:00
|
|
|
|
expect(page).to have_current_path(gestionnaire_procedures_path)
|
2017-09-25 14:57:55 +02:00
|
|
|
|
|
|
|
|
|
click_on procedure.libelle
|
2018-02-21 14:50:52 +01:00
|
|
|
|
expect(page).to have_current_path(gestionnaire_procedure_path(procedure))
|
2017-09-25 14:57:55 +02:00
|
|
|
|
|
|
|
|
|
click_on dossier.user.email
|
2018-02-21 14:40:41 +01:00
|
|
|
|
expect(page).to have_current_path(gestionnaire_dossier_path(procedure, dossier))
|
2017-09-25 14:57:55 +02:00
|
|
|
|
|
2018-09-13 17:13:09 +02:00
|
|
|
|
click_on 'En construction'
|
|
|
|
|
accept_confirm do
|
|
|
|
|
click_on 'Passer en instruction'
|
|
|
|
|
end
|
|
|
|
|
expect(page).to have_text('En instruction')
|
|
|
|
|
|
2017-09-25 14:57:55 +02:00
|
|
|
|
dossier.reload
|
2018-08-28 14:10:55 +02:00
|
|
|
|
expect(dossier.state).to eq(Dossier.states.fetch(:en_instruction))
|
2017-09-25 14:57:55 +02:00
|
|
|
|
|
2018-09-13 17:13:09 +02:00
|
|
|
|
click_on 'En instruction'
|
|
|
|
|
|
|
|
|
|
within('.dropdown-items') do
|
|
|
|
|
click_on 'Accepter'
|
|
|
|
|
end
|
|
|
|
|
|
2017-11-29 11:47:18 +01:00
|
|
|
|
within('.accept.motivation') do
|
|
|
|
|
fill_in('dossier_motivation', with: 'a good reason')
|
2018-09-13 17:13:09 +02:00
|
|
|
|
|
|
|
|
|
accept_confirm do
|
|
|
|
|
click_on 'Valider la décision'
|
|
|
|
|
end
|
2017-11-29 11:47:18 +01:00
|
|
|
|
end
|
2017-09-25 14:57:55 +02:00
|
|
|
|
|
2018-09-13 17:13:09 +02:00
|
|
|
|
expect(page).to have_text('Dossier traité avec succès.')
|
|
|
|
|
|
2017-09-25 14:57:55 +02:00
|
|
|
|
dossier.reload
|
2018-08-28 14:10:55 +02:00
|
|
|
|
expect(dossier.state).to eq(Dossier.states.fetch(:accepte))
|
2017-09-25 14:57:55 +02:00
|
|
|
|
expect(dossier.motivation).to eq('a good reason')
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
scenario 'A gestionnaire can follow/unfollow a dossier' do
|
|
|
|
|
log_in(gestionnaire.email, password)
|
|
|
|
|
|
|
|
|
|
click_on procedure.libelle
|
|
|
|
|
test_statut_bar(a_suivre: 1, tous_les_dossiers: 1)
|
|
|
|
|
dossier_present?(dossier.id, 'en construction')
|
|
|
|
|
|
2017-10-05 19:21:21 +02:00
|
|
|
|
click_on 'Suivre le dossier'
|
2018-02-21 14:50:52 +01:00
|
|
|
|
expect(page).to have_current_path(gestionnaire_procedure_path(procedure))
|
2017-09-25 14:57:55 +02:00
|
|
|
|
test_statut_bar(suivi: 1, tous_les_dossiers: 1)
|
|
|
|
|
expect(page).to have_text('Aucun dossier')
|
|
|
|
|
|
|
|
|
|
click_on 'suivi'
|
2018-02-21 14:50:52 +01:00
|
|
|
|
expect(page).to have_current_path(gestionnaire_procedure_path(procedure, statut: 'suivis'))
|
2017-09-25 14:57:55 +02:00
|
|
|
|
dossier_present?(dossier.id, 'en construction')
|
|
|
|
|
|
2017-10-05 19:21:21 +02:00
|
|
|
|
click_on 'Ne plus suivre'
|
2018-02-21 14:50:52 +01:00
|
|
|
|
expect(page).to have_current_path(gestionnaire_procedure_path(procedure, statut: 'suivis'))
|
2017-09-25 14:57:55 +02:00
|
|
|
|
test_statut_bar(a_suivre: 1, tous_les_dossiers: 1)
|
|
|
|
|
expect(page).to have_text('Aucun dossier')
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
scenario 'A gestionnaire can use avis' do
|
|
|
|
|
log_in(gestionnaire.email, password)
|
|
|
|
|
|
|
|
|
|
click_on procedure.libelle
|
|
|
|
|
click_on dossier.user.email
|
|
|
|
|
|
2017-10-05 15:39:41 +02:00
|
|
|
|
click_on 'Avis externes'
|
2018-02-21 13:42:11 +01:00
|
|
|
|
expect(page).to have_current_path(avis_gestionnaire_dossier_path(procedure, dossier))
|
2017-09-25 14:57:55 +02:00
|
|
|
|
|
|
|
|
|
expert_email = 'expert@tps.com'
|
2018-05-25 18:05:28 +02:00
|
|
|
|
|
|
|
|
|
perform_enqueued_jobs do
|
|
|
|
|
ask_confidential_avis(expert_email, 'a good introduction')
|
|
|
|
|
end
|
2017-09-25 14:57:55 +02:00
|
|
|
|
|
|
|
|
|
log_out
|
|
|
|
|
|
|
|
|
|
avis = dossier.avis.first
|
2018-02-21 13:42:12 +01:00
|
|
|
|
test_mail(expert_email, sign_up_gestionnaire_avis_path(avis, expert_email))
|
2017-09-25 14:57:55 +02:00
|
|
|
|
|
2018-12-24 17:56:04 +01:00
|
|
|
|
avis_sign_up(avis, expert_email)
|
2017-09-25 14:57:55 +02:00
|
|
|
|
|
2018-02-21 15:45:21 +01:00
|
|
|
|
expect(page).to have_current_path(gestionnaire_avis_index_path)
|
2017-09-25 14:57:55 +02:00
|
|
|
|
expect(page).to have_text('avis à donner 1')
|
|
|
|
|
expect(page).to have_text('avis donnés 0')
|
|
|
|
|
|
|
|
|
|
click_on dossier.user.email
|
2018-02-21 15:19:04 +01:00
|
|
|
|
expect(page).to have_current_path(gestionnaire_avis_path(dossier.avis.first))
|
2017-09-25 14:57:55 +02:00
|
|
|
|
|
2017-10-06 10:17:14 +02:00
|
|
|
|
within(:css, '.tabs') do
|
|
|
|
|
click_on 'Avis'
|
|
|
|
|
end
|
2018-02-21 13:42:12 +01:00
|
|
|
|
expect(page).to have_current_path(instruction_gestionnaire_avis_path(dossier.avis.first))
|
2017-09-25 14:57:55 +02:00
|
|
|
|
|
|
|
|
|
within(:css, '.give-avis') do
|
|
|
|
|
expect(page).to have_text("Demandeur : #{gestionnaire.email}")
|
|
|
|
|
expect(page).to have_text('a good introduction')
|
|
|
|
|
expect(page).to have_text('Cet avis est confidentiel')
|
|
|
|
|
fill_in 'avis_answer', with: 'a great answer'
|
|
|
|
|
click_on 'Envoyer votre avis'
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
log_out
|
|
|
|
|
|
2018-10-03 11:11:02 +02:00
|
|
|
|
log_in(gestionnaire.email, password, check_email: false)
|
2017-09-25 14:57:55 +02:00
|
|
|
|
|
|
|
|
|
click_on procedure.libelle
|
|
|
|
|
click_on dossier.user.email
|
2017-10-06 10:17:14 +02:00
|
|
|
|
click_on 'Avis externes'
|
2017-09-25 14:57:55 +02:00
|
|
|
|
|
|
|
|
|
expect(page).to have_text('a great answer')
|
|
|
|
|
end
|
|
|
|
|
|
2017-12-01 15:03:19 +01:00
|
|
|
|
scenario 'A gestionnaire can see the personnes impliquées' do
|
2018-01-23 17:15:42 +01:00
|
|
|
|
gestionnaire2 = FactoryBot.create(:gestionnaire, password: password)
|
2017-12-01 15:03:19 +01:00
|
|
|
|
|
|
|
|
|
log_in(gestionnaire.email, password)
|
|
|
|
|
|
|
|
|
|
click_on procedure.libelle
|
|
|
|
|
click_on dossier.user.email
|
|
|
|
|
|
|
|
|
|
click_on 'Avis externes'
|
2018-02-21 13:42:11 +01:00
|
|
|
|
expect(page).to have_current_path(avis_gestionnaire_dossier_path(procedure, dossier))
|
2017-12-01 15:03:19 +01:00
|
|
|
|
|
|
|
|
|
expert_email = 'expert@tps.com'
|
|
|
|
|
ask_confidential_avis(expert_email, 'a good introduction')
|
|
|
|
|
|
|
|
|
|
expert_email = gestionnaire2.email
|
|
|
|
|
ask_confidential_avis(expert_email, 'a good introduction')
|
|
|
|
|
|
|
|
|
|
click_on 'Personnes impliquées'
|
|
|
|
|
expect(page).to have_text(expert_email)
|
|
|
|
|
expect(page).to have_text(gestionnaire2.email)
|
|
|
|
|
end
|
|
|
|
|
|
2018-09-10 17:52:49 +02:00
|
|
|
|
scenario 'A gestionnaire can send a dossier to several instructeurs', js: true do
|
|
|
|
|
instructeur_2 = FactoryBot.create(:gestionnaire)
|
|
|
|
|
instructeur_3 = FactoryBot.create(:gestionnaire)
|
|
|
|
|
procedure.gestionnaires << [instructeur_2, instructeur_3]
|
|
|
|
|
|
|
|
|
|
send_dossier = double()
|
|
|
|
|
expect(GestionnaireMailer).to receive(:send_dossier).and_return(send_dossier).twice
|
|
|
|
|
expect(send_dossier).to receive(:deliver_later).twice
|
|
|
|
|
|
|
|
|
|
log_in(gestionnaire.email, password)
|
|
|
|
|
|
|
|
|
|
click_on procedure.libelle
|
|
|
|
|
click_on dossier.user.email
|
|
|
|
|
|
|
|
|
|
click_on 'Personnes impliquées'
|
|
|
|
|
|
|
|
|
|
first('.select2-container', minimum: 1).click
|
|
|
|
|
find('li.select2-results__option[role="treeitem"]', text: instructeur_2.email).click
|
|
|
|
|
first('.select2-container', minimum: 1).click
|
|
|
|
|
find('li.select2-results__option[role="treeitem"]', text: instructeur_3.email).click
|
|
|
|
|
|
|
|
|
|
click_on 'Envoyer'
|
|
|
|
|
|
|
|
|
|
expect(page).to have_text("Dossier envoyé")
|
|
|
|
|
end
|
|
|
|
|
|
2018-10-03 11:11:02 +02:00
|
|
|
|
def log_in(email, password, check_email: true)
|
2017-09-25 14:57:55 +02:00
|
|
|
|
visit '/'
|
|
|
|
|
click_on 'Connexion'
|
|
|
|
|
expect(page).to have_current_path(new_user_session_path)
|
|
|
|
|
|
2018-10-03 11:11:02 +02:00
|
|
|
|
sign_in_with(email, password, check_email)
|
|
|
|
|
|
2018-02-21 15:06:21 +01:00
|
|
|
|
expect(page).to have_current_path(gestionnaire_procedures_path)
|
2017-09-25 14:57:55 +02:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def log_out
|
|
|
|
|
click_on 'Se déconnecter'
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def ask_confidential_avis(to, introduction)
|
2018-10-31 16:09:11 +01:00
|
|
|
|
fill_in 'avis_emails', with: to
|
2017-09-25 14:57:55 +02:00
|
|
|
|
fill_in 'avis_introduction', with: introduction
|
|
|
|
|
select 'confidentiel', from: 'avis_confidentiel'
|
|
|
|
|
click_on 'Demander un avis'
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def test_mail(to, content)
|
2018-10-03 11:11:02 +02:00
|
|
|
|
mail = ActionMailer::Base.deliveries.last
|
2017-09-25 14:57:55 +02:00
|
|
|
|
expect(mail.to).to match([to])
|
2018-06-10 11:53:51 +02:00
|
|
|
|
expect(mail.body.parts.map(&:to_s)).to all(include(content))
|
2017-09-25 14:57:55 +02:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def test_statut_bar(a_suivre: 0, suivi: 0, traite: 0, tous_les_dossiers: 0, archive: 0)
|
|
|
|
|
texts = [
|
|
|
|
|
"à suivre #{a_suivre}",
|
|
|
|
|
"suivi #{suivi}",
|
|
|
|
|
"traité #{traite}",
|
|
|
|
|
"tous les dossiers #{tous_les_dossiers}",
|
2018-01-15 19:17:01 +01:00
|
|
|
|
"archivé #{archive}"
|
|
|
|
|
]
|
2017-09-25 14:57:55 +02:00
|
|
|
|
|
|
|
|
|
texts.each { |text| expect(page).to have_text(text) }
|
|
|
|
|
end
|
|
|
|
|
|
2018-12-24 17:56:04 +01:00
|
|
|
|
def avis_sign_up(avis, email)
|
2018-02-21 13:42:12 +01:00
|
|
|
|
visit sign_up_gestionnaire_avis_path(avis, email)
|
2017-09-25 14:57:55 +02:00
|
|
|
|
fill_in 'gestionnaire_password', with: 'a good password'
|
|
|
|
|
click_on 'Créer un compte'
|
2018-02-21 15:45:21 +01:00
|
|
|
|
expect(page).to have_current_path(gestionnaire_avis_index_path)
|
2017-09-25 14:57:55 +02:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def dossier_present?(id, statut)
|
|
|
|
|
within(:css, '.dossiers-table') do
|
|
|
|
|
expect(page).to have_text(id)
|
|
|
|
|
expect(page).to have_text(statut)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|