demarches-normaliennes/spec/system/administrateurs/condition_spec.rb
2022-07-12 10:44:40 +02:00

129 lines
3.9 KiB
Ruby

describe 'As an administrateur I can edit types de champ condition', js: true do
include Logic
let(:administrateur) { procedure.administrateurs.first }
let(:procedure) do
create(:procedure).tap do |p|
p.draft_revision.add_type_de_champ(type_champ: :integer_number, libelle: 'age')
# private
p.draft_revision.add_type_de_champ(type_champ: :boolean, libelle: 'bon dossier', private: true)
p.draft_revision.add_type_de_champ(type_champ: :text, libelle: 'nom du parent')
end
end
let(:first_tdc) { procedure.draft_revision.types_de_champ.first }
let(:second_tdc) { procedure.draft_revision.types_de_champ.second }
before do
login_as administrateur.user, scope: :user
# TODO: remove along with feature flipping
allow(Flipper).to receive(:enabled?).with(:conditional, anything).and_return(true)
visit champs_admin_procedure_path(procedure)
end
scenario "adding a new condition" do
within '.type-de-champ:nth-child(2)' do
click_on 'cliquer pour activer'
within '.condition-table tbody tr:nth-child(1)' do
expect(page).to have_select('type_de_champ[condition_form][rows][][targeted_champ]', options: ['Sélectionner', 'age'])
within('.target') { select('age') }
within('.operator') { select('Supérieur ou égal à') }
within('.value') { fill_in with: 18 }
end
end
expected_condition = greater_than_eq(champ_value(first_tdc.stable_id), constant(18))
wait_until { second_tdc.reload.condition == expected_condition }
end
scenario "the first type de champ is removed" do
within '.type-de-champ:nth-child(1)' do
click_on 'Supprimer'
page.accept_alert
end
# the condition table is deleted
expect(page).to have_no_content('Logique conditionnelle')
end
context 'with a preexisting condition' do
before do
second_tdc.update(condition: greater_than_eq(champ_value(first_tdc.stable_id), constant(18)))
page.refresh
end
scenario "removing all conditions" do
within '.type-de-champ:nth-child(2)' do
click_on 'cliquer pour désactiver'
page.accept_alert
# the condition table is deleted
expect(page).to have_no_table
end
end
scenario "removing a condition" do
within '.type-de-champ:nth-child(2)' do
within '.condition-table tbody tr:nth-child(1)' do
within('.delete-column') { click_on 'Supprimer la ligne' }
end
# the condition table is deleted
expect(page).to have_no_table
end
end
scenario "adding a second row" do
within '.type-de-champ:nth-child(2)' do
click_on 'Ajouter une condition'
# the condition table has 2 rows
within '.condition-table tbody' do
expect(page).to have_selector('tr', count: 2)
end
end
end
scenario "changing target champ to a not managed type" do
expect(page).to have_no_selector('.condition-error')
within '.type-de-champ:nth-child(1)' do
select('Départements', from: 'Type de champ')
end
within '.type-de-champ:nth-child(2)' do
expect(page).to have_selector('.condition-error')
end
end
scenario "moving a target champ below the condition" do
expect(page).to have_no_selector('.condition-error')
within '.type-de-champ:nth-child(1)' do
click_on 'Déplacer le champ vers le bas'
end
# the now first champ has an error
within '.type-de-champ:nth-child(1)' do
expect(page).to have_selector('.condition-error')
end
end
scenario "moving the condition champ above the target" do
expect(page).to have_no_selector('.condition-error')
within '.type-de-champ:nth-child(2)' do
click_on 'Déplacer le champ vers le haut'
end
# the now first champ has an error
within '.type-de-champ:nth-child(1)' do
expect(page).to have_selector('.condition-error')
end
end
end
end