demarches-normaliennes/spec/system/instructeurs/expert_spec.rb

75 lines
3.3 KiB
Ruby
Raw Normal View History

describe 'Inviting an expert:', js: true do
include ActiveJob::TestHelper
include ActionView::Helpers
let(:instructeur) { create(:instructeur, password: 'my-s3cure-p4ssword') }
2021-02-28 22:20:24 +01:00
let(:expert) { create(:expert, password: expert_password) }
2021-03-18 13:53:05 +01:00
let(:expert2) { create(:expert, password: expert_password) }
let(:expert_password) { 'mot de passe dexpert' }
let(:procedure) { create(:procedure, :published, instructeurs: [instructeur]) }
let(:dossier) { create(:dossier, :en_construction, :with_dossier_link, procedure: procedure) }
let(:linked_dossier) { Dossier.find_by(id: dossier.reload.champs_public.filter(&:dossier_link?).filter_map(&:value)) }
before do
clear_emails
end
context 'as an Instructeur' do
scenario 'I can invite an expert' do
allow(ClamavService).to receive(:safe_file?).and_return(true)
# assign instructeur to linked dossier
2020-02-11 17:38:04 +01:00
instructeur.assign_to_procedure(linked_dossier.procedure)
login_as instructeur.user, scope: :user
visit instructeur_dossier_path(procedure, dossier)
click_on 'Avis externes'
expect(page).to have_current_path(avis_instructeur_dossier_path(procedure, dossier))
2023-03-17 11:30:20 +01:00
within('.fr-sidemenu') { click_on 'Demander un avis' }
expect(page).to have_current_path(avis_new_instructeur_dossier_path(procedure, dossier))
2021-03-30 17:55:35 +02:00
page.execute_script("document.querySelector('#avis_emails').value = '[\"#{expert.email}\",\"#{expert2.email}\"]'")
fill_in 'avis_introduction', with: 'Bonjour, merci de me donner votre avis sur ce dossier.'
check 'avis_invite_linked_dossiers'
page.select 'confidentiel', from: 'avis_confidentiel'
2023-03-17 11:30:20 +01:00
within('form#new_avis') { click_on 'Demander un avis' }
perform_enqueued_jobs
2021-05-26 15:16:30 +02:00
expect(page).to have_content('Une demande davis a été envoyée')
expect(page).to have_content('Avis des invités')
within('.list-avis') do
2021-03-18 13:53:05 +01:00
expect(page).to have_content(expert.email.to_s)
expect(page).to have_content(expert2.email.to_s)
expect(page).to have_content('Bonjour, merci de me donner votre avis sur ce dossier.')
end
expect(Avis.count).to eq(4)
2021-03-18 13:53:05 +01:00
expect(emails_sent_to(expert.email.to_s).size).to eq(1)
expect(emails_sent_to(expert2.email.to_s).size).to eq(1)
invitation_email = open_email(expert.email.to_s)
targeted_user_link = TargetedUserLink.joins(:user).where(user: { email: expert.email.to_s }).first
targeted_user_url = targeted_user_link_url(targeted_user_link)
expect(invitation_email.body).to include(targeted_user_url)
end
context 'when experts submitted their answer' do
let(:experts_procedure) { create(:experts_procedure, expert: expert, procedure: procedure) }
2021-02-28 22:20:24 +01:00
let!(:answered_avis) { create(:avis, :with_answer, dossier: dossier, claimant: instructeur, experts_procedure: experts_procedure) }
scenario 'I can read the expert answer' do
login_as instructeur.user, scope: :user
visit instructeur_dossier_path(procedure, dossier)
click_on 'Avis externes'
2021-02-28 22:20:24 +01:00
expect(page).to have_content(answered_avis.expert.email)
answered_avis.answer.split("\n").map { |line| line.gsub("- ", "") }.map do |answer_line|
expect(page).to have_content(answer_line)
end
end
end
end
end