Merge pull request #2326 from betagouv/improve-test-reliability-again

Améliore la fiabilité des tests Capybara
This commit is contained in:
Pierre de La Morinerie 2018-08-07 14:41:13 +02:00 committed by GitHub
commit 54bfb3ec98
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 60 additions and 48 deletions

View file

@ -1,4 +1,4 @@
#publish-modal.modal.fade{ "aria-labelledby" => "myModalLabel", :role => "dialog", :tabindex => "-1" } #publish-modal.modal{ "aria-labelledby" => "myModalLabel", :role => "dialog", :tabindex => "-1" }
.modal-dialog.modal-lg{ :role => "document" } .modal-dialog.modal-lg{ :role => "document" }
= form_tag admin_procedure_publish_path(procedure_id: @procedure.id), method: :put, remote: true do = form_tag admin_procedure_publish_path(procedure_id: @procedure.id), method: :put, remote: true do
.modal-content .modal-content

View file

@ -13,95 +13,107 @@ feature 'As an administrateur I wanna create a new procedure', js: true do
context 'Right after sign_in I shall see all procedure states links' do context 'Right after sign_in I shall see all procedure states links' do
scenario 'Finding draft procedures' do scenario 'Finding draft procedures' do
page.find_by_id('draft-procedures').click click_on 'draft-procedures'
expect(page).to have_current_path(admin_procedures_draft_path) expect(page).to have_current_path(admin_procedures_draft_path)
end end
scenario 'Finding active procedures' do scenario 'Finding active procedures' do
page.find_by_id('active-procedures').click click_on 'active-procedures'
expect(page).to have_current_path(admin_procedures_path) expect(page).to have_current_path(admin_procedures_path)
end end
scenario 'Finding archived procedures' do scenario 'Finding archived procedures' do
page.find_by_id('archived-procedures').click click_on 'archived-procedures'
expect(page).to have_current_path(admin_procedures_archived_path) expect(page).to have_current_path(admin_procedures_archived_path)
end end
end end
context 'Creating a new procedure' do context 'Creating a new procedure' do
scenario 'Finding new procedure link' do
page.find_by_id('new-procedure').click
page.find_by_id('from-scratch').click
expect(page).to have_current_path(new_admin_procedure_path)
end
scenario 'Finding save button for new procedure, libelle, description and cadre_juridique required' do scenario 'Finding save button for new procedure, libelle, description and cadre_juridique required' do
page.find_by_id('new-procedure').click expect(page).to have_selector('#new-procedure')
page.find_by_id('from-scratch').click find('#new-procedure').click
click_on 'from-scratch'
expect(page).to have_current_path(new_admin_procedure_path)
fill_in 'procedure_duree_conservation_dossiers_dans_ds', with: '3' fill_in 'procedure_duree_conservation_dossiers_dans_ds', with: '3'
fill_in 'procedure_duree_conservation_dossiers_hors_ds', with: '6' fill_in 'procedure_duree_conservation_dossiers_hors_ds', with: '6'
page.find_by_id('save-procedure').click click_on 'save-procedure'
page.find_by_id('flash_message').visible?
expect(page).to have_text('Libelle doit être rempli')
fill_in_dummy_procedure_details fill_in_dummy_procedure_details
page.find_by_id('save-procedure').click click_on 'save-procedure'
expect(page).to have_current_path(admin_procedure_types_de_champ_path(Procedure.first.id.to_s))
expect(page).to have_current_path(admin_procedure_types_de_champ_path(Procedure.first))
end end
end end
context 'Editing a new procedure' do context 'Editing a new procedure' do
before 'Create procedure' do before 'Create procedure' do
page.find_by_id('new-procedure').click expect(page).to have_selector('#new-procedure')
page.find_by_id('from-scratch').click find('#new-procedure').click
click_on 'from-scratch'
expect(page).to have_current_path(new_admin_procedure_path)
fill_in_dummy_procedure_details fill_in_dummy_procedure_details
page.find_by_id('save-procedure').click click_on 'save-procedure'
procedure = Procedure.last procedure = Procedure.last
procedure.update(service: create(:service)) procedure.update(service: create(:service))
end end
scenario 'Add champ, add file, visualize them in procedure preview' do scenario 'Add champ, add file, visualize them in procedure preview' do
page.find_by_id('procedure_types_de_champ_attributes_0_libelle').set 'libelle de champ' fill_in 'procedure_types_de_champ_attributes_0_libelle', with: 'libelle de champ'
page.find_by_id('add_type_de_champ').click click_on 'add_type_de_champ'
page.find_by_id('procedure_types_de_champ_attributes_1_libelle') expect(page).to have_current_path(admin_procedure_types_de_champ_path(Procedure.first))
expect(page).to have_selector('#procedure_types_de_champ_attributes_1_libelle')
expect(Procedure.first.types_de_champ.first.libelle).to eq('libelle de champ') expect(Procedure.first.types_de_champ.first.libelle).to eq('libelle de champ')
page.find_by_id('onglet-pieces').click click_on 'onglet-pieces'
expect(page).to have_current_path(admin_procedure_pieces_justificatives_path(Procedure.first.id.to_s)) expect(page).to have_current_path(admin_procedure_pieces_justificatives_path(Procedure.first))
page.find_by_id('procedure_types_de_piece_justificative_attributes_0_libelle').set 'libelle de piece' fill_in 'procedure_types_de_piece_justificative_attributes_0_libelle', with: 'libelle de piece'
page.find_by_id('add_piece_justificative').click click_on 'add_piece_justificative'
page.find_by_id('procedure_types_de_piece_justificative_attributes_1_libelle') expect(page).to have_current_path(admin_procedure_pieces_justificatives_path(Procedure.first))
expect(page).to have_selector('#procedure_types_de_piece_justificative_attributes_1_libelle')
preview_window = window_opened_by { page.find_by_id('onglet-preview').click } preview_window = window_opened_by { click_on 'onglet-preview' }
within_window(preview_window) do within_window(preview_window) do
expect(page).to have_current_path(apercu_procedure_path(Procedure.first)) expect(page).to have_current_path(apercu_procedure_path(Procedure.first))
expect(page.find("input[type='text']")['placeholder']).to eq('libelle de champ') expect(page).to have_field('libelle de champ')
expect(page.first('.pj-input label').text).to eq('libelle de piece') expect(page).to have_field('libelle de piece')
end end
end end
scenario 'After adding champ and file, check impossibility to publish procedure, add accompagnateur and make publication' do scenario 'After adding champ and file, check impossibility to publish procedure, add accompagnateur and make publication' do
page.find_by_id('procedure_types_de_champ_attributes_0_libelle').set 'libelle de champ' fill_in 'procedure_types_de_champ_attributes_0_libelle', with: 'libelle de champ'
page.find_by_id('add_type_de_champ').click click_on 'add_type_de_champ'
page.find_by_id('onglet-pieces').click click_on 'onglet-pieces'
page.find_by_id('procedure_types_de_piece_justificative_attributes_0_libelle').set 'libelle de piece'
page.find_by_id('add_piece_justificative').click
page.find_by_id('onglet-infos').click expect(page).to have_current_path(admin_procedure_pieces_justificatives_path(Procedure.first))
expect(page).to have_current_path(admin_procedure_path(Procedure.first.id.to_s)) fill_in 'procedure_types_de_piece_justificative_attributes_0_libelle', with: 'libelle de piece'
expect(page.find_by_id('publish-procedure')['disabled']).to eq('true') click_on 'add_piece_justificative'
page.find_by_id('onglet-accompagnateurs').click click_on 'onglet-infos'
expect(page).to have_current_path(admin_procedure_accompagnateurs_path(Procedure.first.id.to_s)) expect(page).to have_current_path(admin_procedure_path(Procedure.first))
page.find_by_id('gestionnaire_email').set 'gestionnaire@apientreprise.fr' expect(page).to have_selector('#publish-procedure')
page.find_by_id('add-gestionnaire-email').click expect(page.find_by_id('publish-procedure')[:disabled]).to eq('true')
click_on 'onglet-accompagnateurs'
expect(page).to have_current_path(admin_procedure_accompagnateurs_path(Procedure.first))
fill_in 'gestionnaire_email', with: 'gestionnaire@apientreprise.fr'
click_on 'add-gestionnaire-email'
page.first('.gestionnaire-affectation').click page.first('.gestionnaire-affectation').click
page.find_by_id('onglet-infos').click click_on 'onglet-infos'
expect(page).to have_current_path(admin_procedure_path(Procedure.first))
expect(page).to have_selector('#publish-procedure', visible: true) expect(page).to have_selector('#publish-procedure', visible: true)
page.find_by_id('publish-procedure').click find('#publish-procedure').click
expect(page.find_by_id('procedure_path')['value']).to eq('libelle-de-la-procedure') within '#publish-modal' do
page.find_by_id('publish').click expect(page).to have_field('procedure_path', with: 'libelle-de-la-procedure')
click_on 'publish'
end
expect(page).to have_text('Procédure publiée')
expect(page).to have_selector('.procedure-lien') expect(page).to have_selector('.procedure-lien')
end end
end end

View file

@ -81,7 +81,7 @@ feature 'As a User I wanna create a dossier' do
wait_for_ajax wait_for_ajax
expect(page).to have_css('#recap-info-entreprise') expect(page).to have_css('#recap-info-entreprise')
find(:css, "#dossier_autorisation_donnees[value='1']").set(true) check 'dossier_autorisation_donnees'
page.find_by_id('etape_suivante').click page.find_by_id('etape_suivante').click
expect(page).to have_current_path(users_dossier_carte_path(procedure_with_siret.dossiers.last.id.to_s)) expect(page).to have_current_path(users_dossier_carte_path(procedure_with_siret.dossiers.last.id.to_s))
page.find_by_id('etape_suivante').click page.find_by_id('etape_suivante').click

View file

@ -47,7 +47,7 @@ Capybara.register_driver :headless_chrome do |app|
desired_capabilities: capabilities desired_capabilities: capabilities
end end
Capybara.default_max_wait_time = 1 Capybara.default_max_wait_time = 2
# Save a snapshot of the HTML page when an integration test fails # Save a snapshot of the HTML page when an integration test fails
Capybara::Screenshot.autosave_on_failure = true Capybara::Screenshot.autosave_on_failure = true