tests
This commit is contained in:
parent
328c2a8e3c
commit
81f5a5254b
16 changed files with 544 additions and 674 deletions
77
spec/features/experts/expert_spec.rb
Normal file
77
spec/features/experts/expert_spec.rb
Normal file
|
@ -0,0 +1,77 @@
|
|||
feature 'Inviting an expert:' do
|
||||
include ActiveJob::TestHelper
|
||||
include ActionView::Helpers
|
||||
|
||||
context 'as an invited Expert' do
|
||||
let(:expert) { create(:expert) }
|
||||
let(:instructeur) { create(:instructeur) }
|
||||
let(:procedure) { create(:procedure, :published, instructeurs: [instructeur]) }
|
||||
let(:experts_procedure) { ExpertsProcedure.create(expert: expert, procedure: procedure) }
|
||||
let(:dossier) { create(:dossier, :en_construction, :with_dossier_link, procedure: procedure) }
|
||||
let(:avis) { create(:avis, dossier: dossier, claimant: instructeur, experts_procedure: experts_procedure, confidentiel: true) }
|
||||
|
||||
context 'when I don’t already have an account' do
|
||||
scenario 'I can sign up' do
|
||||
visit sign_up_expert_avis_path(avis.dossier.procedure, avis, avis.expert.email)
|
||||
|
||||
expect(page).to have_field('Email', with: avis.expert.email, disabled: true)
|
||||
fill_in 'Mot de passe', with: 'This is a very complicated password !'
|
||||
click_on 'Créer un compte'
|
||||
|
||||
expect(page).to have_current_path(expert_all_avis_path)
|
||||
expect(page).to have_text('1 avis à donner')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when I already have an existing account' do
|
||||
before do
|
||||
avis.expert.user.update!(last_sign_in_at: Time.zone.now)
|
||||
avis.expert.user.reload
|
||||
end
|
||||
scenario 'I can sign in' do
|
||||
visit sign_up_expert_avis_path(avis.dossier.procedure, avis, avis.expert.email)
|
||||
|
||||
expect(page).to have_current_path(new_user_session_path)
|
||||
login_as avis.expert.user, scope: :user
|
||||
sign_in_with(avis.expert.email, 'This is a very complicated password !')
|
||||
click_on 'Passer en expert'
|
||||
expect(page).to have_current_path(expert_all_avis_path)
|
||||
expect(page).to have_text('1 avis à donner')
|
||||
end
|
||||
end
|
||||
|
||||
scenario 'I can give an answer' do
|
||||
avis # create avis
|
||||
login_as expert.user, scope: :user
|
||||
|
||||
visit expert_all_avis_path
|
||||
expect(page).to have_text('1 avis à donner')
|
||||
expect(page).to have_text('0 avis donnés')
|
||||
|
||||
click_on '1 avis à donner'
|
||||
click_on avis.dossier.user.email
|
||||
within('.tabs') { click_on 'Avis' }
|
||||
expect(page).to have_text("Demandeur : #{avis.claimant.email}")
|
||||
expect(page).to have_text('Cet avis est confidentiel')
|
||||
|
||||
fill_in 'avis_answer', with: 'Ma réponse d’expert : c’est un oui.'
|
||||
find('.attachment input[name="avis[piece_justificative_file]"]').attach_file(Rails.root + 'spec/fixtures/files/RIB.pdf')
|
||||
click_on 'Envoyer votre avis'
|
||||
|
||||
expect(page).to have_content('Votre réponse est enregistrée')
|
||||
expect(page).to have_content('Ma réponse d’expert : c’est un oui.')
|
||||
expect(page).to have_content('RIB.pdf')
|
||||
|
||||
within('.breadcrumbs') { click_on 'Avis' }
|
||||
expect(page).to have_text('0 avis à donner')
|
||||
expect(page).to have_text('1 avis donné')
|
||||
end
|
||||
|
||||
# TODO
|
||||
# scenario 'I can read other experts advices' do
|
||||
# end
|
||||
|
||||
# scenario 'I can invite other experts' do
|
||||
# end
|
||||
end
|
||||
end
|
|
@ -3,7 +3,7 @@ feature 'Inviting an expert:' do
|
|||
include ActionView::Helpers
|
||||
|
||||
let(:instructeur) { create(:instructeur, password: 'my-s3cure-p4ssword') }
|
||||
let(:expert) { create(:instructeur, password: expert_password) }
|
||||
let(:expert) { create(:expert, password: expert_password) }
|
||||
let(:expert_password) { 'mot de passe d’expert' }
|
||||
let(:procedure) { create(:procedure, :published, instructeurs: [instructeur]) }
|
||||
let(:dossier) { create(:dossier, :en_construction, :with_dossier_link, procedure: procedure) }
|
||||
|
@ -20,7 +20,7 @@ feature 'Inviting an expert:' do
|
|||
click_on 'Avis externes'
|
||||
expect(page).to have_current_path(avis_instructeur_dossier_path(procedure, dossier))
|
||||
|
||||
fill_in 'avis_emails', with: 'expert1@exemple.fr, expert2@exemple.fr'
|
||||
fill_in 'avis_emails', with: 'expert1@expert.com, expert2@expert.com'
|
||||
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'
|
||||
|
@ -31,23 +31,24 @@ feature 'Inviting an expert:' do
|
|||
expect(page).to have_content('Une demande d\'avis a été envoyée')
|
||||
expect(page).to have_content('Avis des invités')
|
||||
within('.list-avis') do
|
||||
expect(page).to have_content('expert1@exemple.fr')
|
||||
expect(page).to have_content('expert2@exemple.fr')
|
||||
expect(page).to have_content('expert1@expert.com')
|
||||
expect(page).to have_content('expert2@expert.com')
|
||||
expect(page).to have_content('Bonjour, merci de me donner votre avis sur ce dossier.')
|
||||
end
|
||||
|
||||
expect(Avis.count).to eq(4)
|
||||
expect(emails_sent_to('expert1@exemple.fr').size).to eq(1)
|
||||
expect(emails_sent_to('expert2@exemple.fr').size).to eq(1)
|
||||
expect(emails_sent_to('expert1@expert.com').size).to eq(1)
|
||||
expect(emails_sent_to('expert2@expert.com').size).to eq(1)
|
||||
|
||||
invitation_email = open_email('expert2@exemple.fr')
|
||||
avis = Avis.find_by(email: 'expert2@exemple.fr', dossier: dossier)
|
||||
sign_up_link = sign_up_instructeur_avis_path(avis.dossier.procedure, avis, avis.email)
|
||||
invitation_email = open_email('expert1@expert.com')
|
||||
avis = Avis.find_by(expert: expert.id)
|
||||
sign_up_link = sign_up_expert_avis_path(avis.dossier.procedure, avis, avis.expert.email)
|
||||
expect(invitation_email.body).to include(sign_up_link)
|
||||
end
|
||||
|
||||
context 'when experts submitted their answer' do
|
||||
let!(:answered_avis) { create(:avis, :with_answer, dossier: dossier, claimant: instructeur, email: expert.email) }
|
||||
let(:experts_procedure) { ExpertsProcedure.create(expert: expert, procedure: procedure) }
|
||||
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
|
||||
|
@ -55,80 +56,11 @@ feature 'Inviting an expert:' do
|
|||
|
||||
click_on 'Avis externes'
|
||||
|
||||
expect(page).to have_content(expert.email)
|
||||
expect(page).to have_content(answered_avis.expert.email)
|
||||
answered_avis.answer.split("\n").each do |answer_line|
|
||||
expect(page).to have_content(answer_line)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'as an invited Expert' do
|
||||
let(:avis_email) { expert.email }
|
||||
let(:avis) { create(:avis, dossier: dossier, claimant: instructeur, email: avis_email, confidentiel: true) }
|
||||
|
||||
context 'when I don’t already have an account' do
|
||||
let(:avis_email) { 'not-signed-up-expert@exemple.fr' }
|
||||
|
||||
scenario 'I can sign up' do
|
||||
visit sign_up_instructeur_avis_path(avis.dossier.procedure, avis, avis_email)
|
||||
|
||||
expect(page).to have_field('Email', with: avis_email, disabled: true)
|
||||
fill_in 'Mot de passe', with: 'This is a very complicated password !'
|
||||
click_on 'Créer un compte'
|
||||
|
||||
expect(page).to have_current_path(instructeur_all_avis_path)
|
||||
expect(page).to have_text('1 avis à donner')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when I already have an existing account' do
|
||||
let(:avis_email) { expert.email }
|
||||
|
||||
scenario 'I can sign in' do
|
||||
visit sign_up_instructeur_avis_path(avis.dossier.procedure, avis, avis_email)
|
||||
|
||||
expect(page).to have_current_path(new_user_session_path)
|
||||
sign_in_with(expert.email, expert_password)
|
||||
|
||||
expect(page).to have_current_path(instructeur_all_avis_path)
|
||||
expect(page).to have_text('1 avis à donner')
|
||||
end
|
||||
end
|
||||
|
||||
scenario 'I can give an answer' do
|
||||
avis # create avis
|
||||
login_as expert.user, scope: :user
|
||||
|
||||
visit instructeur_all_avis_path
|
||||
expect(page).to have_text('1 avis à donner')
|
||||
expect(page).to have_text('0 avis donnés')
|
||||
|
||||
click_on '1 avis à donner'
|
||||
click_on avis.dossier.user.email
|
||||
|
||||
within('.tabs') { click_on 'Avis' }
|
||||
expect(page).to have_text("Demandeur : #{instructeur.email}")
|
||||
expect(page).to have_text('Cet avis est confidentiel')
|
||||
|
||||
fill_in 'avis_answer', with: 'Ma réponse d’expert : c’est un oui.'
|
||||
find('.attachment input[name="avis[piece_justificative_file]"]').attach_file(Rails.root + 'spec/fixtures/files/RIB.pdf')
|
||||
click_on 'Envoyer votre avis'
|
||||
|
||||
expect(page).to have_content('Votre réponse est enregistrée')
|
||||
expect(page).to have_content('Ma réponse d’expert : c’est un oui.')
|
||||
expect(page).to have_content('RIB.pdf')
|
||||
|
||||
within('.new-header') { click_on 'Avis' }
|
||||
expect(page).to have_text('0 avis à donner')
|
||||
expect(page).to have_text('1 avis donné')
|
||||
end
|
||||
|
||||
# TODO
|
||||
# scenario 'I can read other experts advices' do
|
||||
# end
|
||||
|
||||
# scenario 'I can invite other experts' do
|
||||
# end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue