Skip to content

Commit

Permalink
clean(linters): cleanup code, enhance wording and test coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
mfo committed Jun 6, 2024
1 parent 69e730e commit 8a2a814
Show file tree
Hide file tree
Showing 15 changed files with 170 additions and 56 deletions.
9 changes: 9 additions & 0 deletions app/assets/stylesheets/conditions_component.scss
Original file line number Diff line number Diff line change
Expand Up @@ -57,5 +57,14 @@ form.form > .conditionnel {
select.alert {
border-color: $dark-red;
}

&:first-child {
padding-left: 0;
}

&:last-child {
text-align: right;
padding-right: 0;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,30 @@
%div{ id: dom_id(@draft_revision, :ineligibilite_rules) }
= render Procedure::PendingRepublishComponent.new(procedure: @draft_revision.procedure, render_if: pending_changes?)
= render Conditions::ConditionsErrorsComponent.new(conditions: condition_per_row, source_tdcs: @source_tdcs)
%fieldset.fr-fieldset
%legend.fr-mx-1w.fr-label.fr-py-0.fr-mb-1w.fr-mt-2w
Règles d’inéligibilité
%span.fr-hint-text Vous pouvez utiliser 1 ou plusieurs critère pour bloquer le dépot
.fr-fieldset
= form_for(@draft_revision, url: change_admin_procedure_ineligibilite_rules_path(@draft_revision.procedure_id), html: { id: 'ineligibilite_form', class: 'width-100' }) do |f|
.fr-fieldset__element
.fr-toggle.fr-toggle--label-left
= f.check_box :ineligibilite_enabled, class: 'fr-toggle__input', data: @opt
= f.label :ineligibilite_enabled, "Bloquer le dépôt des dossiers répondant à des conditions d’inéligibilité", data: { 'fr-checked-label': "Activé", 'fr-unchecked-label': "Désactivé" }, class: 'fr-toggle__label'

.fr-fieldset__element= render Dsfr::InputComponent.new(form: f, attribute: :ineligibilite_message, input_type: :text_area, opts: {rows: 5})

.fr-mx-1w.fr-label.fr-py-0.fr-mb-1w.fr-mt-2w
Conditions d’inéligibilité
%span.fr-hint-text Vous pouvez utiliser une ou plusieurs condtions pour bloquer le dépot (si un champ conditionné n'est pas visible, la condition d'inéligibilité ne s'appliquera pas)
.fr-fieldset__element
= form_tag admin_procedure_ineligibilite_rules_path(@draft_revision.procedure_id), method: :patch, data: { turbo: true, controller: 'autosave' }, class: 'form width-100' do
.conditionnel.width-100
%table.condition-table
%thead
%tr
%th.fr-pt-0.far-left
%th.fr-pt-0.target Champ Cible
%th.fr-pt-0.operator Opérateur
%th.fr-pt-0.value Valeur
%th.fr-pt-0.delete-column
- if rows.size > 0
%thead
%tr
%th.fr-pt-0.far-left
%th.fr-pt-0.target Champ Cible
%th.fr-pt-0.operator Opérateur
%th.fr-pt-0.value Valeur
%th.fr-pt-0.delete-column
%tbody
- rows.each.with_index do |(targeted_champ, operator_name, value), row_index|
%tr
Expand All @@ -28,15 +37,13 @@
%tr
%td.text-right{ colspan: 5 }= add_condition_tag



= form_for(@draft_revision, url: change_admin_procedure_ineligibilite_rules_path(@draft_revision.procedure_id)) do |f|
.fr-fieldset__element= render Dsfr::InputComponent.new(form: f, attribute: :ineligibilite_message, input_type: :text_area, opts: {rows: 5})
.fr-fieldset__element
.fr-toggle
= f.check_box :ineligibilite_enabled, class: 'fr-toggle__input', data: @opt
= f.label :ineligibilite_enabled, "Inéligibilité des dossiers", data: { 'fr-checked-label': "Actif", 'fr-unchecked-label': "Inactif" }, class: 'fr-toggle__label'
%p.fr-hint-text Passer l’intérrupteur sur activé pour que les critères d’inéligibilité configurés s'appliquent


= render Procedure::FixedFooterComponent.new(procedure: @draft_revision.procedure, form: f, extra_class_names: 'fr-col-offset-md-2 fr-col-md-8')
.padded-fixed-footer
.fixed-footer
.fr-container
.fr-grid-row.fr-col-offset-md-2.fr-col-md-8
.fr-col-12
%ul.fr-btns-group.fr-btns-group--inline-md
%li
= link_to "Annuler et revenir à l'écran de gestion", admin_procedure_path(id: @draft_revision.procedure), class: 'fr-btn fr-btn--secondary', data: { confirm: 'Si vous avez fait des modifications elles ne seront pas sauvegardées.'}
%li
= button_tag "Enregistrer", class: "fr-btn", form: 'ineligibilite_form'
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ fr:
pending: Champs à configurer
ready: À configurer
completed: Activé
subtitle: Gérez vos critères d’inéligibilité en fonction des champs du formulaire
subtitle: Gérez vos conditions d’inéligibilité en fonction des champs du formulaire
3 changes: 2 additions & 1 deletion app/models/dossier.rb
Original file line number Diff line number Diff line change
Expand Up @@ -940,8 +940,9 @@ def check_mandatory_and_visible_champs
.filter(&:visible?)
.filter(&:mandatory_blank?)
.map do |champ|
errors.import(champ.errors.add(:value, :missing))
champ.errors.add(:value, :missing)
end
.each { errors.import(_1) }
end

def ineligibilite_rules_computable?
Expand Down
4 changes: 2 additions & 2 deletions app/models/logic/and.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ def compute_visible(champs = [])
champs_by_stable_id = champs.index_by(&:stable_id)

@operands.filter { |operand| operand.sources.all? { |champ_stable_id| champs_by_stable_id[champ_stable_id].visible? } }
.map { |operand| operand.compute(champs) }
.all?
.map { |operand| operand.compute(champs) }
.all?
end

def computable?(champs = [])
Expand Down
1 change: 0 additions & 1 deletion app/models/logic/or.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ def compute(champs = [])
end
alias compute_visible compute # visible or not, and or is or


def computable?(champs = [])
return true if sources.blank?

Expand Down
7 changes: 0 additions & 7 deletions app/models/procedure_revision.rb
Original file line number Diff line number Diff line change
Expand Up @@ -496,13 +496,6 @@ def ineligibilite_rules_are_valid?
end
end

def ineligibilite_rules_are_valid?
if ineligibilite_rules
ineligibilite_rules.errors(types_de_champ_for(scope: :public).to_a)
.each { errors.add(:ineligibilite_rules, :invalid) }
end
end

def replace_type_de_champ_by_clone(coordinate)
cloned_type_de_champ = coordinate.type_de_champ.deep_clone do |original, kopy|
ClonePiecesJustificativesService.clone_attachments(original, kopy)
Expand Down
6 changes: 3 additions & 3 deletions app/views/administrateurs/ineligibilite_rules/edit.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,17 @@
= render Dsfr::AlertComponent.new(title: nil, size: :sm, state: :info, heading_level: 'h2', extra_class_names: 'fr-my-2w') do |c|
- c.with_body do
%p
Les dossiers répondant à vos critères d’inéligibilité ne pourront pas être déposés. Plus d’informations sur l’inéligibilité des dossiers dans la
Les dossiers répondant à vos conditions d’inéligibilité ne pourront pas être déposés. Plus d’informations sur l’inéligibilité des dossiers dans la
= link_to('doc', ELIGIBILITE_URL, title: "Document sur l’inéligibilité des dossiers", **external_link_attributes)

- if [email protected]_revision.conditionable_types_de_champ.present?
%p.fr-mt-2w.fr-mb-2w
Pour configurer l’inéligibilité des dossiers, votre formulaire doit comporter au moins un champ supportant les critères d’inéligibilité. Il vous faut donc ajouter au moins un des champs suivant à votre formulaire :
Pour configurer l’inéligibilité des dossiers, votre formulaire doit comporter au moins un champ supportant les conditions d’inéligibilité. Il vous faut donc ajouter au moins un des champs suivant à votre formulaire :
%ul
- Logic::ChampValue::MANAGED_TYPE_DE_CHAMP.values.each do
%li= "« #{t(_1, scope: [:activerecord, :attributes, :type_de_champ, :type_champs])} »"
%p.fr-mt-2w
= link_to 'Ajouter un champ supportant les critères d’inéligibilité', champs_admin_procedure_path(@procedure), class: 'fr-link fr-icon-arrow-right-line fr-link--icon-right'
= link_to 'Ajouter un champ supportant les conditions d’inéligibilité', champs_admin_procedure_path(@procedure), class: 'fr-link fr-icon-arrow-right-line fr-link--icon-right'
= render Procedure::FixedFooterComponent.new(procedure: @procedure)
- else
= render Conditions::IneligibiliteRulesComponent.new(draft_revision: @procedure.draft_revision)
2 changes: 1 addition & 1 deletion config/locales/fr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -609,7 +609,7 @@ fr:
otp_attempt: 'Code OTP (uniquement si vous avez déjà activé 2FA)'
procedure:
zone: La démarche est mise en œuvre par
ineligibilite_rules: "Les règles d’Inéligibilité"
ineligibilite_rules: "Les règles d’inéligibilité"
champs:
value: Valeur du champ
default_mail_attributes: &default_mail_attributes
Expand Down
2 changes: 1 addition & 1 deletion config/locales/models/procedure/fr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ fr:
procedure:
hints:
description: Décrivez en quelques lignes le contexte, la finalité, etc.
description_target_audience: Décrivez en quelques lignes les destinataires finaux de la démarche, les critères d’éligibilité s’il y en a, les pré-requis, etc.
description_target_audience: Décrivez en quelques lignes les destinataires finaux de la démarche, les conditions d’éligibilité s’il y en a, les pré-requis, etc.
description_pj: Décrivez la liste des pièces jointes à fournir s’il y en a
lien_site_web: "Il s'agit de la page de votre site web où le lien sera diffusé. Ex: https://exemple.gouv.fr/page_informant_sur_ma_demarche"
cadre_juridique: "Exemple: 'https://www.legifrance.gouv.fr/'"
Expand Down
7 changes: 7 additions & 0 deletions config/locales/models/procedure_revision/fr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
fr:
activerecord:
attributes:
procedure_revision:
ineligibilite_message: Message d’inéligibilité
hints:
ineligibilite_message: "Ce message sera affiché à l’usager si son dossier est bloqué et lui expliquera la raison de son inéligibilité."
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
context 'types_de_champ_private' do
let(:is_annotation) { true }
it 'does not render public champs errors' do
expect(subject).to have_selector("a", "private")
expect(subject).to have_selector("a", text: "private")
expect(subject).to have_text("doit comporter au moins un choix sélectionnable")
expect(subject).not_to have_text("public")
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -197,14 +197,14 @@
let(:types_de_champ_public) { [] }
render_views

it { expect(response.body).to have_link("Ajouter un champ supportant les critères d’inéligibilité") }
it { expect(response.body).to have_link("Ajouter un champ supportant les conditions d’inéligibilité") }
end

context 'rendered with tdc' do
let(:types_de_champ_public) { [{ type: :yes_no }] }
render_views

it { expect(response.body).not_to have_link("Ajouter un champ supportant les critères d’inéligibilité") }
it { expect(response.body).not_to have_link("Ajouter un champ supportant les conditions d’inéligibilité") }
end
end
end
Expand Down
6 changes: 3 additions & 3 deletions spec/system/administrateurs/procedure_ineligibilite_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
# explain which champs are compatible
visit edit_admin_procedure_ineligibilite_rules_path(procedure)
expect(page).to have_content("Inéligibilité des dossiers")
expect(page).to have_content("Pour configurer l’inéligibilité des dossiers, votre formulaire doit comporter au moins un champ supportant les critères d’inéligibilité. Il vous faut donc ajouter au moins un des champs suivant à votre formulaire : ")
click_on "Ajouter un champ supportant les critères d’inéligibilité"
expect(page).to have_content("Pour configurer l’inéligibilité des dossiers, votre formulaire doit comporter au moins un champ supportant les conditions d’inéligibilité. Il vous faut donc ajouter au moins un des champs suivant à votre formulaire : ")
click_on "Ajouter un champ supportant les conditions d’inéligibilité"

# setup a compatible champ
expect(page).to have_content('Champs du formulaire')
Expand All @@ -32,7 +32,7 @@
# setup rules and stuffs
expect(page).to have_content("Inéligibilité des dossiers")
fill_in "Message d’inéligibilité", with: "vous n'etes pas eligible"
find('label', text: 'Inéligibilité des dossiers').click
find('label', text: 'Bloquer le dépôt des dossiers répondant à des conditions d’inéligibilité').click
click_on "Ajouter une règle d’inéligibilité"
all('select').first.select 'Un champ oui non'
click_on 'Enregistrer'
Expand Down
Loading

0 comments on commit 8a2a814

Please sign in to comment.