Skip to content

Commit

Permalink
fix(TypesDeChamp::ConditionValidator): allow to use types_de_champ_pu…
Browse files Browse the repository at this point in the history
…blic on condition for types_de_champ_private
  • Loading branch information
mfo committed Jun 10, 2024
1 parent d2ccea7 commit 71c418e
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 14 deletions.
11 changes: 7 additions & 4 deletions app/validators/types_de_champ/condition_validator.rb
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
class TypesDeChamp::ConditionValidator < ActiveModel::EachValidator
def validate_each(procedure, attribute, types_de_champ)
public_tdcs = types_de_champ.to_a
.flat_map { _1.repetition? ? procedure.draft_revision.children_of(_1) : _1 }
tdcs = if attribute == :draft_types_de_champ_private
procedure.draft_revision.types_de_champ_for
else
procedure.draft_revision.types_de_champ_for(scope: :public)
end

public_tdcs
tdcs
.map.with_index
.filter_map { |tdc, i| tdc.condition? ? [tdc, i] : nil }
.map do |tdc, i|
[tdc, tdc.condition.errors(public_tdcs.take(i))]
[tdc, tdc.condition.errors(tdcs.take(i))]

Check warning on line 13 in app/validators/types_de_champ/condition_validator.rb

View check run for this annotation

Codecov / codecov/patch

app/validators/types_de_champ/condition_validator.rb#L13

Added line #L13 was not covered by tests
end
.filter { |_tdc, errors| errors.present? }
.each do |tdc, _error_hash|
Expand Down
31 changes: 23 additions & 8 deletions spec/models/procedure_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@
it { is_expected.to allow_value('text').on(:publication).for(:cadre_juridique) }

context 'with deliberation' do
let(:procedure) { build(:procedure, cadre_juridique: nil) }
let(:procedure) { build(:procedure, cadre_juridique: nil, revisions: [build(:procedure_revision)]) }

it { expect(procedure.valid?(:publication)).to eq(false) }

Expand Down Expand Up @@ -420,22 +420,37 @@
procedure.validate(:publication)
expect(procedure.errors.full_messages_for(:draft_types_de_champ_private)).to include(invalid_drop_down_error_message)
end
end

it 'validates that types de champ private condition works types de champ public and private' do
context 'when condition on champ private use public champ' do
include Logic
let(:types_de_champ_public) { [{ type: :decimal_number, stable_id: 1 }] }
let(:types_de_champ_private) { [{ type: :text, condition: ds_eq(champ_value(1), constant(2)), stable_id: 2 }] }
it 'validate without context' do
procedure.validate
expect(procedure.errors.full_messages_for(:draft_types_de_champ_private)).to be_empty
end

it 'validate allows condition' do
procedure.validate(:types_de_champ_private_editor)
expect(procedure.errors.full_messages_for(:draft_types_de_champ_private)).to be_empty
end
end

context 'when condition on champ private use public champ' do
context 'when condition on champ public use private champ' do
include Logic
let(:types_de_champ_private) { [{ type: :text, condition: ds_eq(champ_value(1), constant(2)) }] }
let(:types_de_champ_public) { [{ type: :number, stable_id: 1 }] }
let(:types_de_champ_public) { [{ type: :text, libelle: 'condition', condition: ds_eq(champ_value(1), constant(2)), stable_id: 2 }] }
let(:types_de_champ_private) { [{ type: :decimal_number, stable_id: 1 }] }
let(:error_on_condition) { "Le champ « condition » a une logique conditionnelle invalide" }

it 'validate without context' do
expect(procedure.validate).to be_truthy
procedure.validate
expect(procedure.errors.full_messages_for(:draft_types_de_champ_public)).to be_empty
end

it 'validate with types_de_champ_private_editor' do
expect(procedure.validate(:types_de_champ_private_editor)).to be_falsey
it 'validate prevent condition' do
procedure.validate(:types_de_champ_public_editor)
expect(procedure.errors.full_messages_for(:draft_types_de_champ_public)).to include(error_on_condition)
end
end
end
Expand Down
3 changes: 1 addition & 2 deletions spec/services/procedure_export_service_zip_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,7 @@ def attachments(champ) = champ.piece_justificative_file.attachments
ActiveSupport::Notifications.subscribed(callback, "sql.active_record") do
subject
end

expect(sql_count <= 58).to be_truthy
expect(sql_count <= 62).to be_truthy

dossier = dossiers.first

Expand Down

0 comments on commit 71c418e

Please sign in to comment.