2018-02-21 18:32:07 +01:00
|
|
|
|
feature 'The user' do
|
2020-07-21 16:49:26 +02:00
|
|
|
|
let(:password) { 'my-s3cure-p4ssword' }
|
2018-02-21 18:32:07 +01:00
|
|
|
|
let!(:user) { create(:user, password: password) }
|
|
|
|
|
|
|
|
|
|
let!(:procedure) { create(:procedure, :published, :for_individual, :with_all_champs_mandatory) }
|
|
|
|
|
let(:user_dossier) { user.dossiers.first }
|
|
|
|
|
|
2020-01-14 18:46:07 +01:00
|
|
|
|
scenario 'fill a dossier', js: true, vcr: { cassette_name: 'api_geo_departements_regions_et_communes' } do
|
2019-06-03 15:45:08 +02:00
|
|
|
|
log_in(user, procedure)
|
2018-02-21 18:32:07 +01:00
|
|
|
|
|
|
|
|
|
fill_individual
|
|
|
|
|
|
|
|
|
|
# fill data
|
|
|
|
|
fill_in('text', with: 'super texte')
|
|
|
|
|
fill_in('textarea', with: 'super textarea')
|
2018-09-12 22:25:57 +02:00
|
|
|
|
fill_in('date', with: '12-12-2012')
|
2020-08-13 13:30:52 +02:00
|
|
|
|
select_date_and_time(Time.zone.parse('06/01/2030 7h05'), form_id_for_datetime('datetime'))
|
2018-02-21 18:32:07 +01:00
|
|
|
|
fill_in('number', with: '42')
|
|
|
|
|
check('checkbox')
|
|
|
|
|
choose('Madame')
|
|
|
|
|
fill_in('email', with: 'loulou@yopmail.com')
|
2020-07-29 15:45:25 +02:00
|
|
|
|
fill_in('phone', with: '0123456789')
|
2018-02-21 18:32:07 +01:00
|
|
|
|
choose('Non')
|
2020-06-24 10:55:53 +02:00
|
|
|
|
choose('val2')
|
|
|
|
|
check('val1')
|
|
|
|
|
check('val3')
|
|
|
|
|
select('bravo', from: form_id_for('simple_choice_drop_down_list_long'))
|
|
|
|
|
select('alpha', from: form_id_for('multiple_choice_drop_down_list_long'))
|
|
|
|
|
select('charly', from: form_id_for('multiple_choice_drop_down_list_long'))
|
2018-02-21 18:32:07 +01:00
|
|
|
|
select('AUSTRALIE', from: 'pays')
|
2020-01-14 18:46:07 +01:00
|
|
|
|
|
|
|
|
|
select_champ_geo('regions', 'Ma', 'Martinique')
|
|
|
|
|
select('Martinique', from: 'regions')
|
|
|
|
|
|
|
|
|
|
select_champ_geo('departements', 'Ai', '02 - Aisne')
|
|
|
|
|
select('02 - Aisne', from: 'departements')
|
|
|
|
|
|
|
|
|
|
select_champ_geo('communes', 'Am', 'Ambléon')
|
|
|
|
|
select('Ambléon', from: 'communes')
|
|
|
|
|
|
2018-02-21 18:32:07 +01:00
|
|
|
|
check('engagement')
|
|
|
|
|
fill_in('dossier_link', with: '123')
|
2019-02-19 17:36:02 +01:00
|
|
|
|
find('.editable-champ-piece_justificative input[type=file]').attach_file(Rails.root + 'spec/fixtures/files/file.pdf')
|
2018-02-21 18:32:07 +01:00
|
|
|
|
|
2020-09-15 13:38:45 +02:00
|
|
|
|
blur
|
|
|
|
|
expect(page).to have_css('span', text: 'Brouillon enregistré', visible: true)
|
2018-02-21 18:32:07 +01:00
|
|
|
|
|
|
|
|
|
# check data on the dossier
|
|
|
|
|
expect(user_dossier.brouillon?).to be true
|
|
|
|
|
expect(champ_value_for('text')).to eq('super texte')
|
|
|
|
|
expect(champ_value_for('textarea')).to eq('super textarea')
|
|
|
|
|
expect(champ_value_for('date')).to eq('2012-12-12')
|
2020-08-13 13:30:52 +02:00
|
|
|
|
expect(champ_value_for('datetime')).to eq('06/01/2030 07:05')
|
2018-02-21 18:32:07 +01:00
|
|
|
|
expect(champ_value_for('number')).to eq('42')
|
|
|
|
|
expect(champ_value_for('checkbox')).to eq('on')
|
2019-08-01 09:55:41 +02:00
|
|
|
|
expect(champ_value_for('civilite')).to eq('Mme')
|
2018-02-21 18:32:07 +01:00
|
|
|
|
expect(champ_value_for('email')).to eq('loulou@yopmail.com')
|
2020-07-29 15:45:25 +02:00
|
|
|
|
expect(champ_value_for('phone')).to eq('0123456789')
|
2018-02-21 18:32:07 +01:00
|
|
|
|
expect(champ_value_for('yes_no')).to eq('false')
|
|
|
|
|
expect(champ_value_for('simple_drop_down_list')).to eq('val2')
|
2020-06-24 10:55:53 +02:00
|
|
|
|
expect(champ_value_for('simple_choice_drop_down_list_long')).to eq('bravo')
|
|
|
|
|
expect(JSON.parse(champ_value_for('multiple_choice_drop_down_list_long'))).to match(['alpha', 'charly'])
|
2018-02-21 18:32:07 +01:00
|
|
|
|
expect(JSON.parse(champ_value_for('multiple_drop_down_list'))).to match(['val1', 'val3'])
|
|
|
|
|
expect(champ_value_for('pays')).to eq('AUSTRALIE')
|
2020-01-14 18:46:07 +01:00
|
|
|
|
expect(champ_value_for('regions')).to eq('Martinique')
|
|
|
|
|
expect(champ_value_for('departements')).to eq('02 - Aisne')
|
|
|
|
|
expect(champ_value_for('communes')).to eq('Ambléon')
|
2018-02-21 18:32:07 +01:00
|
|
|
|
expect(champ_value_for('engagement')).to eq('on')
|
|
|
|
|
expect(champ_value_for('dossier_link')).to eq('123')
|
2019-02-19 17:36:02 +01:00
|
|
|
|
expect(champ_value_for('piece_justificative')).to be_nil # antivirus hasn't approved the file yet
|
2018-02-21 18:32:07 +01:00
|
|
|
|
|
|
|
|
|
## check data on the gui
|
2019-02-19 17:36:02 +01:00
|
|
|
|
|
2018-02-21 18:32:07 +01:00
|
|
|
|
expect(page).to have_field('text', with: 'super texte')
|
|
|
|
|
expect(page).to have_field('textarea', with: 'super textarea')
|
|
|
|
|
expect(page).to have_field('date', with: '2012-12-12')
|
2020-08-13 13:30:52 +02:00
|
|
|
|
check_date_and_time(Time.zone.parse('06/01/2030 7:05'), form_id_for_datetime('datetime'))
|
2018-02-21 18:32:07 +01:00
|
|
|
|
expect(page).to have_field('number', with: '42')
|
|
|
|
|
expect(page).to have_checked_field('checkbox')
|
|
|
|
|
expect(page).to have_checked_field('Madame')
|
|
|
|
|
expect(page).to have_field('email', with: 'loulou@yopmail.com')
|
2020-07-29 15:45:25 +02:00
|
|
|
|
expect(page).to have_field('phone', with: '0123456789')
|
2018-02-21 18:32:07 +01:00
|
|
|
|
expect(page).to have_checked_field('Non')
|
2020-06-24 10:55:53 +02:00
|
|
|
|
expect(page).to have_checked_field('val2')
|
|
|
|
|
expect(page).to have_checked_field('val1')
|
|
|
|
|
expect(page).to have_checked_field('val3')
|
|
|
|
|
expect(page).to have_selected_value('simple_choice_drop_down_list_long', selected: 'bravo')
|
|
|
|
|
expect(page).to have_selected_value('multiple_choice_drop_down_list_long', selected: ['alpha', 'charly'])
|
2019-06-03 15:47:56 +02:00
|
|
|
|
expect(page).to have_selected_value('pays', selected: 'AUSTRALIE')
|
2020-01-14 18:46:07 +01:00
|
|
|
|
expect(page).to have_selected_value('regions', selected: 'Martinique')
|
|
|
|
|
expect(page).to have_selected_value('departements', selected: '02 - Aisne')
|
|
|
|
|
expect(page).to have_selected_value('communes', selected: 'Ambléon')
|
2018-02-21 18:32:07 +01:00
|
|
|
|
expect(page).to have_checked_field('engagement')
|
|
|
|
|
expect(page).to have_field('dossier_link', with: '123')
|
2019-02-19 17:36:02 +01:00
|
|
|
|
expect(page).to have_text('file.pdf')
|
|
|
|
|
expect(page).to have_text('analyse antivirus en cours')
|
2018-02-21 18:32:07 +01:00
|
|
|
|
end
|
|
|
|
|
|
2019-01-30 16:14:15 +01:00
|
|
|
|
let(:procedure_with_repetition) do
|
2020-08-27 19:56:34 +02:00
|
|
|
|
create(:procedure, :published, :for_individual, :with_repetition)
|
2019-01-30 16:14:15 +01:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
scenario 'fill a dossier with repetition', js: true do
|
2019-06-03 15:45:08 +02:00
|
|
|
|
log_in(user, procedure_with_repetition)
|
2019-01-30 16:14:15 +01:00
|
|
|
|
|
|
|
|
|
fill_individual
|
|
|
|
|
|
2020-08-27 19:56:34 +02:00
|
|
|
|
fill_in('sub type de champ', with: 'super texte')
|
|
|
|
|
expect(page).to have_field('sub type de champ', with: 'super texte')
|
2019-01-30 16:14:15 +01:00
|
|
|
|
|
2020-02-10 15:43:21 +01:00
|
|
|
|
click_on 'Ajouter un élément pour'
|
2019-01-30 16:14:15 +01:00
|
|
|
|
|
|
|
|
|
within '.row-1' do
|
2020-08-27 19:56:34 +02:00
|
|
|
|
fill_in('sub type de champ', with: 'un autre texte')
|
2019-01-30 16:14:15 +01:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
expect(page).to have_content('Supprimer', count: 2)
|
|
|
|
|
|
2020-09-15 13:38:45 +02:00
|
|
|
|
blur
|
|
|
|
|
expect(page).to have_css('span', text: 'Brouillon enregistré', visible: true)
|
2019-01-30 16:14:15 +01:00
|
|
|
|
|
|
|
|
|
expect(page).to have_content('Supprimer', count: 2)
|
|
|
|
|
|
|
|
|
|
within '.row-1' do
|
2020-02-10 15:43:21 +01:00
|
|
|
|
click_on 'Supprimer l’élément'
|
2019-01-30 16:14:15 +01:00
|
|
|
|
end
|
|
|
|
|
|
2020-09-15 13:38:45 +02:00
|
|
|
|
blur
|
|
|
|
|
expect(page).to have_css('span', text: 'Brouillon enregistré', visible: true)
|
2019-01-30 16:14:15 +01:00
|
|
|
|
|
|
|
|
|
expect(page).to have_content('Supprimer', count: 1)
|
|
|
|
|
end
|
|
|
|
|
|
2018-02-21 18:32:07 +01:00
|
|
|
|
let(:simple_procedure) do
|
2020-09-15 13:38:45 +02:00
|
|
|
|
tdcs = [
|
|
|
|
|
build(:type_de_champ, mandatory: true, libelle: 'texte obligatoire'),
|
|
|
|
|
build(:type_de_champ, mandatory: false, libelle: 'texte optionnel')
|
|
|
|
|
]
|
2018-02-21 18:32:07 +01:00
|
|
|
|
create(:procedure, :published, :for_individual, types_de_champ: tdcs)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
scenario 'save an incomplete dossier as draft but cannot not submit it', js: true do
|
2019-06-03 15:45:08 +02:00
|
|
|
|
log_in(user, simple_procedure)
|
2018-02-21 18:32:07 +01:00
|
|
|
|
fill_individual
|
|
|
|
|
|
2018-07-02 12:27:01 +02:00
|
|
|
|
# Check an incomplete dossier can be saved as a draft, even when mandatory fields are missing
|
2020-09-15 13:38:45 +02:00
|
|
|
|
fill_in('texte optionnel', with: 'ça ne suffira pas')
|
|
|
|
|
blur
|
|
|
|
|
expect(page).to have_css('span', text: 'Brouillon enregistré', visible: true)
|
2018-09-06 10:49:26 +02:00
|
|
|
|
expect(page).to have_current_path(brouillon_dossier_path(user_dossier))
|
2018-02-21 18:32:07 +01:00
|
|
|
|
|
2018-07-02 12:27:01 +02:00
|
|
|
|
# Check an incomplete dossier cannot be submitted when mandatory fields are missing
|
2019-07-15 16:10:34 +02:00
|
|
|
|
click_on 'Déposer le dossier'
|
2018-02-21 18:32:07 +01:00
|
|
|
|
expect(user_dossier.reload.brouillon?).to be(true)
|
2018-09-06 10:49:26 +02:00
|
|
|
|
expect(page).to have_current_path(brouillon_dossier_path(user_dossier))
|
2018-02-21 18:32:07 +01:00
|
|
|
|
|
2018-07-02 12:27:01 +02:00
|
|
|
|
# Check a dossier can be submitted when all mandatory fields are filled
|
|
|
|
|
fill_in('texte obligatoire', with: 'super texte')
|
2018-02-21 18:32:07 +01:00
|
|
|
|
|
2019-07-15 16:10:34 +02:00
|
|
|
|
click_on 'Déposer le dossier'
|
2018-02-21 18:32:07 +01:00
|
|
|
|
expect(user_dossier.reload.en_construction?).to be(true)
|
2018-07-02 12:27:01 +02:00
|
|
|
|
expect(champ_value_for('texte obligatoire')).to eq('super texte')
|
2018-02-27 09:49:58 +01:00
|
|
|
|
expect(page).to have_current_path(merci_dossier_path(user_dossier))
|
2018-02-21 18:32:07 +01:00
|
|
|
|
end
|
|
|
|
|
|
2019-02-19 17:36:02 +01:00
|
|
|
|
let(:procedure_with_pj) do
|
2020-08-27 19:56:34 +02:00
|
|
|
|
tdcs = [build(:type_de_champ_piece_justificative, mandatory: true, libelle: 'Pièce justificative')]
|
2019-02-19 17:36:02 +01:00
|
|
|
|
create(:procedure, :published, :for_individual, types_de_champ: tdcs)
|
|
|
|
|
end
|
|
|
|
|
|
2020-03-30 15:34:56 +02:00
|
|
|
|
let(:procedure_with_pjs) do
|
|
|
|
|
tdcs = [
|
2020-08-27 19:56:34 +02:00
|
|
|
|
build(:type_de_champ_piece_justificative, mandatory: true, libelle: 'Pièce justificative 1', position: 1),
|
|
|
|
|
build(:type_de_champ_piece_justificative, mandatory: true, libelle: 'Pièce justificative 2', position: 2)
|
2020-03-30 15:34:56 +02:00
|
|
|
|
]
|
|
|
|
|
create(:procedure, :published, :for_individual, types_de_champ: tdcs)
|
|
|
|
|
end
|
|
|
|
|
|
2020-07-15 16:06:24 +02:00
|
|
|
|
let(:old_procedure_with_disabled_pj_validation) do
|
|
|
|
|
tdcs = [
|
|
|
|
|
create(:type_de_champ_piece_justificative, mandatory: true, libelle: 'Pièce justificative 1', order_place: 1, skip_pj_validation: true)
|
|
|
|
|
]
|
|
|
|
|
create(:procedure, :published, :for_individual, types_de_champ: tdcs)
|
|
|
|
|
end
|
|
|
|
|
|
2020-05-14 17:39:07 +02:00
|
|
|
|
scenario 'add an attachment', js: true do
|
|
|
|
|
log_in(user, procedure_with_pjs)
|
2019-02-19 17:36:02 +01:00
|
|
|
|
fill_individual
|
|
|
|
|
|
2020-05-14 17:39:07 +02:00
|
|
|
|
# Add attachments
|
|
|
|
|
find_field('Pièce justificative 1').attach_file(Rails.root + 'spec/fixtures/files/file.pdf')
|
|
|
|
|
find_field('Pièce justificative 2').attach_file(Rails.root + 'spec/fixtures/files/RIB.pdf')
|
2019-02-19 17:36:02 +01:00
|
|
|
|
|
2020-05-14 17:39:07 +02:00
|
|
|
|
# Expect the files to be uploaded immediately
|
|
|
|
|
expect(page).to have_text('analyse antivirus en cours', count: 2)
|
|
|
|
|
expect(page).to have_text('file.pdf')
|
2019-02-19 17:36:02 +01:00
|
|
|
|
expect(page).to have_text('RIB.pdf')
|
|
|
|
|
|
2020-05-14 17:39:07 +02:00
|
|
|
|
# Expect the submit buttons to be enabled
|
|
|
|
|
expect(page).to have_button('Déposer le dossier', disabled: false)
|
2019-02-19 17:36:02 +01:00
|
|
|
|
|
2020-05-14 17:39:07 +02:00
|
|
|
|
# Reload the current page
|
|
|
|
|
visit current_path
|
2020-03-30 15:34:56 +02:00
|
|
|
|
|
2020-05-14 17:39:07 +02:00
|
|
|
|
# Expect the files to have been saved on the dossier
|
|
|
|
|
expect(page).to have_text('file.pdf')
|
|
|
|
|
expect(page).to have_text('RIB.pdf')
|
|
|
|
|
end
|
2020-03-30 15:34:56 +02:00
|
|
|
|
|
2020-07-15 16:06:24 +02:00
|
|
|
|
scenario 'add an invalid attachment on an old procedure where pj validation is disabled', js: true do
|
|
|
|
|
log_in(user, old_procedure_with_disabled_pj_validation)
|
|
|
|
|
fill_individual
|
|
|
|
|
|
|
|
|
|
# Test invalid file type
|
|
|
|
|
attach_file('Pièce justificative 1', Rails.root + 'spec/fixtures/files/invalid_file_format.json')
|
|
|
|
|
expect(page).to have_no_text('La pièce justificative n’est pas d’un type accepté')
|
|
|
|
|
expect(page).to have_text('analyse antivirus en cours', count: 1)
|
|
|
|
|
end
|
|
|
|
|
|
2020-05-14 17:39:07 +02:00
|
|
|
|
scenario 'retry on transcient upload error', js: true do
|
|
|
|
|
log_in(user, procedure_with_pjs)
|
|
|
|
|
fill_individual
|
2020-03-30 15:34:56 +02:00
|
|
|
|
|
2020-05-14 17:39:07 +02:00
|
|
|
|
# Test auto-upload failure
|
|
|
|
|
logout(:user) # Make the subsequent auto-upload request fail
|
|
|
|
|
attach_file('Pièce justificative 1', Rails.root + 'spec/fixtures/files/file.pdf')
|
|
|
|
|
expect(page).to have_text('Une erreur s’est produite pendant l’envoi du fichier')
|
|
|
|
|
expect(page).to have_button('Ré-essayer', visible: true)
|
|
|
|
|
expect(page).to have_button('Déposer le dossier', disabled: false)
|
|
|
|
|
|
|
|
|
|
# Test that retrying after a failure works
|
|
|
|
|
login_as(user, scope: :user) # Make the auto-upload request work again
|
|
|
|
|
click_on('Ré-essayer', visible: true)
|
|
|
|
|
expect(page).to have_text('analyse antivirus en cours')
|
|
|
|
|
expect(page).to have_text('file.pdf')
|
|
|
|
|
expect(page).to have_button('Déposer le dossier', disabled: false)
|
2020-03-30 15:34:56 +02:00
|
|
|
|
|
2020-05-14 17:39:07 +02:00
|
|
|
|
# Reload the current page
|
|
|
|
|
visit current_path
|
2020-03-30 15:34:56 +02:00
|
|
|
|
|
2020-05-14 17:39:07 +02:00
|
|
|
|
# Expect the file to have been saved on the dossier
|
|
|
|
|
expect(page).to have_text('file.pdf')
|
2020-03-30 15:34:56 +02:00
|
|
|
|
end
|
|
|
|
|
|
2020-09-14 22:40:43 +02:00
|
|
|
|
context 'draft autosave' do
|
2019-11-19 14:40:28 +01:00
|
|
|
|
scenario 'autosave a draft', js: true do
|
|
|
|
|
log_in(user, simple_procedure)
|
|
|
|
|
fill_individual
|
|
|
|
|
|
|
|
|
|
expect(page).not_to have_button('Enregistrer le brouillon')
|
|
|
|
|
expect(page).to have_content('Votre brouillon est automatiquement enregistré')
|
|
|
|
|
|
|
|
|
|
fill_in('texte obligatoire', with: 'a valid user input')
|
|
|
|
|
blur
|
|
|
|
|
|
|
|
|
|
expect(page).to have_css('span', text: 'Brouillon enregistré', visible: true)
|
|
|
|
|
|
|
|
|
|
visit current_path
|
|
|
|
|
expect(page).to have_field('texte obligatoire', with: 'a valid user input')
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
scenario 'retry on autosave error', js: true do
|
|
|
|
|
log_in(user, simple_procedure)
|
|
|
|
|
fill_individual
|
|
|
|
|
|
|
|
|
|
# Test autosave failure
|
|
|
|
|
logout(:user) # Make the subsequent autosave requests fail
|
|
|
|
|
fill_in('texte obligatoire', with: 'a valid user input')
|
|
|
|
|
blur
|
|
|
|
|
expect(page).to have_css('span', text: 'Impossible d’enregistrer le brouillon', visible: true)
|
|
|
|
|
|
|
|
|
|
# Test that retrying after a failure works
|
|
|
|
|
login_as(user, scope: :user) # Make the autosave requests work again
|
|
|
|
|
click_on 'réessayer'
|
|
|
|
|
expect(page).to have_css('span', text: 'Brouillon enregistré', visible: true)
|
|
|
|
|
|
|
|
|
|
visit current_path
|
|
|
|
|
expect(page).to have_field('texte obligatoire', with: 'a valid user input')
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2018-02-21 18:32:07 +01:00
|
|
|
|
private
|
|
|
|
|
|
2019-06-03 15:45:08 +02:00
|
|
|
|
def log_in(user, procedure)
|
|
|
|
|
login_as user, scope: :user
|
2018-02-21 18:32:07 +01:00
|
|
|
|
|
2019-06-03 15:45:08 +02:00
|
|
|
|
visit "/commencer/#{procedure.path}"
|
2019-01-16 16:16:15 +01:00
|
|
|
|
click_on 'Commencer la démarche'
|
|
|
|
|
|
|
|
|
|
expect(page).to have_content("Données d'identité")
|
2018-02-21 18:32:07 +01:00
|
|
|
|
expect(page).to have_current_path(identite_dossier_path(user_dossier))
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def form_id_for(libelle)
|
|
|
|
|
find(:xpath, ".//label[contains(text()[normalize-space()], '#{libelle}')]")[:for]
|
|
|
|
|
end
|
|
|
|
|
|
2020-03-16 17:42:49 +01:00
|
|
|
|
def form_id_for_datetime(libelle)
|
|
|
|
|
# The HTML for datetime is a bit specific since it has 5 selects, below here is a sample HTML
|
|
|
|
|
# So, we want to find the partial id of a datetime (partial because there are 5 ids:
|
|
|
|
|
# dossier_champs_attributes_3_value_1i, 2i, ... 5i) ; we are interested in the 'dossier_champs_attributes_3_value' part
|
|
|
|
|
# which is then completed in select_date_and_time and check_date_and_time
|
|
|
|
|
#
|
|
|
|
|
# We find the H2, find the first select in the next .datetime div, then strip the last 3 characters
|
|
|
|
|
#
|
|
|
|
|
# <h4 class="form-label">
|
|
|
|
|
# libelle
|
|
|
|
|
# </h4>
|
|
|
|
|
# <div class="datetime">
|
|
|
|
|
# <span class="hidden">
|
|
|
|
|
# <label for="dossier_champs_attributes_3_value_3i">Jour</label></span>
|
|
|
|
|
# <select id="dossier_champs_attributes_3_value_3i" name="dossier[champs_attributes][3][value(3i)]">
|
|
|
|
|
# <option value=""></option>
|
|
|
|
|
# <option value="1">1</option>
|
|
|
|
|
# <option value="2">2</option>
|
|
|
|
|
# <!-- … -->
|
|
|
|
|
# </select>
|
|
|
|
|
# <!-- … 4 other selects for month, year, minute and seconds -->
|
|
|
|
|
# </div>
|
2020-07-20 10:03:15 +02:00
|
|
|
|
e = find(:xpath, ".//div[contains(text()[normalize-space()], '#{libelle}')]")
|
2020-03-16 17:42:49 +01:00
|
|
|
|
e.sibling('.datetime').first('select')[:id][0..-4]
|
|
|
|
|
end
|
|
|
|
|
|
2018-02-21 18:32:07 +01:00
|
|
|
|
def champ_value_for(libelle)
|
|
|
|
|
champs = user_dossier.champs
|
|
|
|
|
champs.find { |c| c.libelle == libelle }.value
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def fill_individual
|
2020-03-23 17:42:31 +01:00
|
|
|
|
choose 'M.'
|
2018-02-21 18:32:07 +01:00
|
|
|
|
fill_in('individual_prenom', with: 'prenom')
|
|
|
|
|
fill_in('individual_nom', with: 'nom')
|
|
|
|
|
click_on 'Continuer'
|
2018-09-06 09:09:23 +02:00
|
|
|
|
expect(page).to have_current_path(brouillon_dossier_path(user_dossier))
|
2018-02-21 18:32:07 +01:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def select_date_and_time(date, field)
|
|
|
|
|
select date.strftime('%Y'), from: "#{field}_1i" # year
|
|
|
|
|
select I18n.l(date, format: '%B'), from: "#{field}_2i" # month
|
|
|
|
|
select date.strftime('%-d'), from: "#{field}_3i" # day
|
|
|
|
|
select date.strftime('%H'), from: "#{field}_4i" # hour
|
|
|
|
|
select date.strftime('%M'), from: "#{field}_5i" # minute
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def check_date_and_time(date, field)
|
2019-06-03 15:47:56 +02:00
|
|
|
|
expect(page).to have_selected_value("#{field}_1i", selected: date.strftime('%Y'))
|
|
|
|
|
expect(page).to have_selected_value("#{field}_2i", selected: I18n.l(date, format: '%B'))
|
|
|
|
|
expect(page).to have_selected_value("#{field}_3i", selected: date.strftime('%-d'))
|
|
|
|
|
expect(page).to have_selected_value("#{field}_4i", selected: date.strftime('%H'))
|
|
|
|
|
expect(page).to have_selected_value("#{field}_5i", selected: date.strftime('%M'))
|
2018-02-21 18:32:07 +01:00
|
|
|
|
end
|
2020-01-14 18:46:07 +01:00
|
|
|
|
|
|
|
|
|
def select_champ_geo(champ, fill_with, value)
|
|
|
|
|
find(".editable-champ-#{champ} .select2-container").click
|
|
|
|
|
id = find('.select2-container--open [role=listbox]')[:id]
|
|
|
|
|
find("[aria-controls=#{id}]").fill_in with: fill_with
|
|
|
|
|
expect(page).to have_content(value)
|
|
|
|
|
find('li', text: value).click
|
|
|
|
|
end
|
2018-02-21 18:32:07 +01:00
|
|
|
|
end
|