demarches-normaliennes/spec/features/users/linked_dropdown_spec.rb

78 lines
2.3 KiB
Ruby
Raw Normal View History

2018-06-21 16:17:59 +02:00
feature 'linked dropdown lists' do
let(:password) { 'my-s3cure-p4ssword' }
2018-06-21 16:17:59 +02:00
let!(:user) { create(:user, password: password) }
let(:list_items) do
<<~END_OF_LIST
--Primary 1--
Secondary 1.1
Secondary 1.2
--Primary 2--
Secondary 2.1
Secondary 2.2
Secondary 2.3
2018-06-21 16:17:59 +02:00
END_OF_LIST
end
2020-08-27 19:56:34 +02:00
let(:type_de_champ) { build(:type_de_champ_linked_drop_down_list, libelle: 'linked dropdown', drop_down_list_value: list_items) }
2018-06-21 16:17:59 +02:00
let!(:procedure) do
2020-08-27 19:56:34 +02:00
create(:procedure, :published, :for_individual, types_de_champ: [type_de_champ])
2018-06-21 16:17:59 +02:00
end
let(:user_dossier) { user.dossiers.first }
scenario 'change primary value, secondary options are updated', js: true do
2018-06-21 16:17:59 +02:00
log_in(user.email, password, procedure)
fill_individual
# Select a primary value
select('Primary 2', from: primary_id_for('linked dropdown'))
2018-06-21 16:17:59 +02:00
# Secondary menu reflects chosen primary value
expect(page).to have_select(secondary_id_for('linked dropdown'), options: ['', 'Secondary 2.1', 'Secondary 2.2', 'Secondary 2.3'])
2018-06-21 16:17:59 +02:00
# Select another primary value
select('Primary 1', from: primary_id_for('linked dropdown'))
2018-06-21 16:17:59 +02:00
# Secondary menu gets updated
expect(page).to have_select(secondary_id_for('linked dropdown'), options: ['', 'Secondary 1.1', 'Secondary 1.2'])
2018-06-21 16:17:59 +02:00
end
private
def log_in(email, password, procedure)
2018-10-25 17:40:23 +02:00
visit "/commencer/#{procedure.path}"
2019-01-16 11:57:58 +01:00
click_on 'Jai déjà un compte'
2018-06-21 16:17:59 +02:00
expect(page).to have_current_path(new_user_session_path)
sign_in_with(email, password)
2019-01-16 11:57:58 +01:00
expect(page).to have_current_path(commencer_path(path: procedure.path))
click_on 'Commencer la démarche'
expect(page).to have_content("Données d'identité")
2018-06-21 16:17:59 +02:00
expect(page).to have_current_path(identite_dossier_path(user_dossier))
end
def fill_individual
choose 'M.'
2018-06-21 16:17:59 +02:00
fill_in('individual_prenom', with: 'prenom')
fill_in('individual_nom', with: 'nom')
click_on 'Continuer'
expect(page).to have_current_path(brouillon_dossier_path(user_dossier))
2018-06-21 16:17:59 +02:00
end
def primary_id_for(libelle)
2018-06-21 16:17:59 +02:00
find(:xpath, ".//label[contains(text()[normalize-space()], '#{libelle}')]")[:for]
end
def secondary_id_for(libelle)
primary_id = primary_id_for(libelle)
find("\##{primary_id}")
.ancestor('.editable-champ')
.find("[data-secondary]")['id']
2018-06-21 16:17:59 +02:00
end
end