2022-11-28 15:42:58 +01:00
|
|
|
RSpec.describe PrefillParams do
|
|
|
|
describe "#to_a" do
|
2022-12-21 19:20:47 +01:00
|
|
|
let(:procedure) { create(:procedure, :published, types_de_champ_public:, types_de_champ_private:) }
|
2022-11-28 15:42:58 +01:00
|
|
|
let(:dossier) { create(:dossier, :brouillon, procedure: procedure) }
|
2022-12-21 19:20:47 +01:00
|
|
|
let(:types_de_champ_public) { [] }
|
|
|
|
let(:types_de_champ_private) { [] }
|
2022-11-28 15:42:58 +01:00
|
|
|
|
2022-12-15 10:58:17 +01:00
|
|
|
subject(:prefill_params_array) { described_class.new(dossier, params).to_a }
|
2022-11-28 15:42:58 +01:00
|
|
|
|
|
|
|
context "when the stable ids match the TypeDeChamp of the corresponding procedure" do
|
2022-12-21 19:20:47 +01:00
|
|
|
let(:types_de_champ_public) { [{ type: :text }, { type: :textarea }] }
|
|
|
|
let(:type_de_champ_1) { procedure.published_revision.types_de_champ_public.first }
|
2022-11-28 15:42:58 +01:00
|
|
|
let(:value_1) { "any value" }
|
2022-12-01 11:17:48 +01:00
|
|
|
let(:champ_id_1) { find_champ_by_stable_id(dossier, type_de_champ_1.stable_id).id }
|
2022-11-28 15:42:58 +01:00
|
|
|
|
2022-12-21 19:20:47 +01:00
|
|
|
let(:type_de_champ_2) { procedure.published_revision.types_de_champ_public.second }
|
2022-11-28 15:42:58 +01:00
|
|
|
let(:value_2) { "another value" }
|
2022-12-01 11:17:48 +01:00
|
|
|
let(:champ_id_2) { find_champ_by_stable_id(dossier, type_de_champ_2.stable_id).id }
|
2022-11-28 15:42:58 +01:00
|
|
|
|
|
|
|
let(:params) {
|
|
|
|
{
|
2022-12-05 10:09:44 +01:00
|
|
|
"champ_#{type_de_champ_1.to_typed_id}" => value_1,
|
|
|
|
"champ_#{type_de_champ_2.to_typed_id}" => value_2
|
2022-11-28 15:42:58 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
it "builds an array of hash(id, value) matching all the given params" do
|
|
|
|
expect(prefill_params_array).to match([
|
|
|
|
{ id: champ_id_1, value: value_1 },
|
|
|
|
{ id: champ_id_2, value: value_2 }
|
|
|
|
])
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2022-12-05 10:09:44 +01:00
|
|
|
context "when the typed id is not prefixed by 'champ_'" do
|
2022-12-21 19:20:47 +01:00
|
|
|
let(:type_de_champ) { procedure.published_revision.types_de_champ_public.first }
|
|
|
|
let(:types_de_champ_public) { [{ type: :text }] }
|
2022-12-05 10:09:44 +01:00
|
|
|
|
|
|
|
let(:params) { { type_de_champ.to_typed_id => "value" } }
|
|
|
|
|
|
|
|
it "filters out the champ" do
|
|
|
|
expect(prefill_params_array).to match([])
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2022-11-28 15:42:58 +01:00
|
|
|
context "when the typed id is unknown" do
|
2022-12-05 10:09:44 +01:00
|
|
|
let(:params) { { "champ_jane_doe" => "value" } }
|
2022-11-28 15:42:58 +01:00
|
|
|
|
|
|
|
it "filters out the unknown params" do
|
|
|
|
expect(prefill_params_array).to match([])
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when there is no Champ that matches the TypeDeChamp with the given stable id' do
|
|
|
|
let!(:type_de_champ) { create(:type_de_champ_text) } # goes to another procedure
|
|
|
|
|
2022-12-05 10:09:44 +01:00
|
|
|
let(:params) { { "champ_#{type_de_champ.to_typed_id}" => "value" } }
|
2022-11-28 15:42:58 +01:00
|
|
|
|
|
|
|
it "filters out the param" do
|
|
|
|
expect(prefill_params_array).to match([])
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2022-12-21 19:20:47 +01:00
|
|
|
shared_examples "a champ public value that is authorized" do |type_de_champ_type, value|
|
|
|
|
context "when the type de champ is authorized (#{type_de_champ_type})" do
|
|
|
|
let(:types_de_champ_public) { [{ type: type_de_champ_type }] }
|
|
|
|
let(:type_de_champ) { procedure.published_revision.types_de_champ_public.first }
|
2022-12-01 11:17:48 +01:00
|
|
|
let(:champ_id) { find_champ_by_stable_id(dossier, type_de_champ.stable_id).id }
|
2022-11-28 15:42:58 +01:00
|
|
|
|
2022-12-05 10:09:44 +01:00
|
|
|
let(:params) { { "champ_#{type_de_champ.to_typed_id}" => value } }
|
2022-11-28 15:42:58 +01:00
|
|
|
|
|
|
|
it "builds an array of hash(id, value) matching the given params" do
|
|
|
|
expect(prefill_params_array).to match([{ id: champ_id, value: value }])
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2022-12-21 19:20:47 +01:00
|
|
|
shared_examples "a champ private value that is authorized" do |type_de_champ_type, value|
|
|
|
|
context "when the type de champ is authorized (#{type_de_champ_type})" do
|
|
|
|
let(:types_de_champ_private) { [{ type: type_de_champ_type }] }
|
|
|
|
let(:type_de_champ) { procedure.published_revision.types_de_champ_private.first }
|
|
|
|
let(:champ_id) { find_champ_by_stable_id(dossier, type_de_champ.stable_id).id }
|
|
|
|
|
|
|
|
let(:params) { { "champ_#{type_de_champ.to_typed_id}" => value } }
|
|
|
|
|
|
|
|
it "builds an array of hash(id, value) matching the given params" do
|
|
|
|
expect(prefill_params_array).to match([{ id: champ_id, value: value }])
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
shared_examples "a champ public value that is unauthorized" do |type_de_champ_type, value|
|
|
|
|
let(:types_de_champ_public) { [{ type: type_de_champ_type }] }
|
|
|
|
let(:type_de_champ) { procedure.published_revision.types_de_champ_public.first }
|
2022-11-28 15:42:58 +01:00
|
|
|
|
2022-12-05 10:09:44 +01:00
|
|
|
let(:params) { { "champ_#{type_de_champ.to_typed_id}" => value } }
|
2022-11-28 15:42:58 +01:00
|
|
|
|
2022-12-21 19:20:47 +01:00
|
|
|
context "when the type de champ is unauthorized (#{type_de_champ_type})" do
|
2022-11-28 15:42:58 +01:00
|
|
|
it "filters out the param" do
|
|
|
|
expect(prefill_params_array).to match([])
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2022-12-21 19:20:47 +01:00
|
|
|
it_behaves_like "a champ public value that is authorized", :text, "value"
|
|
|
|
it_behaves_like "a champ public value that is authorized", :textarea, "value"
|
|
|
|
it_behaves_like "a champ public value that is authorized", :decimal_number, "3.14"
|
|
|
|
it_behaves_like "a champ public value that is authorized", :integer_number, "42"
|
|
|
|
it_behaves_like "a champ public value that is authorized", :email, "value"
|
|
|
|
it_behaves_like "a champ public value that is authorized", :phone, "value"
|
|
|
|
it_behaves_like "a champ public value that is authorized", :iban, "value"
|
|
|
|
it_behaves_like "a champ public value that is authorized", :civilite, "M."
|
2023-01-18 12:52:38 +01:00
|
|
|
it_behaves_like "a champ public value that is authorized", :pays, "FR"
|
2023-01-12 17:42:02 +01:00
|
|
|
it_behaves_like "a champ public value that is authorized", :date, "2022-12-22"
|
|
|
|
it_behaves_like "a champ public value that is authorized", :datetime, "2022-12-22T10:30"
|
2023-01-06 14:01:59 +01:00
|
|
|
it_behaves_like "a champ public value that is authorized", :yes_no, "true"
|
|
|
|
it_behaves_like "a champ public value that is authorized", :yes_no, "false"
|
|
|
|
it_behaves_like "a champ public value that is authorized", :checkbox, "true"
|
|
|
|
it_behaves_like "a champ public value that is authorized", :checkbox, "false"
|
2023-01-18 09:47:22 +01:00
|
|
|
it_behaves_like "a champ public value that is authorized", :drop_down_list, "value"
|
2022-12-21 19:20:47 +01:00
|
|
|
|
|
|
|
it_behaves_like "a champ private value that is authorized", :text, "value"
|
|
|
|
it_behaves_like "a champ private value that is authorized", :textarea, "value"
|
|
|
|
it_behaves_like "a champ private value that is authorized", :decimal_number, "3.14"
|
|
|
|
it_behaves_like "a champ private value that is authorized", :integer_number, "42"
|
|
|
|
it_behaves_like "a champ private value that is authorized", :email, "value"
|
|
|
|
it_behaves_like "a champ private value that is authorized", :phone, "value"
|
|
|
|
it_behaves_like "a champ private value that is authorized", :iban, "value"
|
|
|
|
it_behaves_like "a champ private value that is authorized", :civilite, "M."
|
2023-01-18 12:52:38 +01:00
|
|
|
it_behaves_like "a champ private value that is authorized", :pays, "FR"
|
2023-01-12 17:42:02 +01:00
|
|
|
it_behaves_like "a champ private value that is authorized", :date, "2022-12-22"
|
|
|
|
it_behaves_like "a champ private value that is authorized", :datetime, "2022-12-22T10:30"
|
2023-01-06 14:01:59 +01:00
|
|
|
it_behaves_like "a champ private value that is authorized", :yes_no, "true"
|
|
|
|
it_behaves_like "a champ private value that is authorized", :yes_no, "false"
|
|
|
|
it_behaves_like "a champ private value that is authorized", :checkbox, "true"
|
|
|
|
it_behaves_like "a champ private value that is authorized", :checkbox, "false"
|
2023-01-18 09:47:22 +01:00
|
|
|
it_behaves_like "a champ private value that is authorized", :drop_down_list, "value"
|
2022-12-21 19:20:47 +01:00
|
|
|
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :decimal_number, "non decimal string"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :integer_number, "non integer string"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :number, "value"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :communes, "value"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :dossier_link, "value"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :titre_identite, "value"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :civilite, "value"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :date, "value"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :datetime, "value"
|
2023-01-12 17:42:02 +01:00
|
|
|
it_behaves_like "a champ public value that is unauthorized", :datetime, "12-22-2022T10:30"
|
2022-12-21 19:20:47 +01:00
|
|
|
it_behaves_like "a champ public value that is unauthorized", :multiple_drop_down_list, "value"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :linked_drop_down_list, "value"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :header_section, "value"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :explication, "value"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :piece_justificative, "value"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :repetition, "value"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :cnaf, "value"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :dgfip, "value"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :pole_emploi, "value"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :mesri, "value"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :carte, "value"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :address, "value"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :pays, "value"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :regions, "value"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :departements, "value"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :siret, "value"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :rna, "value"
|
|
|
|
it_behaves_like "a champ public value that is unauthorized", :annuaire_education, "value"
|
2022-11-28 15:42:58 +01:00
|
|
|
end
|
2022-12-01 11:17:48 +01:00
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def find_champ_by_stable_id(dossier, stable_id)
|
2022-12-21 19:20:47 +01:00
|
|
|
dossier.champs.joins(:type_de_champ).find_by(types_de_champ: { stable_id: stable_id })
|
2022-12-01 11:17:48 +01:00
|
|
|
end
|
2022-11-28 15:42:58 +01:00
|
|
|
end
|