Merge pull request #10872 from tchak/refactor-explicit-default-champs
ETQ dev, je voudrais que les champs par défaut des dossiers soient créés explicitement. Moins de callbacks – moins de magie !
This commit is contained in:
commit
21b6974def
54 changed files with 325 additions and 341 deletions
|
@ -10,7 +10,6 @@ class Dossiers::ErrorsFullMessagesComponent < ApplicationComponent
|
||||||
def dedup_and_partitioned_errors
|
def dedup_and_partitioned_errors
|
||||||
@dossier.errors.to_enum # ActiveModel::Errors.to_a is an alias to full_messages, we don't want that
|
@dossier.errors.to_enum # ActiveModel::Errors.to_a is an alias to full_messages, we don't want that
|
||||||
.to_a # but enum.to_a gives back an array
|
.to_a # but enum.to_a gives back an array
|
||||||
.uniq { |error| [error.inner_error.base] } # dedup cumulated errors from dossier.champs, dossier.champs_public, dossier.champs_private which run the validator one time per association
|
|
||||||
.map { |error| to_error_descriptor(error) }
|
.map { |error| to_error_descriptor(error) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ class API::Public::V1::DossiersController < API::Public::V1::BaseController
|
||||||
state: Dossier.states.fetch(:brouillon),
|
state: Dossier.states.fetch(:brouillon),
|
||||||
prefilled: true
|
prefilled: true
|
||||||
)
|
)
|
||||||
dossier.build_default_individual
|
dossier.build_default_values
|
||||||
if dossier.save
|
if dossier.save
|
||||||
dossier.prefill!(PrefillChamps.new(dossier, params.to_unsafe_h).to_a, PrefillIdentity.new(dossier, params.to_unsafe_h).to_h)
|
dossier.prefill!(PrefillChamps.new(dossier, params.to_unsafe_h).to_a, PrefillIdentity.new(dossier, params.to_unsafe_h).to_h)
|
||||||
render json: serialize_dossier(dossier), status: :created
|
render json: serialize_dossier(dossier), status: :created
|
||||||
|
|
|
@ -127,7 +127,7 @@ module Users
|
||||||
state: Dossier.states.fetch(:brouillon),
|
state: Dossier.states.fetch(:brouillon),
|
||||||
prefilled: true
|
prefilled: true
|
||||||
)
|
)
|
||||||
@prefilled_dossier.build_default_individual
|
@prefilled_dossier.build_default_values
|
||||||
if @prefilled_dossier.save
|
if @prefilled_dossier.save
|
||||||
@prefilled_dossier.prefill!(PrefillChamps.new(@prefilled_dossier, params.to_unsafe_h).to_a, PrefillIdentity.new(@prefilled_dossier, params.to_unsafe_h).to_h)
|
@prefilled_dossier.prefill!(PrefillChamps.new(@prefilled_dossier, params.to_unsafe_h).to_a, PrefillIdentity.new(@prefilled_dossier, params.to_unsafe_h).to_h)
|
||||||
end
|
end
|
||||||
|
|
|
@ -385,7 +385,7 @@ module Users
|
||||||
user: current_user,
|
user: current_user,
|
||||||
state: Dossier.states.fetch(:brouillon)
|
state: Dossier.states.fetch(:brouillon)
|
||||||
)
|
)
|
||||||
dossier.build_default_individual
|
dossier.build_default_values
|
||||||
dossier.save!
|
dossier.save!
|
||||||
DossierMailer.with(dossier:).notify_new_draft.deliver_later
|
DossierMailer.with(dossier:).notify_new_draft.deliver_later
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ class DossierDashboard < Administrate::BaseDashboard
|
||||||
en_construction_at: Field::DateTime,
|
en_construction_at: Field::DateTime,
|
||||||
en_instruction_at: Field::DateTime,
|
en_instruction_at: Field::DateTime,
|
||||||
processed_at: Field::DateTime,
|
processed_at: Field::DateTime,
|
||||||
champs_public: ChampCollectionField,
|
project_champs_public: ChampCollectionField,
|
||||||
groupe_instructeur: Field::BelongsTo
|
groupe_instructeur: Field::BelongsTo
|
||||||
}.freeze
|
}.freeze
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ class DossierDashboard < Administrate::BaseDashboard
|
||||||
:state,
|
:state,
|
||||||
:procedure,
|
:procedure,
|
||||||
:groupe_instructeur,
|
:groupe_instructeur,
|
||||||
:champs_public,
|
:project_champs_public,
|
||||||
:created_at,
|
:created_at,
|
||||||
:updated_at,
|
:updated_at,
|
||||||
:hidden_by_user_at,
|
:hidden_by_user_at,
|
||||||
|
|
|
@ -49,8 +49,6 @@ class Dossier < ApplicationRecord
|
||||||
# We have to remove champs in a particular order - champs with a reference to a parent have to be
|
# We have to remove champs in a particular order - champs with a reference to a parent have to be
|
||||||
# removed first, otherwise we get a foreign key constraint error.
|
# removed first, otherwise we get a foreign key constraint error.
|
||||||
has_many :champs_to_destroy, -> { order(:parent_id) }, class_name: 'Champ', inverse_of: false, dependent: :destroy
|
has_many :champs_to_destroy, -> { order(:parent_id) }, class_name: 'Champ', inverse_of: false, dependent: :destroy
|
||||||
has_many :champs_public, -> { root.public_only }, class_name: 'Champ', inverse_of: false
|
|
||||||
has_many :champs_private, -> { root.private_only }, class_name: 'Champ', inverse_of: false
|
|
||||||
|
|
||||||
has_many :commentaires, inverse_of: :dossier, dependent: :destroy
|
has_many :commentaires, inverse_of: :dossier, dependent: :destroy
|
||||||
has_many :preloaded_commentaires, -> { includes(:dossier_correction, piece_jointe_attachments: :blob) }, class_name: 'Commentaire', inverse_of: :dossier
|
has_many :preloaded_commentaires, -> { includes(:dossier_correction, piece_jointe_attachments: :blob) }, class_name: 'Commentaire', inverse_of: :dossier
|
||||||
|
@ -142,8 +140,6 @@ class Dossier < ApplicationRecord
|
||||||
after_destroy_commit :log_destroy
|
after_destroy_commit :log_destroy
|
||||||
|
|
||||||
accepts_nested_attributes_for :champs
|
accepts_nested_attributes_for :champs
|
||||||
accepts_nested_attributes_for :champs_public
|
|
||||||
accepts_nested_attributes_for :champs_private
|
|
||||||
accepts_nested_attributes_for :individual
|
accepts_nested_attributes_for :individual
|
||||||
|
|
||||||
include AASM
|
include AASM
|
||||||
|
@ -413,7 +409,6 @@ class Dossier < ApplicationRecord
|
||||||
|
|
||||||
delegate :siret, :siren, to: :etablissement, allow_nil: true
|
delegate :siret, :siren, to: :etablissement, allow_nil: true
|
||||||
delegate :france_connected_with_one_identity?, to: :user, allow_nil: true
|
delegate :france_connected_with_one_identity?, to: :user, allow_nil: true
|
||||||
before_save :build_default_champs_for_new_dossier, if: Proc.new { revision_id_was.nil? && parent_dossier_id.nil? && editing_fork_origin_id.nil? }
|
|
||||||
|
|
||||||
after_save :send_web_hook
|
after_save :send_web_hook
|
||||||
|
|
||||||
|
@ -471,29 +466,9 @@ class Dossier < ApplicationRecord
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_default_champs_for_new_dossier
|
def build_default_values
|
||||||
revision.build_champs_public(self).each do |champ|
|
build_default_individual
|
||||||
champs_public << champ
|
build_default_champs
|
||||||
end
|
|
||||||
revision.build_champs_private(self).each do |champ|
|
|
||||||
champs_private << champ
|
|
||||||
end
|
|
||||||
champs_public.filter { _1.repetition? && _1.mandatory? }.each do |champ|
|
|
||||||
champ.add_row(updated_by: nil)
|
|
||||||
end
|
|
||||||
champs_private.filter(&:repetition?).each do |champ|
|
|
||||||
champ.add_row(updated_by: nil)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def build_default_individual
|
|
||||||
if procedure.for_individual? && individual.blank?
|
|
||||||
self.individual = if france_connected_with_one_identity?
|
|
||||||
Individual.from_france_connect(user.france_connect_informations.first)
|
|
||||||
else
|
|
||||||
Individual.new
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def en_construction_ou_instruction?
|
def en_construction_ou_instruction?
|
||||||
|
@ -1176,6 +1151,33 @@ class Dossier < ApplicationRecord
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def build_default_champs
|
||||||
|
build_default_champs_for(revision.types_de_champ_public) if !champs.any?(&:public?)
|
||||||
|
build_default_champs_for(revision.types_de_champ_private) if !champs.any?(&:private?)
|
||||||
|
end
|
||||||
|
|
||||||
|
def build_default_champs_for(types_de_champ)
|
||||||
|
self.champs << types_de_champ.flat_map do |type_de_champ|
|
||||||
|
if type_de_champ.repetition? && (type_de_champ.private? || type_de_champ.mandatory?)
|
||||||
|
row_id = ULID.generate
|
||||||
|
parent = type_de_champ.build_champ(dossier: self)
|
||||||
|
[parent] + revision.children_of(type_de_champ).map { _1.build_champ(dossier: self, parent:, row_id:) }
|
||||||
|
else
|
||||||
|
type_de_champ.build_champ(dossier: self)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def build_default_individual
|
||||||
|
if procedure.for_individual? && individual.blank?
|
||||||
|
self.individual = if france_connected_with_one_identity?
|
||||||
|
Individual.from_france_connect(user.france_connect_informations.first)
|
||||||
|
else
|
||||||
|
Individual.new
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def create_missing_traitemets
|
def create_missing_traitemets
|
||||||
if en_construction_at.present? && traitements.en_construction.empty?
|
if en_construction_at.present? && traitements.en_construction.empty?
|
||||||
self.traitements.passer_en_construction(processed_at: en_construction_at)
|
self.traitements.passer_en_construction(processed_at: en_construction_at)
|
||||||
|
|
|
@ -39,7 +39,7 @@ class DossierPreloader
|
||||||
|
|
||||||
def revisions(pj_template: false)
|
def revisions(pj_template: false)
|
||||||
@revisions ||= ProcedureRevision.where(id: @dossiers.pluck(:revision_id).uniq)
|
@revisions ||= ProcedureRevision.where(id: @dossiers.pluck(:revision_id).uniq)
|
||||||
.includes(types_de_champ: pj_template ? { piece_justificative_template_attachment: :blob } : [])
|
.includes(types_de_champ_public: [], types_de_champ_private: [], types_de_champ: pj_template ? { piece_justificative_template_attachment: :blob } : [])
|
||||||
.index_by(&:id)
|
.index_by(&:id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -80,8 +80,6 @@ class DossierPreloader
|
||||||
dossier.association(:revision).target = revision
|
dossier.association(:revision).target = revision
|
||||||
end
|
end
|
||||||
dossier.association(:champs).target = champs
|
dossier.association(:champs).target = champs
|
||||||
dossier.association(:champs_public).target = dossier.project_champs_public
|
|
||||||
dossier.association(:champs_private).target = dossier.project_champs_private
|
|
||||||
|
|
||||||
# remove once parent_id is deprecated
|
# remove once parent_id is deprecated
|
||||||
champs_by_parent_id = champs.group_by(&:parent_id)
|
champs_by_parent_id = champs.group_by(&:parent_id)
|
||||||
|
|
|
@ -37,16 +37,6 @@ class ProcedureRevision < ApplicationRecord
|
||||||
|
|
||||||
serialize :ineligibilite_rules, LogicSerializer
|
serialize :ineligibilite_rules, LogicSerializer
|
||||||
|
|
||||||
def build_champs_public(dossier)
|
|
||||||
# reload: it can be out of sync in test if some tdcs are added wihtout using add_tdc
|
|
||||||
types_de_champ_public.reload.map { _1.build_champ(dossier:) }
|
|
||||||
end
|
|
||||||
|
|
||||||
def build_champs_private(dossier)
|
|
||||||
# reload: it can be out of sync in test if some tdcs are added wihtout using add_tdc
|
|
||||||
types_de_champ_private.reload.map { _1.build_champ(dossier:) }
|
|
||||||
end
|
|
||||||
|
|
||||||
def add_type_de_champ(params)
|
def add_type_de_champ(params)
|
||||||
parent_stable_id = params.delete(:parent_stable_id)
|
parent_stable_id = params.delete(:parent_stable_id)
|
||||||
parent_coordinate, _ = coordinate_and_tdc(parent_stable_id)
|
parent_coordinate, _ = coordinate_and_tdc(parent_stable_id)
|
||||||
|
@ -172,7 +162,7 @@ class ProcedureRevision < ApplicationRecord
|
||||||
.find_or_initialize_by(revision: self, user: user, for_procedure_preview: true, state: Dossier.states.fetch(:brouillon))
|
.find_or_initialize_by(revision: self, user: user, for_procedure_preview: true, state: Dossier.states.fetch(:brouillon))
|
||||||
|
|
||||||
if dossier.new_record?
|
if dossier.new_record?
|
||||||
dossier.build_default_individual
|
dossier.build_default_values
|
||||||
dossier.save!
|
dossier.save!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -7,11 +7,11 @@ module Maintenance
|
||||||
end
|
end
|
||||||
|
|
||||||
def process(cloned_dossier)
|
def process(cloned_dossier)
|
||||||
cloned_dossier.champs_private
|
cloned_dossier.project_champs_private
|
||||||
.filter { checkable_pj?(_1, cloned_dossier) }
|
.filter { checkable_pj?(_1, cloned_dossier) }
|
||||||
.map do |cloned_champ|
|
.map do |cloned_champ|
|
||||||
parent_champ = cloned_dossier.parent_dossier
|
parent_champ = cloned_dossier.parent_dossier
|
||||||
.champs_private
|
.project_champs_private
|
||||||
.find { _1.stable_id == cloned_champ.stable_id }
|
.find { _1.stable_id == cloned_champ.stable_id }
|
||||||
|
|
||||||
next if !parent_champ
|
next if !parent_champ
|
||||||
|
|
|
@ -21,7 +21,7 @@ RSpec.describe Dossiers::EnConstructionNotSubmittedComponent, type: :component d
|
||||||
end
|
end
|
||||||
|
|
||||||
context "with changes" do
|
context "with changes" do
|
||||||
before { fork.champs_public.first.update(value: "new value") }
|
before { fork.project_champs_public.first.update(value: "new value") }
|
||||||
|
|
||||||
it "inform user" do
|
it "inform user" do
|
||||||
expect(subject).to include("Des modifications n’ont pas encore été déposées")
|
expect(subject).to include("Des modifications n’ont pas encore été déposées")
|
||||||
|
|
|
@ -113,7 +113,7 @@ describe EditableChamp::SectionComponent, type: :component do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'contains as many text champ as repetition.rows' do
|
it 'contains as many text champ as repetition.rows' do
|
||||||
expect(page).to have_selector("fieldset fieldset input[type=text]", count: dossier.champs_public.find(&:repetition?).rows.size)
|
expect(page).to have_selector("fieldset fieldset input[type=text]", count: dossier.project_champs_public.find(&:repetition?).rows.size)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -515,7 +515,7 @@ describe API::V2::GraphqlController do
|
||||||
avis: []
|
avis: []
|
||||||
)
|
)
|
||||||
|
|
||||||
expected_champs = dossier.champs_public.map do |champ|
|
expected_champs = dossier.project_champs_public.map do |champ|
|
||||||
{
|
{
|
||||||
id: champ.to_typed_id,
|
id: champ.to_typed_id,
|
||||||
label: champ.libelle,
|
label: champ.libelle,
|
||||||
|
@ -546,7 +546,7 @@ describe API::V2::GraphqlController do
|
||||||
end
|
end
|
||||||
expect(gql_data[:dossier][:messages]).to match_array(expected_messages)
|
expect(gql_data[:dossier][:messages]).to match_array(expected_messages)
|
||||||
|
|
||||||
expect(gql_data[:dossier][:champs][0][:id]).to eq(dossier.champs_public[0].type_de_champ.to_typed_id)
|
expect(gql_data[:dossier][:champs][0][:id]).to eq(dossier.project_champs_public[0].type_de_champ.to_typed_id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -687,8 +687,8 @@ describe API::V2::GraphqlController do
|
||||||
context "champs" do
|
context "champs" do
|
||||||
let(:procedure) { create(:procedure, :published, :for_individual, administrateurs: [admin], types_de_champ_public: [{ type: :date }, { type: :datetime }]) }
|
let(:procedure) { create(:procedure, :published, :for_individual, administrateurs: [admin], types_de_champ_public: [{ type: :date }, { type: :datetime }]) }
|
||||||
let(:dossier) { create(:dossier, :en_construction, procedure: procedure) }
|
let(:dossier) { create(:dossier, :en_construction, procedure: procedure) }
|
||||||
let(:champ_date) { dossier.champs_public.first }
|
let(:champ_date) { dossier.project_champs_public.first }
|
||||||
let(:champ_datetime) { dossier.champs_public.second }
|
let(:champ_datetime) { dossier.project_champs_public.second }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
champ_date.update(value: '2019-07-10')
|
champ_date.update(value: '2019-07-10')
|
||||||
|
@ -1243,7 +1243,7 @@ describe API::V2::GraphqlController do
|
||||||
"mutation {
|
"mutation {
|
||||||
dossierModifierAnnotationText(input: {
|
dossierModifierAnnotationText(input: {
|
||||||
dossierId: \"#{dossier.to_typed_id}\",
|
dossierId: \"#{dossier.to_typed_id}\",
|
||||||
annotationId: \"#{dossier.champs_private.find { |c| c.type == 'Champs::TextChamp' }.to_typed_id}\",
|
annotationId: \"#{dossier.project_champs_private.find { |c| c.type == 'Champs::TextChamp' }.to_typed_id}\",
|
||||||
instructeurId: \"#{instructeur.to_typed_id}\",
|
instructeurId: \"#{instructeur.to_typed_id}\",
|
||||||
value: \"hello\"
|
value: \"hello\"
|
||||||
}) {
|
}) {
|
||||||
|
@ -1280,7 +1280,7 @@ describe API::V2::GraphqlController do
|
||||||
"mutation {
|
"mutation {
|
||||||
dossierModifierAnnotationCheckbox(input: {
|
dossierModifierAnnotationCheckbox(input: {
|
||||||
dossierId: \"#{dossier.to_typed_id}\",
|
dossierId: \"#{dossier.to_typed_id}\",
|
||||||
annotationId: \"#{dossier.champs_private.find { |c| c.type_champ == 'checkbox' }.to_typed_id}\",
|
annotationId: \"#{dossier.project_champs_private.find { |c| c.type_champ == 'checkbox' }.to_typed_id}\",
|
||||||
instructeurId: \"#{instructeur.to_typed_id}\",
|
instructeurId: \"#{instructeur.to_typed_id}\",
|
||||||
value: #{value}
|
value: #{value}
|
||||||
}) {
|
}) {
|
||||||
|
@ -1331,7 +1331,7 @@ describe API::V2::GraphqlController do
|
||||||
"mutation {
|
"mutation {
|
||||||
dossierModifierAnnotationCheckbox(input: {
|
dossierModifierAnnotationCheckbox(input: {
|
||||||
dossierId: \"#{dossier.to_typed_id}\",
|
dossierId: \"#{dossier.to_typed_id}\",
|
||||||
annotationId: \"#{dossier.champs_private.find { |c| c.type_champ == 'yes_no' }.to_typed_id}\",
|
annotationId: \"#{dossier.project_champs_private.find { |c| c.type_champ == 'yes_no' }.to_typed_id}\",
|
||||||
instructeurId: \"#{instructeur.to_typed_id}\",
|
instructeurId: \"#{instructeur.to_typed_id}\",
|
||||||
value: #{value}
|
value: #{value}
|
||||||
}) {
|
}) {
|
||||||
|
@ -1381,7 +1381,7 @@ describe API::V2::GraphqlController do
|
||||||
"mutation {
|
"mutation {
|
||||||
dossierModifierAnnotationDate(input: {
|
dossierModifierAnnotationDate(input: {
|
||||||
dossierId: \"#{dossier.to_typed_id}\",
|
dossierId: \"#{dossier.to_typed_id}\",
|
||||||
annotationId: \"#{dossier.champs_private.find { |c| c.type_champ == 'date' }.to_typed_id}\",
|
annotationId: \"#{dossier.project_champs_private.find { |c| c.type_champ == 'date' }.to_typed_id}\",
|
||||||
instructeurId: \"#{instructeur.to_typed_id}\",
|
instructeurId: \"#{instructeur.to_typed_id}\",
|
||||||
value: \"#{1.day.from_now.to_date.iso8601}\"
|
value: \"#{1.day.from_now.to_date.iso8601}\"
|
||||||
}) {
|
}) {
|
||||||
|
@ -1401,7 +1401,7 @@ describe API::V2::GraphqlController do
|
||||||
|
|
||||||
expect(gql_data).to eq(dossierModifierAnnotationDate: {
|
expect(gql_data).to eq(dossierModifierAnnotationDate: {
|
||||||
annotation: {
|
annotation: {
|
||||||
stringValue: dossier.reload.champs_private.find { |c| c.type_champ == 'date' }.to_s
|
stringValue: dossier.reload.project_champs_private.find { |c| c.type_champ == 'date' }.to_s
|
||||||
},
|
},
|
||||||
errors: nil
|
errors: nil
|
||||||
})
|
})
|
||||||
|
@ -1416,7 +1416,7 @@ describe API::V2::GraphqlController do
|
||||||
"mutation {
|
"mutation {
|
||||||
dossierModifierAnnotationDatetime(input: {
|
dossierModifierAnnotationDatetime(input: {
|
||||||
dossierId: \"#{dossier.to_typed_id}\",
|
dossierId: \"#{dossier.to_typed_id}\",
|
||||||
annotationId: \"#{dossier.champs_private.find { |c| c.type_champ == 'datetime' }.to_typed_id}\",
|
annotationId: \"#{dossier.project_champs_private.find { |c| c.type_champ == 'datetime' }.to_typed_id}\",
|
||||||
instructeurId: \"#{instructeur.to_typed_id}\",
|
instructeurId: \"#{instructeur.to_typed_id}\",
|
||||||
value: \"#{1.day.from_now.iso8601}\"
|
value: \"#{1.day.from_now.iso8601}\"
|
||||||
}) {
|
}) {
|
||||||
|
@ -1436,7 +1436,7 @@ describe API::V2::GraphqlController do
|
||||||
|
|
||||||
expect(gql_data).to eq(dossierModifierAnnotationDatetime: {
|
expect(gql_data).to eq(dossierModifierAnnotationDatetime: {
|
||||||
annotation: {
|
annotation: {
|
||||||
stringValue: dossier.reload.champs_private.find { |c| c.type_champ == 'datetime' }.to_s
|
stringValue: dossier.reload.project_champs_private.find { |c| c.type_champ == 'datetime' }.to_s
|
||||||
},
|
},
|
||||||
errors: nil
|
errors: nil
|
||||||
})
|
})
|
||||||
|
@ -1451,7 +1451,7 @@ describe API::V2::GraphqlController do
|
||||||
"mutation {
|
"mutation {
|
||||||
dossierModifierAnnotationDropDownList(input: {
|
dossierModifierAnnotationDropDownList(input: {
|
||||||
dossierId: \"#{dossier.to_typed_id}\",
|
dossierId: \"#{dossier.to_typed_id}\",
|
||||||
annotationId: \"#{dossier.champs_private.find { |c| c.type_champ == 'drop_down_list' }.to_typed_id}\",
|
annotationId: \"#{dossier.project_champs_private.find { |c| c.type_champ == 'drop_down_list' }.to_typed_id}\",
|
||||||
instructeurId: \"#{instructeur.to_typed_id}\",
|
instructeurId: \"#{instructeur.to_typed_id}\",
|
||||||
value: \"#{value}\"
|
value: \"#{value}\"
|
||||||
}) {
|
}) {
|
||||||
|
@ -1472,7 +1472,7 @@ describe API::V2::GraphqlController do
|
||||||
|
|
||||||
expect(gql_data).to eq(dossierModifierAnnotationDropDownList: {
|
expect(gql_data).to eq(dossierModifierAnnotationDropDownList: {
|
||||||
annotation: {
|
annotation: {
|
||||||
stringValue: dossier.reload.champs_private.find { |c| c.type_champ == 'drop_down_list' }.to_s
|
stringValue: dossier.reload.project_champs_private.find { |c| c.type_champ == 'drop_down_list' }.to_s
|
||||||
},
|
},
|
||||||
errors: nil
|
errors: nil
|
||||||
})
|
})
|
||||||
|
@ -1497,7 +1497,7 @@ describe API::V2::GraphqlController do
|
||||||
"mutation {
|
"mutation {
|
||||||
dossierModifierAnnotationIntegerNumber(input: {
|
dossierModifierAnnotationIntegerNumber(input: {
|
||||||
dossierId: \"#{dossier.to_typed_id}\",
|
dossierId: \"#{dossier.to_typed_id}\",
|
||||||
annotationId: \"#{dossier.champs_private.find { |c| c.type_champ == 'integer_number' }.to_typed_id}\",
|
annotationId: \"#{dossier.project_champs_private.find { |c| c.type_champ == 'integer_number' }.to_typed_id}\",
|
||||||
instructeurId: \"#{instructeur.to_typed_id}\",
|
instructeurId: \"#{instructeur.to_typed_id}\",
|
||||||
value: 42
|
value: 42
|
||||||
}) {
|
}) {
|
||||||
|
|
|
@ -4,7 +4,7 @@ describe Champs::PieceJustificativeController, type: :controller do
|
||||||
let(:user) { create(:user) }
|
let(:user) { create(:user) }
|
||||||
let(:procedure) { create(:procedure, :published, types_de_champ_public: [{ type: :piece_justificative }]) }
|
let(:procedure) { create(:procedure, :published, types_de_champ_public: [{ type: :piece_justificative }]) }
|
||||||
let(:dossier) { create(:dossier, user: user, procedure: procedure) }
|
let(:dossier) { create(:dossier, user: user, procedure: procedure) }
|
||||||
let(:champ) { dossier.champs_public.first }
|
let(:champ) { dossier.project_champs_public.first }
|
||||||
|
|
||||||
describe '#update' do
|
describe '#update' do
|
||||||
render_views
|
render_views
|
||||||
|
|
|
@ -6,7 +6,7 @@ describe Champs::RNAController, type: :controller do
|
||||||
|
|
||||||
describe '#show' do
|
describe '#show' do
|
||||||
let(:dossier) { create(:dossier, user: user, procedure: procedure) }
|
let(:dossier) { create(:dossier, user: user, procedure: procedure) }
|
||||||
let(:champ) { dossier.champs_public.first }
|
let(:champ) { dossier.project_champs_public.first }
|
||||||
|
|
||||||
let(:champs_public_attributes) do
|
let(:champs_public_attributes) do
|
||||||
champ_attributes = {}
|
champ_attributes = {}
|
||||||
|
|
|
@ -6,7 +6,7 @@ describe Champs::SiretController, type: :controller do
|
||||||
|
|
||||||
describe '#show' do
|
describe '#show' do
|
||||||
let(:dossier) { create(:dossier, user: user, procedure: procedure) }
|
let(:dossier) { create(:dossier, user: user, procedure: procedure) }
|
||||||
let(:champ) { dossier.champs_public.first }
|
let(:champ) { dossier.project_champs_public.first }
|
||||||
|
|
||||||
let(:champs_public_attributes) do
|
let(:champs_public_attributes) do
|
||||||
champ_attributes = {}
|
champ_attributes = {}
|
||||||
|
|
|
@ -483,7 +483,7 @@ describe Experts::AvisController, type: :controller do
|
||||||
context 'when the expert also shares the linked dossiers' do
|
context 'when the expert also shares the linked dossiers' do
|
||||||
context 'and the expert can access the linked dossiers' do
|
context 'and the expert can access the linked dossiers' do
|
||||||
let(:created_avis) { create(:avis, dossier: dossier, claimant: claimant, email: "toto3@gmail.com") }
|
let(:created_avis) { create(:avis, dossier: dossier, claimant: claimant, email: "toto3@gmail.com") }
|
||||||
let(:linked_dossier) { Dossier.find_by(id: dossier.reload.champs_public.filter(&:dossier_link?).filter_map(&:value)) }
|
let(:linked_dossier) { Dossier.find_by(id: dossier.reload.project_champs_public.filter(&:dossier_link?).filter_map(&:value)) }
|
||||||
let(:linked_avis) { create(:avis, dossier: linked_dossier, claimant: claimant) }
|
let(:linked_avis) { create(:avis, dossier: linked_dossier, claimant: claimant) }
|
||||||
let(:invite_linked_dossiers) { true }
|
let(:invite_linked_dossiers) { true }
|
||||||
|
|
||||||
|
|
|
@ -978,11 +978,11 @@ describe Instructeurs::DossiersController, type: :controller do
|
||||||
let(:another_instructeur) { create(:instructeur) }
|
let(:another_instructeur) { create(:instructeur) }
|
||||||
let(:now) { Time.zone.parse('01/01/2100') }
|
let(:now) { Time.zone.parse('01/01/2100') }
|
||||||
|
|
||||||
let(:champ_multiple_drop_down_list) { dossier.champs_private.first }
|
let(:champ_multiple_drop_down_list) { dossier.project_champs_private.first }
|
||||||
let(:champ_linked_drop_down_list) { dossier.champs_private.second }
|
let(:champ_linked_drop_down_list) { dossier.project_champs_private.second }
|
||||||
let(:champ_datetime) { dossier.champs_private.third }
|
let(:champ_datetime) { dossier.project_champs_private.third }
|
||||||
let(:champ_repetition) { dossier.champs_private.fourth }
|
let(:champ_repetition) { dossier.project_champs_private.fourth }
|
||||||
let(:champ_drop_down_list) { dossier.champs_private.fifth }
|
let(:champ_drop_down_list) { dossier.project_champs_private.fifth }
|
||||||
|
|
||||||
context 'when no invalid champs_public' do
|
context 'when no invalid champs_public' do
|
||||||
context "with new values for champs_private" do
|
context "with new values for champs_private" do
|
||||||
|
@ -1106,7 +1106,7 @@ describe Instructeurs::DossiersController, type: :controller do
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
let(:champ_decimal_number) { dossier.champs_public.first }
|
let(:champ_decimal_number) { dossier.project_champs_public.first }
|
||||||
|
|
||||||
let(:params) do
|
let(:params) do
|
||||||
{
|
{
|
||||||
|
|
|
@ -18,16 +18,16 @@ describe RechercheController, type: :controller do
|
||||||
before do
|
before do
|
||||||
instructeur.assign_to_procedure(dossier.procedure)
|
instructeur.assign_to_procedure(dossier.procedure)
|
||||||
|
|
||||||
dossier.champs_public[0].value = "Name of district A"
|
dossier.project_champs_public[0].value = "Name of district A"
|
||||||
dossier.champs_public[1].value = "Name of city A"
|
dossier.project_champs_public[1].value = "Name of city A"
|
||||||
dossier.champs_private[0].value = "Dossier A is complete"
|
dossier.project_champs_private[0].value = "Dossier A is complete"
|
||||||
dossier.champs_private[1].value = "Dossier A is valid"
|
dossier.project_champs_private[1].value = "Dossier A is valid"
|
||||||
dossier.save!
|
dossier.save!
|
||||||
|
|
||||||
dossier_with_expert.champs_public[0].value = "Name of district B"
|
dossier_with_expert.project_champs_public[0].value = "Name of district B"
|
||||||
dossier_with_expert.champs_public[1].value = "name of city B"
|
dossier_with_expert.project_champs_public[1].value = "name of city B"
|
||||||
dossier_with_expert.champs_private[0].value = "Dossier B is incomplete"
|
dossier_with_expert.project_champs_private[0].value = "Dossier B is incomplete"
|
||||||
dossier_with_expert.champs_private[1].value = "Dossier B is invalid"
|
dossier_with_expert.project_champs_private[1].value = "Dossier B is invalid"
|
||||||
dossier_with_expert.save!
|
dossier_with_expert.save!
|
||||||
|
|
||||||
perform_enqueued_jobs(only: DossierIndexSearchTermsJob)
|
perform_enqueued_jobs(only: DossierIndexSearchTermsJob)
|
||||||
|
|
|
@ -412,7 +412,7 @@ describe Users::DossiersController, type: :controller do
|
||||||
let(:procedure) { create(:procedure, :published, types_de_champ_public:) }
|
let(:procedure) { create(:procedure, :published, types_de_champ_public:) }
|
||||||
let(:types_de_champ_public) { [{ type: :text, mandatory: false }] }
|
let(:types_de_champ_public) { [{ type: :text, mandatory: false }] }
|
||||||
let!(:dossier) { create(:dossier, user:, procedure:) }
|
let!(:dossier) { create(:dossier, user:, procedure:) }
|
||||||
let(:first_champ) { dossier.champs_public.first }
|
let(:first_champ) { dossier.project_champs_public.first }
|
||||||
let(:anchor_to_first_champ) { controller.helpers.link_to first_champ.libelle, brouillon_dossier_path(anchor: first_champ.labelledby_id), class: 'error-anchor' }
|
let(:anchor_to_first_champ) { controller.helpers.link_to first_champ.libelle, brouillon_dossier_path(anchor: first_champ.labelledby_id), class: 'error-anchor' }
|
||||||
let(:value) { 'beautiful value' }
|
let(:value) { 'beautiful value' }
|
||||||
let(:now) { Time.zone.parse('01/01/2100') }
|
let(:now) { Time.zone.parse('01/01/2100') }
|
||||||
|
@ -529,7 +529,7 @@ describe Users::DossiersController, type: :controller do
|
||||||
let(:procedure) { create(:procedure, :published, types_de_champ_public:) }
|
let(:procedure) { create(:procedure, :published, types_de_champ_public:) }
|
||||||
let(:types_de_champ_public) { [{ type: :text, mandatory: false }] }
|
let(:types_de_champ_public) { [{ type: :text, mandatory: false }] }
|
||||||
let(:dossier) { create(:dossier, :en_construction, procedure:, user:) }
|
let(:dossier) { create(:dossier, :en_construction, procedure:, user:) }
|
||||||
let(:first_champ) { dossier.owner_editing_fork.champs_public.first }
|
let(:first_champ) { dossier.owner_editing_fork.project_champs_public.first }
|
||||||
let(:anchor_to_first_champ) { controller.helpers.link_to I18n.t('views.users.dossiers.fix_champ'), modifier_dossier_path(anchor: first_champ.labelledby_id), class: 'error-anchor' }
|
let(:anchor_to_first_champ) { controller.helpers.link_to I18n.t('views.users.dossiers.fix_champ'), modifier_dossier_path(anchor: first_champ.labelledby_id), class: 'error-anchor' }
|
||||||
let(:value) { 'beautiful value' }
|
let(:value) { 'beautiful value' }
|
||||||
let(:now) { Time.zone.parse('01/01/2100') }
|
let(:now) { Time.zone.parse('01/01/2100') }
|
||||||
|
@ -677,8 +677,8 @@ describe Users::DossiersController, type: :controller do
|
||||||
let(:procedure) { create(:procedure, :published, types_de_champ_public:) }
|
let(:procedure) { create(:procedure, :published, types_de_champ_public:) }
|
||||||
let(:types_de_champ_public) { [{}, { type: :piece_justificative, mandatory: false }] }
|
let(:types_de_champ_public) { [{}, { type: :piece_justificative, mandatory: false }] }
|
||||||
let(:dossier) { create(:dossier, user:, procedure:) }
|
let(:dossier) { create(:dossier, user:, procedure:) }
|
||||||
let(:first_champ) { dossier.champs_public.first }
|
let(:first_champ) { dossier.project_champs_public.first }
|
||||||
let(:piece_justificative_champ) { dossier.champs_public.last }
|
let(:piece_justificative_champ) { dossier.project_champs_public.last }
|
||||||
let(:value) { 'beautiful value' }
|
let(:value) { 'beautiful value' }
|
||||||
let(:file) { fixture_file_upload('spec/fixtures/files/piece_justificative_0.pdf', 'application/pdf') }
|
let(:file) { fixture_file_upload('spec/fixtures/files/piece_justificative_0.pdf', 'application/pdf') }
|
||||||
let(:now) { Time.zone.parse('01/01/2100') }
|
let(:now) { Time.zone.parse('01/01/2100') }
|
||||||
|
@ -773,8 +773,8 @@ describe Users::DossiersController, type: :controller do
|
||||||
render_views
|
render_views
|
||||||
|
|
||||||
let(:types_de_champ_public) { [{ type: :text }, { type: :integer_number }] }
|
let(:types_de_champ_public) { [{ type: :text }, { type: :integer_number }] }
|
||||||
let(:text_champ) { dossier.champs_public.first }
|
let(:text_champ) { dossier.project_champs_public.first }
|
||||||
let(:number_champ) { dossier.champs_public.last }
|
let(:number_champ) { dossier.project_champs_public.last }
|
||||||
let(:submit_payload) do
|
let(:submit_payload) do
|
||||||
{
|
{
|
||||||
id: dossier.id,
|
id: dossier.id,
|
||||||
|
@ -837,9 +837,9 @@ describe Users::DossiersController, type: :controller do
|
||||||
|
|
||||||
let(:procedure) { create(:procedure, :published, types_de_champ_public: [{}, { type: :piece_justificative }]) }
|
let(:procedure) { create(:procedure, :published, types_de_champ_public: [{}, { type: :piece_justificative }]) }
|
||||||
let!(:dossier) { create(:dossier, :en_construction, user:, procedure:) }
|
let!(:dossier) { create(:dossier, :en_construction, user:, procedure:) }
|
||||||
let(:first_champ) { dossier.champs_public.first }
|
let(:first_champ) { dossier.project_champs_public.first }
|
||||||
let(:anchor_to_first_champ) { controller.helpers.link_to I18n.t('views.users.dossiers.fix_champ'), brouillon_dossier_path(anchor: first_champ.labelledby_id), class: 'error-anchor' }
|
let(:anchor_to_first_champ) { controller.helpers.link_to I18n.t('views.users.dossiers.fix_champ'), brouillon_dossier_path(anchor: first_champ.labelledby_id), class: 'error-anchor' }
|
||||||
let(:piece_justificative_champ) { dossier.champs_public.last }
|
let(:piece_justificative_champ) { dossier.project_champs_public.last }
|
||||||
let(:value) { 'beautiful value' }
|
let(:value) { 'beautiful value' }
|
||||||
let(:file) { fixture_file_upload('spec/fixtures/files/piece_justificative_0.pdf', 'application/pdf') }
|
let(:file) { fixture_file_upload('spec/fixtures/files/piece_justificative_0.pdf', 'application/pdf') }
|
||||||
let(:now) { Time.zone.parse('01/01/2100') }
|
let(:now) { Time.zone.parse('01/01/2100') }
|
||||||
|
@ -962,7 +962,7 @@ describe Users::DossiersController, type: :controller do
|
||||||
|
|
||||||
before do
|
before do
|
||||||
first_champ.type_de_champ.update!(type_champ: :iban, mandatory: true, libelle: 'l')
|
first_champ.type_de_champ.update!(type_champ: :iban, mandatory: true, libelle: 'l')
|
||||||
dossier.champs_public.first.becomes!(Champs::IbanChamp).save!
|
dossier.project_champs_public.first.becomes!(Champs::IbanChamp).save!
|
||||||
|
|
||||||
subject
|
subject
|
||||||
end
|
end
|
||||||
|
@ -1000,7 +1000,7 @@ describe Users::DossiersController, type: :controller do
|
||||||
context 'when the champ is a phone number' do
|
context 'when the champ is a phone number' do
|
||||||
let(:procedure) { create(:procedure, :published, types_de_champ_public: [{ type: :phone }]) }
|
let(:procedure) { create(:procedure, :published, types_de_champ_public: [{ type: :phone }]) }
|
||||||
let!(:dossier) { create(:dossier, :en_construction, user:, procedure:) }
|
let!(:dossier) { create(:dossier, :en_construction, user:, procedure:) }
|
||||||
let(:first_champ) { dossier.champs_public.first }
|
let(:first_champ) { dossier.project_champs_public.first }
|
||||||
let(:now) { Time.zone.parse('01/01/2100') }
|
let(:now) { Time.zone.parse('01/01/2100') }
|
||||||
|
|
||||||
let(:submit_payload) do
|
let(:submit_payload) do
|
||||||
|
|
|
@ -11,6 +11,8 @@ FactoryBot.define do
|
||||||
individual { association(:individual, :empty, dossier: instance, strategy: :build) if procedure.for_individual? }
|
individual { association(:individual, :empty, dossier: instance, strategy: :build) if procedure.for_individual? }
|
||||||
|
|
||||||
transient do
|
transient do
|
||||||
|
populate_champs { false }
|
||||||
|
populate_annotations { false }
|
||||||
for_individual? { false }
|
for_individual? { false }
|
||||||
# For now a dossier must use a `create`d procedure, even if the dossier is only built (and not created).
|
# For now a dossier must use a `create`d procedure, even if the dossier is only built (and not created).
|
||||||
# This is because saving the dossier fails when the procedure has not been saved beforehand
|
# This is because saving the dossier fails when the procedure has not been saved beforehand
|
||||||
|
@ -19,6 +21,34 @@ FactoryBot.define do
|
||||||
procedure { create(:procedure, :published, :with_type_de_champ, :with_type_de_champ_private, for_individual: for_individual?) }
|
procedure { create(:procedure, :published, :with_type_de_champ, :with_type_de_champ_private, for_individual: for_individual?) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
after(:create) do |dossier, evaluator|
|
||||||
|
if evaluator.populate_champs
|
||||||
|
dossier.revision.types_de_champ_public.each do |type_de_champ|
|
||||||
|
value = if type_de_champ.simple_drop_down_list?
|
||||||
|
type_de_champ.drop_down_options.first
|
||||||
|
elsif type_de_champ.multiple_drop_down_list?
|
||||||
|
type_de_champ.drop_down_options.first(2).to_json
|
||||||
|
end
|
||||||
|
attrs = { stable_id: type_de_champ.stable_id, dossier:, value: }.compact
|
||||||
|
create(:"champ_do_not_use_#{type_de_champ.type_champ}", **attrs)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if evaluator.populate_annotations
|
||||||
|
dossier.revision.types_de_champ_private.each do |type_de_champ|
|
||||||
|
value = if type_de_champ.simple_drop_down_list?
|
||||||
|
type_de_champ.drop_down_options.first
|
||||||
|
elsif type_de_champ.multiple_drop_down_list?
|
||||||
|
type_de_champ.drop_down_options.first(2).to_json
|
||||||
|
end
|
||||||
|
attrs = { stable_id: type_de_champ.stable_id, dossier:, private: true, value: }.compact
|
||||||
|
create(:"champ_do_not_use_#{type_de_champ.type_champ}", **attrs)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
dossier.build_default_values
|
||||||
|
end
|
||||||
|
|
||||||
trait :with_entreprise do
|
trait :with_entreprise do
|
||||||
transient do
|
transient do
|
||||||
as_degraded_mode { false }
|
as_degraded_mode { false }
|
||||||
|
@ -259,35 +289,11 @@ FactoryBot.define do
|
||||||
end
|
end
|
||||||
|
|
||||||
trait :with_populated_champs do
|
trait :with_populated_champs do
|
||||||
after(:create) do |dossier, _evaluator|
|
populate_champs { true }
|
||||||
dossier.champs_to_destroy.where(private: false).destroy_all
|
|
||||||
dossier.types_de_champ.each do |type_de_champ|
|
|
||||||
value = if type_de_champ.simple_drop_down_list?
|
|
||||||
type_de_champ.drop_down_options.first
|
|
||||||
elsif type_de_champ.multiple_drop_down_list?
|
|
||||||
type_de_champ.drop_down_options.first(2).to_json
|
|
||||||
end
|
|
||||||
attrs = { stable_id: type_de_champ.stable_id, dossier:, value: }.compact
|
|
||||||
create(:"champ_do_not_use_#{type_de_champ.type_champ}", **attrs)
|
|
||||||
end
|
|
||||||
dossier.reload
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
trait :with_populated_annotations do
|
trait :with_populated_annotations do
|
||||||
after(:create) do |dossier, _evaluator|
|
populate_annotations { true }
|
||||||
dossier.champs_to_destroy.where(private: true).destroy_all
|
|
||||||
dossier.types_de_champ_private.each do |type_de_champ|
|
|
||||||
value = if type_de_champ.simple_drop_down_list?
|
|
||||||
type_de_champ.drop_down_options.first
|
|
||||||
elsif type_de_champ.multiple_drop_down_list?
|
|
||||||
type_de_champ.drop_down_options.first(2).to_json
|
|
||||||
end
|
|
||||||
attrs = { stable_id: type_de_champ.stable_id, dossier:, private: true, value: }.compact
|
|
||||||
create(:"champ_do_not_use_#{type_de_champ.type_champ}", **attrs)
|
|
||||||
end
|
|
||||||
dossier.reload
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
trait :prefilled do
|
trait :prefilled do
|
||||||
|
|
|
@ -71,8 +71,8 @@ RSpec.describe Types::DossierType, type: :graphql do
|
||||||
end
|
end
|
||||||
|
|
||||||
before do
|
before do
|
||||||
dossier.champs_public.find { _1.type_champ == TypeDeChamp.type_champs.fetch(:address) }.update(data: address)
|
dossier.project_champs_public.find { _1.type_champ == TypeDeChamp.type_champs.fetch(:address) }.update(data: address)
|
||||||
dossier.champs_public.find { _1.type_champ == TypeDeChamp.type_champs.fetch(:rna) }.update(data: rna)
|
dossier.project_champs_public.find { _1.type_champ == TypeDeChamp.type_champs.fetch(:rna) }.update(data: rna)
|
||||||
end
|
end
|
||||||
|
|
||||||
it do
|
it do
|
||||||
|
@ -82,7 +82,7 @@ RSpec.describe Types::DossierType, type: :graphql do
|
||||||
expect(data[:dossier][:champs][1][:commune][:code]).to eq('75119')
|
expect(data[:dossier][:champs][1][:commune][:code]).to eq('75119')
|
||||||
expect(data[:dossier][:champs][1][:commune][:postalCode]).to eq('75019')
|
expect(data[:dossier][:champs][1][:commune][:postalCode]).to eq('75019')
|
||||||
expect(data[:dossier][:champs][1][:departement][:code]).to eq('75')
|
expect(data[:dossier][:champs][1][:departement][:code]).to eq('75')
|
||||||
expect(data[:dossier][:champs][2][:etablissement][:siret]).to eq dossier.champs_public[2].etablissement.siret
|
expect(data[:dossier][:champs][2][:etablissement][:siret]).to eq dossier.project_champs_public[2].etablissement.siret
|
||||||
expect(data[:dossier][:champs][0][:id]).to eq(data[:dossier][:revision][:champDescriptors][0][:id])
|
expect(data[:dossier][:champs][0][:id]).to eq(data[:dossier][:revision][:champDescriptors][0][:id])
|
||||||
|
|
||||||
expect(data[:dossier][:champs][1][:address][:cityName]).to eq('Paris 19e Arrondissement')
|
expect(data[:dossier][:champs][1][:address][:cityName]).to eq('Paris 19e Arrondissement')
|
||||||
|
@ -99,7 +99,7 @@ RSpec.describe Types::DossierType, type: :graphql do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when etablissement is in degraded mode' do
|
context 'when etablissement is in degraded mode' do
|
||||||
let(:etablissement) { dossier.champs_public.third.etablissement }
|
let(:etablissement) { dossier.project_champs_public.third.etablissement }
|
||||||
before do
|
before do
|
||||||
etablissement.update(adresse: nil)
|
etablissement.update(adresse: nil)
|
||||||
end
|
end
|
||||||
|
@ -128,7 +128,7 @@ RSpec.describe Types::DossierType, type: :graphql do
|
||||||
let(:dossier) { create(:dossier, :en_construction, :with_populated_champs, procedure:) }
|
let(:dossier) { create(:dossier, :en_construction, :with_populated_champs, procedure:) }
|
||||||
let(:query) { DOSSIER_WITH_SELECTED_CHAMP_QUERY }
|
let(:query) { DOSSIER_WITH_SELECTED_CHAMP_QUERY }
|
||||||
let(:variables) { { number: dossier.id, id: champ.to_typed_id } }
|
let(:variables) { { number: dossier.id, id: champ.to_typed_id } }
|
||||||
let(:champ) { dossier.champs_public.last }
|
let(:champ) { dossier.project_champs_public.last }
|
||||||
|
|
||||||
context 'when champ exists' do
|
context 'when champ exists' do
|
||||||
it {
|
it {
|
||||||
|
@ -155,7 +155,7 @@ RSpec.describe Types::DossierType, type: :graphql do
|
||||||
let(:checkbox_value) { 'true' }
|
let(:checkbox_value) { 'true' }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
dossier.champs_public.first.update(value: checkbox_value)
|
dossier.project_champs_public.first.update(value: checkbox_value)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when checkbox is true' do
|
context 'when checkbox is true' do
|
||||||
|
@ -204,7 +204,7 @@ RSpec.describe Types::DossierType, type: :graphql do
|
||||||
let(:variables) { { number: dossier.id } }
|
let(:variables) { { number: dossier.id } }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
dossier.champs_public.first.update(value: linked_dossier.id)
|
dossier.project_champs_public.first.update(value: linked_dossier.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'en_construction' do
|
context 'en_construction' do
|
||||||
|
@ -233,7 +233,7 @@ RSpec.describe Types::DossierType, type: :graphql do
|
||||||
let(:variables) { { number: dossier.id } }
|
let(:variables) { { number: dossier.id } }
|
||||||
|
|
||||||
let(:rows) do
|
let(:rows) do
|
||||||
dossier.champs_public.first.rows.map do |champs|
|
dossier.project_champs_public.first.rows.map do |champs|
|
||||||
{ champs: champs.map { { id: _1.to_typed_id } } }
|
{ champs: champs.map { { id: _1.to_typed_id } } }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -10,8 +10,8 @@ RSpec.describe DossierIndexSearchTermsJob, type: :job do
|
||||||
subject(:perform_job) { described_class.perform_now(dossier.reload) }
|
subject(:perform_job) { described_class.perform_now(dossier.reload) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
dossier.champs_public.first.update_column(:value, "un nouveau champ")
|
dossier.project_champs_public.first.update_column(:value, "un nouveau champ")
|
||||||
dossier.champs_private.first.update_column(:value, "private champ")
|
dossier.project_champs_private.first.update_column(:value, "private champ")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "update search terms columns" do
|
it "update search terms columns" do
|
||||||
|
|
|
@ -29,11 +29,11 @@ describe 'Recovery::Revision::LifeCycle' do
|
||||||
|
|
||||||
it do
|
it do
|
||||||
expect { DossierPreloader.load_one(dossier) }.not_to raise_error(ArgumentError)
|
expect { DossierPreloader.load_one(dossier) }.not_to raise_error(ArgumentError)
|
||||||
expect(dossier.champs_public.size).to eq(1)
|
expect(dossier.project_champs_public.size).to eq(1)
|
||||||
expect(dossier.champs.size).to eq(2)
|
expect(dossier.champs.size).to eq(2)
|
||||||
importer.load
|
importer.load
|
||||||
expect { DossierPreloader.load_one(dossier) }.not_to raise_error(ArgumentError)
|
expect { DossierPreloader.load_one(dossier) }.not_to raise_error(ArgumentError)
|
||||||
expect(dossier.champs_public.size).to eq(2)
|
expect(dossier.project_champs_public.size).to eq(2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -75,11 +75,11 @@ describe AttestationTemplate, type: :model do
|
||||||
end
|
end
|
||||||
|
|
||||||
before do
|
before do
|
||||||
dossier.champs_public
|
dossier.project_champs_public
|
||||||
.find { |champ| champ.libelle == 'libelleA' }
|
.find { |champ| champ.libelle == 'libelleA' }
|
||||||
.update(value: 'libelle1')
|
.update(value: 'libelle1')
|
||||||
|
|
||||||
dossier.champs_public
|
dossier.project_champs_public
|
||||||
.find { |champ| champ.libelle == 'libelleB' }
|
.find { |champ| champ.libelle == 'libelleB' }
|
||||||
.update(value: 'libelle2')
|
.update(value: 'libelle2')
|
||||||
end
|
end
|
||||||
|
|
|
@ -86,8 +86,8 @@ describe Champ do
|
||||||
let(:dossier) { create(:dossier) }
|
let(:dossier) { create(:dossier) }
|
||||||
|
|
||||||
it 'partition public and private' do
|
it 'partition public and private' do
|
||||||
expect(dossier.champs_public.count).to eq(1)
|
expect(dossier.project_champs_public.count).to eq(1)
|
||||||
expect(dossier.champs_private.count).to eq(1)
|
expect(dossier.project_champs_private.count).to eq(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ describe Champ do
|
||||||
|
|
||||||
context 'when a procedure has 2 revisions' do
|
context 'when a procedure has 2 revisions' do
|
||||||
it 'does not duplicate the champs' do
|
it 'does not duplicate the champs' do
|
||||||
expect(dossier.champs_public.count).to eq(1)
|
expect(dossier.project_champs_public.count).to eq(1)
|
||||||
expect(procedure.revisions.count).to eq(2)
|
expect(procedure.revisions.count).to eq(2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -111,7 +111,7 @@ describe Champ do
|
||||||
before { procedure.publish }
|
before { procedure.publish }
|
||||||
|
|
||||||
it 'does not duplicate the champs private' do
|
it 'does not duplicate the champs private' do
|
||||||
expect(dossier.champs_private.count).to eq(1)
|
expect(dossier.project_champs_private.count).to eq(1)
|
||||||
expect(procedure.revisions.count).to eq(2)
|
expect(procedure.revisions.count).to eq(2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -122,12 +122,12 @@ describe Champ do
|
||||||
create(:procedure, types_de_champ_public: [{}, { type: :header_section }, { type: :repetition, mandatory: true, children: [{ type: :header_section }] }], types_de_champ_private: [{}, { type: :header_section }])
|
create(:procedure, types_de_champ_public: [{}, { type: :header_section }, { type: :repetition, mandatory: true, children: [{ type: :header_section }] }], types_de_champ_private: [{}, { type: :header_section }])
|
||||||
end
|
end
|
||||||
let(:dossier) { create(:dossier, procedure: procedure) }
|
let(:dossier) { create(:dossier, procedure: procedure) }
|
||||||
let(:public_champ) { dossier.champs_public.first }
|
let(:public_champ) { dossier.project_champs_public.first }
|
||||||
let(:private_champ) { dossier.champs_private.first }
|
let(:private_champ) { dossier.project_champs_private.first }
|
||||||
let(:champ_in_repetition) { dossier.champs_public.find(&:repetition?).champs.first }
|
let(:champ_in_repetition) { dossier.project_champs_public.find(&:repetition?).champs.first }
|
||||||
let(:standalone_champ) { build(:champ, type_de_champ: build(:type_de_champ), dossier: build(:dossier)) }
|
let(:standalone_champ) { build(:champ, type_de_champ: build(:type_de_champ), dossier: build(:dossier)) }
|
||||||
let(:public_sections) { dossier.champs_public.filter(&:header_section?) }
|
let(:public_sections) { dossier.project_champs_public.filter(&:header_section?) }
|
||||||
let(:private_sections) { dossier.champs_private.filter(&:header_section?) }
|
let(:private_sections) { dossier.project_champs_private.filter(&:header_section?) }
|
||||||
let(:sections_in_repetition) { dossier.champs.filter(&:child?).filter(&:header_section?) }
|
let(:sections_in_repetition) { dossier.champs.filter(&:child?).filter(&:header_section?) }
|
||||||
|
|
||||||
it 'returns the sibling sections of a champ' do
|
it 'returns the sibling sections of a champ' do
|
||||||
|
|
|
@ -61,7 +61,7 @@ RSpec.describe DossierChampsConcern do
|
||||||
end
|
end
|
||||||
|
|
||||||
context "missing champ" do
|
context "missing champ" do
|
||||||
before { dossier; Champs::TextChamp.destroy_all }
|
before { dossier.champs.where(type: 'Champs::TextChamp').destroy_all; dossier.reload }
|
||||||
|
|
||||||
it {
|
it {
|
||||||
expect(subject.new_record?).to be_truthy
|
expect(subject.new_record?).to be_truthy
|
||||||
|
@ -94,7 +94,7 @@ RSpec.describe DossierChampsConcern do
|
||||||
it { expect(subject.persisted?).to be_truthy }
|
it { expect(subject.persisted?).to be_truthy }
|
||||||
|
|
||||||
context "missing champ" do
|
context "missing champ" do
|
||||||
before { dossier; Champs::TextChamp.destroy_all }
|
before { dossier.champs.where(type: 'Champs::TextChamp').destroy_all; dossier.reload }
|
||||||
|
|
||||||
it {
|
it {
|
||||||
expect(subject.new_record?).to be_truthy
|
expect(subject.new_record?).to be_truthy
|
||||||
|
|
|
@ -120,15 +120,15 @@ RSpec.describe DossierCloneConcern do
|
||||||
|
|
||||||
context 'public are duplicated' do
|
context 'public are duplicated' do
|
||||||
it do
|
it do
|
||||||
expect(new_dossier.champs_public.count).to eq(dossier.champs_public.count)
|
expect(new_dossier.project_champs_public.count).to eq(dossier.project_champs_public.count)
|
||||||
expect(new_dossier.champs_public.ids).not_to eq(dossier.champs_public.ids)
|
expect(new_dossier.project_champs_public.map(&:id)).not_to eq(dossier.project_champs_public.map(&:id))
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'keeps champs.values' do
|
it 'keeps champs.values' do
|
||||||
original_first_champ = dossier.champs_public.first
|
original_first_champ = dossier.project_champs_public.first
|
||||||
original_first_champ.update!(value: 'kthxbye')
|
original_first_champ.update!(value: 'kthxbye')
|
||||||
|
|
||||||
expect(new_dossier.champs_public.first.value).to eq(original_first_champ.value)
|
expect(new_dossier.project_champs_public.first.value).to eq(original_first_champ.value)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for Champs::Repetition with rows, original_champ.repetition and rows are duped' do
|
context 'for Champs::Repetition with rows, original_champ.repetition and rows are duped' do
|
||||||
|
@ -192,26 +192,26 @@ RSpec.describe DossierCloneConcern do
|
||||||
let(:types_de_champ_private) { [{}] }
|
let(:types_de_champ_private) { [{}] }
|
||||||
|
|
||||||
it 'reset champs private values' do
|
it 'reset champs private values' do
|
||||||
expect(new_dossier.champs_private.count).to eq(dossier.champs_private.count)
|
expect(new_dossier.project_champs_private.count).to eq(dossier.project_champs_private.count)
|
||||||
expect(new_dossier.champs_private.ids).not_to eq(dossier.champs_private.ids)
|
expect(new_dossier.project_champs_private.map(&:id)).not_to eq(dossier.project_champs_private.map(&:id))
|
||||||
original_first_champs_private = dossier.champs_private.first
|
original_first_champs_private = dossier.project_champs_private.first
|
||||||
original_first_champs_private.update!(value: 'kthxbye')
|
original_first_champs_private.update!(value: 'kthxbye')
|
||||||
|
|
||||||
expect(new_dossier.champs_private.first.value).not_to eq(original_first_champs_private.value)
|
expect(new_dossier.project_champs_private.first.value).not_to eq(original_first_champs_private.value)
|
||||||
expect(new_dossier.champs_private.first.value).to eq(nil)
|
expect(new_dossier.project_champs_private.first.value).to eq(nil)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "as a fork" do
|
context "as a fork" do
|
||||||
let(:new_dossier) { dossier.clone(fork: true) }
|
let(:new_dossier) { dossier.clone(fork: true) }
|
||||||
before { dossier.champs_public.reload } # we compare timestamps so we have to get the precision limit from the db }
|
before { dossier.project_champs_public } # we compare timestamps so we have to get the precision limit from the db }
|
||||||
|
|
||||||
it do
|
it do
|
||||||
expect(new_dossier.editing_fork_origin).to eq(dossier)
|
expect(new_dossier.editing_fork_origin).to eq(dossier)
|
||||||
expect(new_dossier.champs_public[0].id).not_to eq(dossier.champs_public[0].id)
|
expect(new_dossier.project_champs_public[0].id).not_to eq(dossier.project_champs_public[0].id)
|
||||||
expect(new_dossier.champs_public[0].created_at).to eq(dossier.champs_public[0].created_at)
|
expect(new_dossier.project_champs_public[0].created_at).to eq(dossier.project_champs_public[0].created_at)
|
||||||
expect(new_dossier.champs_public[0].updated_at).to eq(dossier.champs_public[0].updated_at)
|
expect(new_dossier.project_champs_public[0].updated_at).to eq(dossier.project_champs_public[0].updated_at)
|
||||||
end
|
end
|
||||||
|
|
||||||
context "piece justificative champ" do
|
context "piece justificative champ" do
|
||||||
|
@ -343,11 +343,11 @@ RSpec.describe DossierCloneConcern do
|
||||||
dossier.debounce_index_search_terms_flag.remove
|
dossier.debounce_index_search_terms_flag.remove
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect { subject }.to change { dossier.reload.champs.size }.by(0) }
|
it { expect { subject }.to change { dossier.champs.size }.by(0) }
|
||||||
it { expect { subject }.not_to change { dossier.reload.champs.order(:created_at).reject { _1.stable_id.in?([99, 994]) }.map(&:value) } }
|
it { expect { subject }.not_to change { dossier.champs.order(:created_at).reject { _1.stable_id.in?([99, 994]) }.map(&:value) } }
|
||||||
it { expect { subject }.to have_enqueued_job(DossierIndexSearchTermsJob).with(dossier) }
|
it { expect { subject }.to have_enqueued_job(DossierIndexSearchTermsJob).with(dossier) }
|
||||||
it { expect { subject }.to change { dossier.reload.champs.find { _1.stable_id == 99 }.value }.from('old value').to('new value') }
|
it { expect { subject }.to change { dossier.champs.find { _1.stable_id == 99 }.value }.from('old value').to('new value') }
|
||||||
it { expect { subject }.to change { dossier.reload.champs.find { _1.stable_id == 994 }.value }.from('old value').to('new value in repetition') }
|
it { expect { subject }.to change { dossier.champs.find { _1.stable_id == 994 }.value }.from('old value').to('new value in repetition') }
|
||||||
|
|
||||||
it 'fork is hidden after merge' do
|
it 'fork is hidden after merge' do
|
||||||
subject
|
subject
|
||||||
|
@ -386,11 +386,10 @@ RSpec.describe DossierCloneConcern do
|
||||||
added_repetition_champ.update(value: "new value in repetition champ")
|
added_repetition_champ.update(value: "new value in repetition champ")
|
||||||
dossier.reload
|
dossier.reload
|
||||||
super()
|
super()
|
||||||
dossier.reload
|
|
||||||
}
|
}
|
||||||
|
|
||||||
it { expect { subject }.to change { dossier.reload.champs.size }.by(1) }
|
it { expect { subject }.to change { dossier.champs.size }.by(1) }
|
||||||
it { expect { subject }.to change { dossier.reload.champs.order(:created_at).map(&:to_s) }.from(['old value', 'old value', 'Non', 'old value', 'old value']).to(['new value for updated champ', 'Non', 'old value', 'old value', 'new value for added champ', 'new value in repetition champ']) }
|
it { expect { subject }.to change { dossier.champs.order(:created_at).map(&:to_s) }.from(['old value', 'old value', 'Non', 'old value', 'old value']).to(['new value for updated champ', 'Non', 'old value', 'old value', 'new value for added champ', 'new value in repetition champ']) }
|
||||||
|
|
||||||
it "dossier after merge should be on last published revision" do
|
it "dossier after merge should be on last published revision" do
|
||||||
expect(dossier.revision_id).to eq(procedure.revisions.first.id)
|
expect(dossier.revision_id).to eq(procedure.revisions.first.id)
|
||||||
|
|
|
@ -43,7 +43,7 @@ RSpec.describe DossierPrefillableConcern do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't change champs_public" do
|
it "doesn't change champs_public" do
|
||||||
expect { fill }.not_to change { dossier.champs_public.to_a }
|
expect { fill }.not_to change { dossier.project_champs_public.to_a }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -71,12 +71,12 @@ RSpec.describe DossierPrefillableConcern do
|
||||||
it "updates the champs with the new values and mark them as prefilled" do
|
it "updates the champs with the new values and mark them as prefilled" do
|
||||||
fill
|
fill
|
||||||
|
|
||||||
expect(dossier.champs_public.first.value).to eq(value_1)
|
expect(dossier.project_champs_public.first.value).to eq(value_1)
|
||||||
expect(dossier.champs_public.first.prefilled).to eq(true)
|
expect(dossier.project_champs_public.first.prefilled).to eq(true)
|
||||||
expect(dossier.champs_public.last.value).to eq(value_2)
|
expect(dossier.project_champs_public.last.value).to eq(value_2)
|
||||||
expect(dossier.champs_public.last.prefilled).to eq(true)
|
expect(dossier.project_champs_public.last.prefilled).to eq(true)
|
||||||
expect(dossier.champs_private.first.value).to eq(value_3)
|
expect(dossier.project_champs_private.first.value).to eq(value_3)
|
||||||
expect(dossier.champs_private.first.prefilled).to eq(true)
|
expect(dossier.project_champs_private.first.prefilled).to eq(true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -91,11 +91,11 @@ RSpec.describe DossierPrefillableConcern do
|
||||||
it_behaves_like 'a dossier marked as prefilled'
|
it_behaves_like 'a dossier marked as prefilled'
|
||||||
|
|
||||||
it "still updates the champ" do
|
it "still updates the champ" do
|
||||||
expect { fill }.to change { dossier.champs_public.first.value }.from(nil).to(value)
|
expect { fill }.to change { dossier.project_champs_public.first.value }.from(nil).to(value)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "still marks it as prefilled" do
|
it "still marks it as prefilled" do
|
||||||
expect { fill }.to change { dossier.champs_public.first.prefilled }.from(nil).to(true)
|
expect { fill }.to change { dossier.project_champs_public.first.prefilled }.from(nil).to(true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -115,7 +115,7 @@ RSpec.describe DossierPrefillableConcern do
|
||||||
|
|
||||||
it "updates the champs with the new values and mark them as prefilled" do
|
it "updates the champs with the new values and mark them as prefilled" do
|
||||||
fill
|
fill
|
||||||
expect(dossier.champs_public.first.value).to eq(value_1)
|
expect(dossier.project_champs_public.first.value).to eq(value_1)
|
||||||
expect(dossier.individual).to be_nil # Fix #9486
|
expect(dossier.individual).to be_nil # Fix #9486
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -293,19 +293,19 @@ describe DossierRebaseConcern do
|
||||||
let(:datetime_type_de_champ) { types_de_champ.find { _1.stable_id == 103 } }
|
let(:datetime_type_de_champ) { types_de_champ.find { _1.stable_id == 103 } }
|
||||||
let(:yes_no_type_de_champ) { types_de_champ.find { _1.stable_id == 104 } }
|
let(:yes_no_type_de_champ) { types_de_champ.find { _1.stable_id == 104 } }
|
||||||
|
|
||||||
let(:text_champ) { dossier.champs_public.find { _1.stable_id == 1 } }
|
let(:text_champ) { dossier.project_champs_public.find { _1.stable_id == 1 } }
|
||||||
let(:repetition_champ) { dossier.champs_public.find { _1.stable_id == 101 } }
|
let(:repetition_champ) { dossier.project_champs_public.find { _1.stable_id == 101 } }
|
||||||
let(:datetime_champ) { dossier.champs_public.find { _1.stable_id == 103 } }
|
let(:datetime_champ) { dossier.project_champs_public.find { _1.stable_id == 103 } }
|
||||||
|
|
||||||
let(:rebased_text_champ) { dossier.champs_public.find { _1.stable_id == 1 } }
|
let(:rebased_text_champ) { dossier.project_champs_public.find { _1.stable_id == 1 } }
|
||||||
let(:rebased_repetition_champ) { dossier.champs_public.find { _1.stable_id == 101 } }
|
let(:rebased_repetition_champ) { dossier.project_champs_public.find { _1.stable_id == 101 } }
|
||||||
let(:rebased_datetime_champ) { dossier.champs_public.find { _1.stable_id == 103 } }
|
let(:rebased_datetime_champ) { dossier.project_champs_public.find { _1.stable_id == 103 } }
|
||||||
let(:rebased_number_champ) { dossier.champs_public.find { _1.stable_id == 105 } }
|
let(:rebased_number_champ) { dossier.project_champs_public.find { _1.stable_id == 105 } }
|
||||||
|
|
||||||
let(:rebased_new_repetition_champ) { dossier.champs_public.find { _1.libelle == "une autre repetition" } }
|
let(:rebased_new_repetition_champ) { dossier.project_champs_public.find { _1.libelle == "une autre repetition" } }
|
||||||
|
|
||||||
let(:private_text_type_de_champ) { types_de_champ.find { _1.stable_id == 11 } }
|
let(:private_text_type_de_champ) { types_de_champ.find { _1.stable_id == 11 } }
|
||||||
let(:rebased_private_text_champ) { dossier.champs_private.find { _1.stable_id == 11 } }
|
let(:rebased_private_text_champ) { dossier.project_champs_private.find { _1.stable_id == 11 } }
|
||||||
|
|
||||||
context "when revision is published" do
|
context "when revision is published" do
|
||||||
before do
|
before do
|
||||||
|
@ -345,16 +345,17 @@ describe DossierRebaseConcern do
|
||||||
|
|
||||||
datetime_champ.update(value: Time.zone.now.to_s)
|
datetime_champ.update(value: Time.zone.now.to_s)
|
||||||
text_champ.update(value: 'bonjour')
|
text_champ.update(value: 'bonjour')
|
||||||
|
text_champ.type_de_champ
|
||||||
# Add two rows then remove previous to last row in order to create a "hole" in the sequence
|
# Add two rows then remove previous to last row in order to create a "hole" in the sequence
|
||||||
repetition_champ.add_row(updated_by: 'test')
|
repetition_champ.add_row(updated_by: 'test')
|
||||||
repetition_champ.add_row(updated_by: 'test')
|
repetition_champ.add_row(updated_by: 'test')
|
||||||
repetition_champ.champs.where(row_id: repetition_champ.rows[-2].first.row_id).destroy_all
|
repetition_champ.champs.where(row_id: repetition_champ.row_ids[-2]).destroy_all
|
||||||
repetition_champ.reload
|
dossier.reload
|
||||||
end
|
end
|
||||||
|
|
||||||
it "updates the brouillon champs with the latest revision changes" do
|
it "updates the brouillon champs with the latest revision changes" do
|
||||||
expect(dossier.revision).to eq(procedure.published_revision)
|
expect(dossier.revision).to eq(procedure.published_revision)
|
||||||
expect(dossier.champs_public.size).to eq(5)
|
expect(dossier.project_champs_public.size).to eq(5)
|
||||||
expect(dossier.champs.count(&:public?)).to eq(7)
|
expect(dossier.champs.count(&:public?)).to eq(7)
|
||||||
expect(repetition_champ.rows.size).to eq(2)
|
expect(repetition_champ.rows.size).to eq(2)
|
||||||
expect(repetition_champ.rows[0].size).to eq(1)
|
expect(repetition_champ.rows[0].size).to eq(1)
|
||||||
|
@ -367,7 +368,7 @@ describe DossierRebaseConcern do
|
||||||
|
|
||||||
expect(procedure.revisions.size).to eq(3)
|
expect(procedure.revisions.size).to eq(3)
|
||||||
expect(dossier.revision).to eq(procedure.published_revision)
|
expect(dossier.revision).to eq(procedure.published_revision)
|
||||||
expect(dossier.champs_public.size).to eq(7)
|
expect(dossier.project_champs_public.size).to eq(7)
|
||||||
expect(dossier.champs.count(&:public?)).to eq(13)
|
expect(dossier.champs.count(&:public?)).to eq(13)
|
||||||
expect(rebased_text_champ.value).to eq(text_champ.value)
|
expect(rebased_text_champ.value).to eq(text_champ.value)
|
||||||
expect(rebased_text_champ.type_de_champ).not_to eq(text_champ.type_de_champ)
|
expect(rebased_text_champ.type_de_champ).not_to eq(text_champ.type_de_champ)
|
||||||
|
@ -404,7 +405,7 @@ describe DossierRebaseConcern do
|
||||||
let(:dossier) { create(:dossier, :en_construction, procedure:) }
|
let(:dossier) { create(:dossier, :en_construction, procedure:) }
|
||||||
|
|
||||||
it 'is noop' do
|
it 'is noop' do
|
||||||
expect { subject }.not_to change { dossier.reload.champs_public[0].rebased_at }
|
expect { subject }.not_to change { dossier.reload.project_champs_public[0].rebased_at }
|
||||||
expect { subject }.not_to change { dossier.updated_at }
|
expect { subject }.not_to change { dossier.updated_at }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -430,38 +431,38 @@ describe DossierRebaseConcern do
|
||||||
|
|
||||||
context 'when a dropdown option is added' do
|
context 'when a dropdown option is added' do
|
||||||
before do
|
before do
|
||||||
dossier.champs_public.first.update(value: 'v1')
|
dossier.project_champs_public.first.update(value: 'v1')
|
||||||
|
|
||||||
stable_id = procedure.draft_revision.types_de_champ.find_by(libelle: 'l1')
|
stable_id = procedure.draft_revision.types_de_champ.find_by(libelle: 'l1')
|
||||||
tdc_to_update = procedure.draft_revision.find_and_ensure_exclusive_use(stable_id)
|
tdc_to_update = procedure.draft_revision.find_and_ensure_exclusive_use(stable_id)
|
||||||
tdc_to_update.update(drop_down_options: ["option", "updated", "v1"])
|
tdc_to_update.update(drop_down_options: ["option", "updated", "v1"])
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect { subject }.not_to change { dossier.champs_public.first.value } }
|
it { expect { subject }.not_to change { dossier.project_champs_public.first.value } }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when a dropdown option is removed' do
|
context 'when a dropdown option is removed' do
|
||||||
before do
|
before do
|
||||||
dossier.champs_public.first.update(value: 'v1')
|
dossier.project_champs_public.first.update(value: 'v1')
|
||||||
|
|
||||||
stable_id = procedure.draft_revision.types_de_champ.find_by(libelle: 'l1')
|
stable_id = procedure.draft_revision.types_de_champ.find_by(libelle: 'l1')
|
||||||
tdc_to_update = procedure.draft_revision.find_and_ensure_exclusive_use(stable_id)
|
tdc_to_update = procedure.draft_revision.find_and_ensure_exclusive_use(stable_id)
|
||||||
tdc_to_update.update(drop_down_options: ["option", "updated"])
|
tdc_to_update.update(drop_down_options: ["option", "updated"])
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect { subject }.to change { dossier.champs_public.first.value }.from('v1').to(nil) }
|
it { expect { subject }.to change { dossier.project_champs_public.first.value }.from('v1').to(nil) }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when a dropdown unused option is removed' do
|
context 'when a dropdown unused option is removed' do
|
||||||
before do
|
before do
|
||||||
dossier.champs_public.first.update(value: 'v1')
|
dossier.project_champs_public.first.update(value: 'v1')
|
||||||
|
|
||||||
stable_id = procedure.draft_revision.types_de_champ.find_by(libelle: 'l1')
|
stable_id = procedure.draft_revision.types_de_champ.find_by(libelle: 'l1')
|
||||||
tdc_to_update = procedure.draft_revision.find_and_ensure_exclusive_use(stable_id)
|
tdc_to_update = procedure.draft_revision.find_and_ensure_exclusive_use(stable_id)
|
||||||
tdc_to_update.update(drop_down_options: ["v1", "updated"])
|
tdc_to_update.update(drop_down_options: ["v1", "updated"])
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect { subject }.not_to change { dossier.champs_public.first.value } }
|
it { expect { subject }.not_to change { dossier.project_champs_public.first.value } }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -476,38 +477,38 @@ describe DossierRebaseConcern do
|
||||||
|
|
||||||
context 'when a dropdown option is added' do
|
context 'when a dropdown option is added' do
|
||||||
before do
|
before do
|
||||||
dossier.champs_public.first.update(value: '["v1"]')
|
dossier.project_champs_public.first.update(value: '["v1"]')
|
||||||
|
|
||||||
stable_id = procedure.draft_revision.types_de_champ.find_by(libelle: 'l1')
|
stable_id = procedure.draft_revision.types_de_champ.find_by(libelle: 'l1')
|
||||||
tdc_to_update = procedure.draft_revision.find_and_ensure_exclusive_use(stable_id)
|
tdc_to_update = procedure.draft_revision.find_and_ensure_exclusive_use(stable_id)
|
||||||
tdc_to_update.update(drop_down_options: ["option", "updated", "v1"])
|
tdc_to_update.update(drop_down_options: ["option", "updated", "v1"])
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect { subject }.not_to change { dossier.champs_public.first.value } }
|
it { expect { subject }.not_to change { dossier.project_champs_public.first.value } }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when a dropdown option is removed' do
|
context 'when a dropdown option is removed' do
|
||||||
before do
|
before do
|
||||||
dossier.champs_public.first.update(value: '["v1", "option"]')
|
dossier.project_champs_public.first.update(value: '["v1", "option"]')
|
||||||
|
|
||||||
stable_id = procedure.draft_revision.types_de_champ.find_by(libelle: 'l1')
|
stable_id = procedure.draft_revision.types_de_champ.find_by(libelle: 'l1')
|
||||||
tdc_to_update = procedure.draft_revision.find_and_ensure_exclusive_use(stable_id)
|
tdc_to_update = procedure.draft_revision.find_and_ensure_exclusive_use(stable_id)
|
||||||
tdc_to_update.update(drop_down_options: ["option", "updated"])
|
tdc_to_update.update(drop_down_options: ["option", "updated"])
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect { subject }.to change { dossier.champs_public.first.value }.from('["v1","option"]').to('["option"]') }
|
it { expect { subject }.to change { dossier.project_champs_public.first.value }.from('["v1","option"]').to('["option"]') }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when a dropdown unused option is removed' do
|
context 'when a dropdown unused option is removed' do
|
||||||
before do
|
before do
|
||||||
dossier.champs_public.first.update(value: '["v1"]')
|
dossier.project_champs_public.first.update(value: '["v1"]')
|
||||||
|
|
||||||
stable_id = procedure.draft_revision.types_de_champ.find_by(libelle: 'l1')
|
stable_id = procedure.draft_revision.types_de_champ.find_by(libelle: 'l1')
|
||||||
tdc_to_update = procedure.draft_revision.find_and_ensure_exclusive_use(stable_id)
|
tdc_to_update = procedure.draft_revision.find_and_ensure_exclusive_use(stable_id)
|
||||||
tdc_to_update.update(drop_down_options: ["v1", "updated"])
|
tdc_to_update.update(drop_down_options: ["v1", "updated"])
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect { subject }.not_to change { dossier.champs_public.first.value } }
|
it { expect { subject }.not_to change { dossier.project_champs_public.first.value } }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -522,38 +523,38 @@ describe DossierRebaseConcern do
|
||||||
|
|
||||||
context 'when a dropdown option is added' do
|
context 'when a dropdown option is added' do
|
||||||
before do
|
before do
|
||||||
dossier.champs_public.first.update(value: '["v1",""]')
|
dossier.project_champs_public.first.update(value: '["v1",""]')
|
||||||
|
|
||||||
stable_id = procedure.draft_revision.types_de_champ.find_by(libelle: 'l1')
|
stable_id = procedure.draft_revision.types_de_champ.find_by(libelle: 'l1')
|
||||||
tdc_to_update = procedure.draft_revision.find_and_ensure_exclusive_use(stable_id)
|
tdc_to_update = procedure.draft_revision.find_and_ensure_exclusive_use(stable_id)
|
||||||
tdc_to_update.update(drop_down_options: ["--titre1--", "option", "v1", "updated", "--titre2--", "option2", "v2"])
|
tdc_to_update.update(drop_down_options: ["--titre1--", "option", "v1", "updated", "--titre2--", "option2", "v2"])
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect { subject }.not_to change { dossier.champs_public.first.value } }
|
it { expect { subject }.not_to change { dossier.project_champs_public.first.value } }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when a dropdown option is removed' do
|
context 'when a dropdown option is removed' do
|
||||||
before do
|
before do
|
||||||
dossier.champs_public.first.update(value: '["v1","option2"]')
|
dossier.project_champs_public.first.update(value: '["v1","option2"]')
|
||||||
|
|
||||||
stable_id = procedure.draft_revision.types_de_champ.find_by(libelle: 'l1')
|
stable_id = procedure.draft_revision.types_de_champ.find_by(libelle: 'l1')
|
||||||
tdc_to_update = procedure.draft_revision.find_and_ensure_exclusive_use(stable_id)
|
tdc_to_update = procedure.draft_revision.find_and_ensure_exclusive_use(stable_id)
|
||||||
tdc_to_update.update(drop_down_options: ["--titre1--", "option", "updated", "--titre2--", "option2", "v2"])
|
tdc_to_update.update(drop_down_options: ["--titre1--", "option", "updated", "--titre2--", "option2", "v2"])
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect { subject }.to change { dossier.champs_public.first.value }.from('["v1","option2"]').to(nil) }
|
it { expect { subject }.to change { dossier.project_champs_public.first.value }.from('["v1","option2"]').to(nil) }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when a dropdown unused option is removed' do
|
context 'when a dropdown unused option is removed' do
|
||||||
before do
|
before do
|
||||||
dossier.champs_public.first.update(value: '["v1",""]')
|
dossier.project_champs_public.first.update(value: '["v1",""]')
|
||||||
|
|
||||||
stable_id = procedure.draft_revision.types_de_champ.find_by(libelle: 'l1')
|
stable_id = procedure.draft_revision.types_de_champ.find_by(libelle: 'l1')
|
||||||
tdc_to_update = procedure.draft_revision.find_and_ensure_exclusive_use(stable_id)
|
tdc_to_update = procedure.draft_revision.find_and_ensure_exclusive_use(stable_id)
|
||||||
tdc_to_update.update(drop_down_options: ["--titre1--", "v1", "updated", "--titre2--", "option2", "v2"])
|
tdc_to_update.update(drop_down_options: ["--titre1--", "v1", "updated", "--titre2--", "option2", "v2"])
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect { subject }.not_to change { dossier.champs_public.first.value } }
|
it { expect { subject }.not_to change { dossier.project_champs_public.first.value } }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -568,14 +569,14 @@ describe DossierRebaseConcern do
|
||||||
|
|
||||||
context 'and the cadastre are removed' do
|
context 'and the cadastre are removed' do
|
||||||
before do
|
before do
|
||||||
dossier.champs_public.first.update(value: 'v1', geo_areas: [build(:geo_area, :cadastre)])
|
dossier.project_champs_public.first.update(value: 'v1', geo_areas: [build(:geo_area, :cadastre)])
|
||||||
|
|
||||||
stable_id = procedure.draft_revision.types_de_champ.find_by(libelle: 'l1')
|
stable_id = procedure.draft_revision.types_de_champ.find_by(libelle: 'l1')
|
||||||
tdc_to_update = procedure.draft_revision.find_and_ensure_exclusive_use(stable_id)
|
tdc_to_update = procedure.draft_revision.find_and_ensure_exclusive_use(stable_id)
|
||||||
tdc_to_update.update(cadastres: false)
|
tdc_to_update.update(cadastres: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect { subject }.to change { dossier.champs_public.first.cadastres.count }.from(1).to(0) }
|
it { expect { subject }.to change { dossier.project_champs_public.first.cadastres.count }.from(1).to(0) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -626,7 +627,7 @@ describe DossierRebaseConcern do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when the first tdc type is updated' do
|
context 'when the first tdc type is updated' do
|
||||||
def first_champ = dossier.champs_public.first
|
def first_champ = dossier.project_champs_public.first
|
||||||
|
|
||||||
before do
|
before do
|
||||||
first_champ.update(value: 'v1', external_id: '123', geo_areas: [build(:geo_area)])
|
first_champ.update(value: 'v1', external_id: '123', geo_areas: [build(:geo_area)])
|
||||||
|
@ -727,7 +728,7 @@ describe DossierRebaseConcern do
|
||||||
parent.update(type_champ: :integer_number)
|
parent.update(type_champ: :integer_number)
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect { subject }.to change { dossier.champs_public.first.champs.count }.from(2).to(0) }
|
it { expect { subject }.to change { dossier.project_champs_public.first.champs.count }.from(2).to(0) }
|
||||||
it { expect { subject }.to change { Champ.count }.from(3).to(1) }
|
it { expect { subject }.to change { Champ.count }.from(3).to(1) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
describe DossierSearchableConcern do
|
describe DossierSearchableConcern do
|
||||||
let(:champ_public) { dossier.champs_public.first }
|
let(:champ_public) { dossier.project_champs_public.first }
|
||||||
let(:champ_private) { dossier.champs_private.first }
|
let(:champ_private) { dossier.project_champs_private.first }
|
||||||
|
|
||||||
describe '#index_search_terms' do
|
describe '#index_search_terms' do
|
||||||
let(:etablissement) { dossier.etablissement }
|
let(:etablissement) { dossier.etablissement }
|
||||||
|
|
|
@ -169,11 +169,11 @@ describe TagsSubstitutionConcern, type: :model do
|
||||||
|
|
||||||
context 'and their value in the dossier are not nil' do
|
context 'and their value in the dossier are not nil' do
|
||||||
before do
|
before do
|
||||||
dossier.champs_public
|
dossier.project_champs_public
|
||||||
.find { |champ| champ.libelle == 'libelleA' }
|
.find { |champ| champ.libelle == 'libelleA' }
|
||||||
.update(value: 'libelle1')
|
.update(value: 'libelle1')
|
||||||
|
|
||||||
dossier.champs_public
|
dossier.project_champs_public
|
||||||
.find { |champ| champ.libelle == "libelle\xc2\xA0B".encode('utf-8') }
|
.find { |champ| champ.libelle == "libelle\xc2\xA0B".encode('utf-8') }
|
||||||
.update(value: 'libelle2')
|
.update(value: 'libelle2')
|
||||||
end
|
end
|
||||||
|
@ -195,7 +195,7 @@ describe TagsSubstitutionConcern, type: :model do
|
||||||
|
|
||||||
context 'and their value in the dossier are not nil' do
|
context 'and their value in the dossier are not nil' do
|
||||||
before do
|
before do
|
||||||
dossier.champs_public
|
dossier.project_champs_public
|
||||||
.find { |champ| champ.libelle == "Intitulé de l'‘«\"évènement\"»’" }
|
.find { |champ| champ.libelle == "Intitulé de l'‘«\"évènement\"»’" }
|
||||||
.update(value: 'ceci est mon évènement')
|
.update(value: 'ceci est mon évènement')
|
||||||
end
|
end
|
||||||
|
@ -217,7 +217,7 @@ describe TagsSubstitutionConcern, type: :model do
|
||||||
|
|
||||||
context 'and their value in the dossier are not nil' do
|
context 'and their value in the dossier are not nil' do
|
||||||
before do
|
before do
|
||||||
dossier.champs_public
|
dossier.project_champs_public
|
||||||
.find { |champ| champ.libelle == "bon pote -- c'est top" }
|
.find { |champ| champ.libelle == "bon pote -- c'est top" }
|
||||||
.update(value: 'ceci est mon évènement')
|
.update(value: 'ceci est mon évènement')
|
||||||
end
|
end
|
||||||
|
@ -316,7 +316,7 @@ describe TagsSubstitutionConcern, type: :model do
|
||||||
let(:template) { '--libelleA--' }
|
let(:template) { '--libelleA--' }
|
||||||
|
|
||||||
context 'and its value in the dossier is not nil' do
|
context 'and its value in the dossier is not nil' do
|
||||||
before { dossier.champs_private.first.update(value: 'libelle1') }
|
before { dossier.project_champs_private.first.update(value: 'libelle1') }
|
||||||
|
|
||||||
it { is_expected.to eq('libelle1') }
|
it { is_expected.to eq('libelle1') }
|
||||||
end
|
end
|
||||||
|
@ -339,7 +339,7 @@ describe TagsSubstitutionConcern, type: :model do
|
||||||
context 'champs publics are valid tags' do
|
context 'champs publics are valid tags' do
|
||||||
let(:types_de_champ_public) { [{ libelle: 'libelleA' }] }
|
let(:types_de_champ_public) { [{ libelle: 'libelleA' }] }
|
||||||
|
|
||||||
before { dossier.champs_public.first.update(value: 'libelle1') }
|
before { dossier.project_champs_public.first.update(value: 'libelle1') }
|
||||||
|
|
||||||
it { is_expected.to eq('libelle1') }
|
it { is_expected.to eq('libelle1') }
|
||||||
end
|
end
|
||||||
|
@ -358,11 +358,11 @@ describe TagsSubstitutionConcern, type: :model do
|
||||||
|
|
||||||
context 'and its value in the dossier are not nil' do
|
context 'and its value in the dossier are not nil' do
|
||||||
before do
|
before do
|
||||||
dossier.champs_public
|
dossier.project_champs_public
|
||||||
.find { |champ| champ.type_champ == TypeDeChamp.type_champs.fetch(:date) }
|
.find { |champ| champ.type_champ == TypeDeChamp.type_champs.fetch(:date) }
|
||||||
.update(value: '2017-04-15')
|
.update(value: '2017-04-15')
|
||||||
|
|
||||||
dossier.champs_public
|
dossier.project_champs_public
|
||||||
.find { |champ| champ.type_champ == TypeDeChamp.type_champs.fetch(:datetime) }
|
.find { |champ| champ.type_champ == TypeDeChamp.type_champs.fetch(:datetime) }
|
||||||
.update(value: '2017-09-13 09:00')
|
.update(value: '2017-09-13 09:00')
|
||||||
end
|
end
|
||||||
|
@ -433,7 +433,7 @@ describe TagsSubstitutionConcern, type: :model do
|
||||||
end
|
end
|
||||||
|
|
||||||
context "match breaking and non breaking spaces" do
|
context "match breaking and non breaking spaces" do
|
||||||
before { dossier.champs_public.first.update(value: 'valeur') }
|
before { dossier.project_champs_public.first.update(value: 'valeur') }
|
||||||
|
|
||||||
shared_examples "treat all kinds of space as equivalent" do
|
shared_examples "treat all kinds of space as equivalent" do
|
||||||
context 'and the champ has a non breaking space' do
|
context 'and the champ has a non breaking space' do
|
||||||
|
@ -480,7 +480,7 @@ describe TagsSubstitutionConcern, type: :model do
|
||||||
|
|
||||||
before do
|
before do
|
||||||
draft_type_de_champ.update(libelle: 'mon nouveau libellé')
|
draft_type_de_champ.update(libelle: 'mon nouveau libellé')
|
||||||
dossier.champs_public.first.update(value: 'valeur')
|
dossier.project_champs_public.first.update(value: 'valeur')
|
||||||
procedure.update!(draft_revision: procedure.create_new_revision, published_revision: procedure.draft_revision)
|
procedure.update!(draft_revision: procedure.create_new_revision, published_revision: procedure.draft_revision)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -513,7 +513,7 @@ describe TagsSubstitutionConcern, type: :model do
|
||||||
context 'in a champ' do
|
context 'in a champ' do
|
||||||
let(:types_de_champ_public) { [{ libelle: 'libelleA' }] }
|
let(:types_de_champ_public) { [{ libelle: 'libelleA' }] }
|
||||||
|
|
||||||
before { dossier.champs_public.first.update(value: 'hey <a href="https://oops.com">anchor</a>') }
|
before { dossier.project_champs_public.first.update(value: 'hey <a href="https://oops.com">anchor</a>') }
|
||||||
|
|
||||||
it { is_expected.to eq('hey <a href="https://oops.com">anchor</a> --nom--') }
|
it { is_expected.to eq('hey <a href="https://oops.com">anchor</a> --nom--') }
|
||||||
end
|
end
|
||||||
|
|
|
@ -10,9 +10,9 @@ describe DossierPreloader do
|
||||||
end
|
end
|
||||||
let(:procedure) { create(:procedure, types_de_champ_public: types_de_champ) }
|
let(:procedure) { create(:procedure, types_de_champ_public: types_de_champ) }
|
||||||
let(:dossier) { create(:dossier, procedure: procedure) }
|
let(:dossier) { create(:dossier, procedure: procedure) }
|
||||||
let(:repetition) { subject.champs_public.second }
|
let(:repetition) { subject.project_champs_public.second }
|
||||||
let(:repetition_optional) { subject.champs_public.third }
|
let(:repetition_optional) { subject.project_champs_public.third }
|
||||||
let(:first_child) { subject.champs_public.second.champs.first }
|
let(:first_child) { subject.project_champs_public.second.champs.first }
|
||||||
|
|
||||||
describe 'all' do
|
describe 'all' do
|
||||||
subject { DossierPreloader.load_one(dossier, pj_template: true) }
|
subject { DossierPreloader.load_one(dossier, pj_template: true) }
|
||||||
|
@ -25,20 +25,20 @@ describe DossierPreloader do
|
||||||
callback = lambda { |*_args| count += 1 }
|
callback = lambda { |*_args| count += 1 }
|
||||||
ActiveSupport::Notifications.subscribed(callback, "sql.active_record") do
|
ActiveSupport::Notifications.subscribed(callback, "sql.active_record") do
|
||||||
expect(subject.id).to eq(dossier.id)
|
expect(subject.id).to eq(dossier.id)
|
||||||
expect(subject.champs_public.size).to eq(types_de_champ.size)
|
expect(subject.project_champs_public.size).to eq(types_de_champ.size)
|
||||||
expect(subject.changed?).to be false
|
expect(subject.changed?).to be false
|
||||||
|
|
||||||
expect(first_child.type).to eq('Champs::TextChamp')
|
expect(first_child.type).to eq('Champs::TextChamp')
|
||||||
expect(repetition.id).not_to eq(first_child.id)
|
expect(repetition.id).not_to eq(first_child.id)
|
||||||
expect(subject.champs.first.dossier).to eq(subject)
|
expect(subject.champs.first.dossier).to eq(subject)
|
||||||
expect(subject.champs.find(&:public?).dossier).to eq(subject)
|
expect(subject.champs.find(&:public?).dossier).to eq(subject)
|
||||||
expect(subject.champs_public.first.dossier).to eq(subject)
|
expect(subject.project_champs_public.first.dossier).to eq(subject)
|
||||||
|
|
||||||
expect(subject.champs_public.first.type_de_champ.piece_justificative_template.attached?).to eq(false)
|
expect(subject.project_champs_public.first.type_de_champ.piece_justificative_template.attached?).to eq(false)
|
||||||
|
|
||||||
expect(subject.champs.first.conditional?).to eq(false)
|
expect(subject.champs.first.conditional?).to eq(false)
|
||||||
expect(subject.champs.find(&:public?).conditional?).to eq(false)
|
expect(subject.champs.find(&:public?).conditional?).to eq(false)
|
||||||
expect(subject.champs_public.first.conditional?).to eq(false)
|
expect(subject.project_champs_public.first.conditional?).to eq(false)
|
||||||
|
|
||||||
expect(first_child.parent).to eq(repetition)
|
expect(first_child.parent).to eq(repetition)
|
||||||
expect(repetition.champs.first).to eq(first_child)
|
expect(repetition.champs.first).to eq(first_child)
|
||||||
|
|
|
@ -304,22 +304,12 @@ describe Dossier, type: :model do
|
||||||
|
|
||||||
subject { dossier }
|
subject { dossier }
|
||||||
|
|
||||||
describe '#create' do
|
describe '#build_default_values' do
|
||||||
let(:procedure) { create(:procedure, :with_type_de_champ, :with_type_de_champ_private) }
|
|
||||||
let(:dossier) { create(:dossier, procedure: procedure, user: user) }
|
|
||||||
|
|
||||||
it 'builds public and private champs' do
|
|
||||||
expect(dossier.champs_public.count).to eq(1)
|
|
||||||
expect(dossier.champs_private.count).to eq(1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe '#build_default_individual' do
|
|
||||||
let(:dossier) { build(:dossier, procedure: procedure, user: user) }
|
let(:dossier) { build(:dossier, procedure: procedure, user: user) }
|
||||||
|
|
||||||
subject do
|
subject do
|
||||||
dossier.individual = nil
|
dossier.individual = nil
|
||||||
dossier.build_default_individual
|
dossier.build_default_values
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when the dossier belongs to a procedure for individuals' do
|
context 'when the dossier belongs to a procedure for individuals' do
|
||||||
|
@ -867,7 +857,7 @@ describe Dossier, type: :model do
|
||||||
it { is_expected.not_to eq(modif_date) }
|
it { is_expected.not_to eq(modif_date) }
|
||||||
|
|
||||||
context 'when a champ is modified' do
|
context 'when a champ is modified' do
|
||||||
before { dossier.champs_public.first.update_attribute('value', 'yop') }
|
before { dossier.project_champs_public.first.update_attribute('value', 'yop') }
|
||||||
|
|
||||||
it { is_expected.to eq(modif_date) }
|
it { is_expected.to eq(modif_date) }
|
||||||
end
|
end
|
||||||
|
@ -1709,14 +1699,14 @@ describe Dossier, type: :model do
|
||||||
let(:expression_reguliere_error_message) { "Le champ doit être composé de lettres majuscules" }
|
let(:expression_reguliere_error_message) { "Le champ doit être composé de lettres majuscules" }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
champ = dossier.champs_public.first
|
champ = dossier.project_champs_public.first
|
||||||
champ.value = expression_reguliere_exemple_text
|
champ.value = expression_reguliere_exemple_text
|
||||||
dossier.save(context: :champs_public_value)
|
dossier.save(context: :champs_public_value)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should have errors' do
|
it 'should have errors' do
|
||||||
expect(dossier.errors).not_to be_empty
|
expect(dossier.errors).not_to be_empty
|
||||||
expect(dossier.errors.full_messages.join(',')).to include(dossier.champs_public.first.expression_reguliere_error_message)
|
expect(dossier.errors.full_messages.join(',')).to include(dossier.project_champs_public.first.expression_reguliere_error_message)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1726,7 +1716,7 @@ describe Dossier, type: :model do
|
||||||
let(:expression_reguliere_error_message) { "Le champ doit être composé de lettres majuscules" }
|
let(:expression_reguliere_error_message) { "Le champ doit être composé de lettres majuscules" }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
champ = dossier.champs_public.first
|
champ = dossier.project_champs_public.first
|
||||||
champ.value = expression_reguliere_exemple_text
|
champ.value = expression_reguliere_exemple_text
|
||||||
dossier.save
|
dossier.save
|
||||||
end
|
end
|
||||||
|
@ -2026,8 +2016,8 @@ describe Dossier, type: :model do
|
||||||
let(:explication_type_de_champ) { procedure.active_revision.types_de_champ_public.find { |type_de_champ| type_de_champ.type_champ == TypeDeChamp.type_champs.fetch(:explication) } }
|
let(:explication_type_de_champ) { procedure.active_revision.types_de_champ_public.find { |type_de_champ| type_de_champ.type_champ == TypeDeChamp.type_champs.fetch(:explication) } }
|
||||||
let(:commune_type_de_champ) { procedure.active_revision.types_de_champ_public.find { |type_de_champ| type_de_champ.type_champ == TypeDeChamp.type_champs.fetch(:communes) } }
|
let(:commune_type_de_champ) { procedure.active_revision.types_de_champ_public.find { |type_de_champ| type_de_champ.type_champ == TypeDeChamp.type_champs.fetch(:communes) } }
|
||||||
let(:repetition_type_de_champ) { procedure.active_revision.types_de_champ_public.find { |type_de_champ| type_de_champ.type_champ == TypeDeChamp.type_champs.fetch(:repetition) } }
|
let(:repetition_type_de_champ) { procedure.active_revision.types_de_champ_public.find { |type_de_champ| type_de_champ.type_champ == TypeDeChamp.type_champs.fetch(:repetition) } }
|
||||||
let(:repetition_champ) { dossier.champs_public.find(&:repetition?) }
|
let(:repetition_champ) { dossier.project_champs_public.find(&:repetition?) }
|
||||||
let(:repetition_second_revision_champ) { dossier_second_revision.champs_public.find(&:repetition?) }
|
let(:repetition_second_revision_champ) { dossier_second_revision.project_champs_public.find(&:repetition?) }
|
||||||
let(:dossier) { create(:dossier, procedure: procedure) }
|
let(:dossier) { create(:dossier, procedure: procedure) }
|
||||||
let(:dossier_second_revision) { create(:dossier, procedure: procedure) }
|
let(:dossier_second_revision) { create(:dossier, procedure: procedure) }
|
||||||
let(:dossier_champs_for_export) { dossier.champs_for_export(procedure.types_de_champ_for_procedure_export) }
|
let(:dossier_champs_for_export) { dossier.champs_for_export(procedure.types_de_champ_for_procedure_export) }
|
||||||
|
@ -2087,14 +2077,14 @@ describe Dossier, type: :model do
|
||||||
let(:dossier) { create(:dossier, procedure:) }
|
let(:dossier) { create(:dossier, procedure:) }
|
||||||
let(:yes_no_tdc) { procedure.active_revision.types_de_champ_public.first }
|
let(:yes_no_tdc) { procedure.active_revision.types_de_champ_public.first }
|
||||||
let(:text_tdc) { procedure.active_revision.types_de_champ_public.second }
|
let(:text_tdc) { procedure.active_revision.types_de_champ_public.second }
|
||||||
let(:tdcs) { dossier.champs_public.map(&:type_de_champ) }
|
let(:tdcs) { dossier.project_champs_public.map(&:type_de_champ) }
|
||||||
|
|
||||||
subject { dossier.champs_for_export(tdcs) }
|
subject { dossier.champs_for_export(tdcs) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
text_tdc.update(condition: ds_eq(champ_value(yes_no_tdc.stable_id), constant(true)))
|
text_tdc.update(condition: ds_eq(champ_value(yes_no_tdc.stable_id), constant(true)))
|
||||||
|
|
||||||
yes_no, text = dossier.champs_public
|
yes_no, text = dossier.project_champs_public
|
||||||
yes_no.update(value: yes_no_value)
|
yes_no.update(value: yes_no_value)
|
||||||
text.update(value: 'text')
|
text.update(value: 'text')
|
||||||
end
|
end
|
||||||
|
@ -2113,7 +2103,7 @@ describe Dossier, type: :model do
|
||||||
|
|
||||||
context 'with another revision' do
|
context 'with another revision' do
|
||||||
let(:tdc_from_another_revision) { create(:type_de_champ_communes, libelle: 'commune', condition: ds_eq(constant(true), constant(true))) }
|
let(:tdc_from_another_revision) { create(:type_de_champ_communes, libelle: 'commune', condition: ds_eq(constant(true), constant(true))) }
|
||||||
let(:tdcs) { dossier.champs_public.map(&:type_de_champ) << tdc_from_another_revision }
|
let(:tdcs) { dossier.project_champs_public.map(&:type_de_champ) << tdc_from_another_revision }
|
||||||
let(:yes_no_value) { 'true' }
|
let(:yes_no_value) { 'true' }
|
||||||
|
|
||||||
let(:expected) do
|
let(:expected) do
|
||||||
|
|
|
@ -50,7 +50,7 @@ describe ExportTemplate do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for pj' do
|
context 'for pj' do
|
||||||
let(:champ_pj) { dossier.champs_public.first }
|
let(:champ_pj) { dossier.project_champs_public.first }
|
||||||
let(:export_template) { create(:export_template, groupe_instructeur:, pjs: [ExportItem.default(stable_id: 3, prefix: "justif", enabled: true)]) }
|
let(:export_template) { create(:export_template, groupe_instructeur:, pjs: [ExportItem.default(stable_id: 3, prefix: "justif", enabled: true)]) }
|
||||||
|
|
||||||
let(:attachment) { ActiveStorage::Attachment.new(name: 'pj', record: champ_pj, blob: ActiveStorage::Blob.new(filename: "superpj.png")) }
|
let(:attachment) { ActiveStorage::Attachment.new(name: 'pj', record: champ_pj, blob: ActiveStorage::Blob.new(filename: "superpj.png")) }
|
||||||
|
|
|
@ -201,7 +201,7 @@ describe Instructeur, type: :model do
|
||||||
|
|
||||||
context 'when there is a modification on public champs' do
|
context 'when there is a modification on public champs' do
|
||||||
before {
|
before {
|
||||||
dossier.champs_public.first.update(value: 'toto')
|
dossier.project_champs_public.first.update(value: 'toto')
|
||||||
dossier.update(last_champ_updated_at: Time.zone.now)
|
dossier.update(last_champ_updated_at: Time.zone.now)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -223,7 +223,7 @@ describe Instructeur, type: :model do
|
||||||
|
|
||||||
context 'when there is a modification on private champs' do
|
context 'when there is a modification on private champs' do
|
||||||
before {
|
before {
|
||||||
dossier.champs_private.first.update(value: 'toto')
|
dossier.project_champs_private.first.update(value: 'toto')
|
||||||
dossier.update(last_champ_private_updated_at: Time.zone.now)
|
dossier.update(last_champ_private_updated_at: Time.zone.now)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -302,7 +302,7 @@ describe Instructeur, type: :model do
|
||||||
it { expect(instructeur_on_procedure_2.notifications_for_groupe_instructeurs(gi_p2)[:en_cours]).to match([]) }
|
it { expect(instructeur_on_procedure_2.notifications_for_groupe_instructeurs(gi_p2)[:en_cours]).to match([]) }
|
||||||
|
|
||||||
context 'and there is a modification on private champs' do
|
context 'and there is a modification on private champs' do
|
||||||
before { dossier.champs_private.first.update_attribute('value', 'toto') }
|
before { dossier.project_champs_private.first.update_attribute('value', 'toto') }
|
||||||
|
|
||||||
it { is_expected.to match([dossier.id]) }
|
it { is_expected.to match([dossier.id]) }
|
||||||
end
|
end
|
||||||
|
@ -317,7 +317,7 @@ describe Instructeur, type: :model do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when there is a modification on public champs on a followed dossier from another procedure' do
|
context 'when there is a modification on public champs on a followed dossier from another procedure' do
|
||||||
before { dossier_on_procedure_2.champs_public.first.update_attribute('value', 'toto') }
|
before { dossier_on_procedure_2.project_champs_public.first.update_attribute('value', 'toto') }
|
||||||
|
|
||||||
it { is_expected.to match([]) }
|
it { is_expected.to match([]) }
|
||||||
end
|
end
|
||||||
|
|
|
@ -146,8 +146,8 @@ describe ProcedurePresentation do
|
||||||
let(:tartine_dossier) { create(:dossier, procedure: procedure) }
|
let(:tartine_dossier) { create(:dossier, procedure: procedure) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
beurre_dossier.champs_public.first.update(value: 'beurre')
|
beurre_dossier.project_champs_public.first.update(value: 'beurre')
|
||||||
tartine_dossier.champs_public.first.update(value: 'tartine')
|
tartine_dossier.project_champs_public.first.update(value: 'tartine')
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'asc' do
|
context 'asc' do
|
||||||
|
@ -176,8 +176,8 @@ describe ProcedurePresentation do
|
||||||
nothing_dossier
|
nothing_dossier
|
||||||
procedure.draft_revision.add_type_de_champ(tdc)
|
procedure.draft_revision.add_type_de_champ(tdc)
|
||||||
procedure.publish_revision!
|
procedure.publish_revision!
|
||||||
beurre_dossier.champs_public.last.update(value: 'beurre')
|
beurre_dossier.project_champs_public.last.update(value: 'beurre')
|
||||||
tartine_dossier.champs_public.last.update(value: 'tartine')
|
tartine_dossier.project_champs_public.last.update(value: 'tartine')
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'asc' do
|
context 'asc' do
|
||||||
|
@ -201,8 +201,8 @@ describe ProcedurePresentation do
|
||||||
let(:vin_dossier) { create(:dossier, procedure: procedure) }
|
let(:vin_dossier) { create(:dossier, procedure: procedure) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
biere_dossier.champs_private.first.update(value: 'biere')
|
biere_dossier.project_champs_private.first.update(value: 'biere')
|
||||||
vin_dossier.champs_private.first.update(value: 'vin')
|
vin_dossier.project_champs_private.first.update(value: 'vin')
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'asc' do
|
context 'asc' do
|
||||||
|
@ -231,8 +231,8 @@ describe ProcedurePresentation do
|
||||||
nothing_dossier
|
nothing_dossier
|
||||||
procedure.draft_revision.add_type_de_champ(tdc)
|
procedure.draft_revision.add_type_de_champ(tdc)
|
||||||
procedure.publish_revision!
|
procedure.publish_revision!
|
||||||
biere_dossier.champs_private.last.update(value: 'biere')
|
biere_dossier.project_champs_private.last.update(value: 'biere')
|
||||||
vin_dossier.champs_private.last.update(value: 'vin')
|
vin_dossier.project_champs_private.last.update(value: 'vin')
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'asc' do
|
context 'asc' do
|
||||||
|
@ -592,8 +592,8 @@ describe ProcedurePresentation do
|
||||||
let(:value_column_searched) { ['postal_code'] }
|
let(:value_column_searched) { ['postal_code'] }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
kept_dossier.champs_public.find_by(stable_id: 1).update(value_json: { "postal_code" => value })
|
kept_dossier.project_champs_public.find { _1.stable_id == 1 }.update(value_json: { "postal_code" => value })
|
||||||
create(:dossier, procedure: procedure).champs_public.find_by(stable_id: 1).update(value_json: { "postal_code" => "unknown" })
|
create(:dossier, procedure: procedure).project_champs_public.find { _1.stable_id == 1 }.update(value_json: { "postal_code" => "unknown" })
|
||||||
end
|
end
|
||||||
it { is_expected.to contain_exactly(kept_dossier.id) }
|
it { is_expected.to contain_exactly(kept_dossier.id) }
|
||||||
it 'describes column' do
|
it 'describes column' do
|
||||||
|
@ -607,8 +607,8 @@ describe ProcedurePresentation do
|
||||||
let(:value_column_searched) { ['departement_code'] }
|
let(:value_column_searched) { ['departement_code'] }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
kept_dossier.champs_public.find_by(stable_id: 1).update(value_json: { "departement_code" => value })
|
kept_dossier.project_champs_public.find { _1.stable_id == 1 }.update(value_json: { "departement_code" => value })
|
||||||
create(:dossier, procedure: procedure).champs_public.find_by(stable_id: 1).update(value_json: { "departement_code" => "unknown" })
|
create(:dossier, procedure: procedure).project_champs_public.find { _1.stable_id == 1 }.update(value_json: { "departement_code" => "unknown" })
|
||||||
end
|
end
|
||||||
it { is_expected.to contain_exactly(kept_dossier.id) }
|
it { is_expected.to contain_exactly(kept_dossier.id) }
|
||||||
it 'describes column' do
|
it 'describes column' do
|
||||||
|
@ -622,8 +622,8 @@ describe ProcedurePresentation do
|
||||||
let(:value_column_searched) { ['region_name'] }
|
let(:value_column_searched) { ['region_name'] }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
kept_dossier.champs_public.find_by(stable_id: 1).update(value_json: { "region_name" => value })
|
kept_dossier.project_champs_public.find { _1.stable_id == 1 }.update(value_json: { "region_name" => value })
|
||||||
create(:dossier, procedure: procedure).champs_public.find_by(stable_id: 1).update(value_json: { "region_name" => "unknown" })
|
create(:dossier, procedure: procedure).project_champs_public.find { _1.stable_id == 1 }.update(value_json: { "region_name" => "unknown" })
|
||||||
end
|
end
|
||||||
it { is_expected.to contain_exactly(kept_dossier.id) }
|
it { is_expected.to contain_exactly(kept_dossier.id) }
|
||||||
it 'describes column' do
|
it 'describes column' do
|
||||||
|
|
|
@ -10,8 +10,8 @@ describe ChampPolicy do
|
||||||
|
|
||||||
subject { Pundit.policy_scope(account, Champ) }
|
subject { Pundit.policy_scope(account, Champ) }
|
||||||
|
|
||||||
let(:champ) { dossier.champs_public.first }
|
let(:champ) { dossier.project_champs_public.first }
|
||||||
let(:champ_private) { dossier.champs_private.first }
|
let(:champ_private) { dossier.project_champs_private.first }
|
||||||
|
|
||||||
shared_examples_for 'they can access a public champ' do
|
shared_examples_for 'they can access a public champ' do
|
||||||
it { expect(subject.find_by(id: champ.id)).to eq(champ) }
|
it { expect(subject.find_by(id: champ.id)).to eq(champ) }
|
||||||
|
|
|
@ -21,10 +21,10 @@ describe DossierProjectionService do
|
||||||
end
|
end
|
||||||
|
|
||||||
before do
|
before do
|
||||||
dossier_1.champs_public.first.update(value: 'champ_1')
|
dossier_1.project_champs_public.first.update(value: 'champ_1')
|
||||||
dossier_1.champs_public.second.update(value: '["test"]')
|
dossier_1.project_champs_public.second.update(value: '["test"]')
|
||||||
dossier_2.champs_public.first.update(value: 'champ_2')
|
dossier_2.project_champs_public.first.update(value: 'champ_2')
|
||||||
dossier_3.champs_public.first.destroy
|
dossier_3.project_champs_public.first.destroy
|
||||||
end
|
end
|
||||||
|
|
||||||
let(:result) { subject }
|
let(:result) { subject }
|
||||||
|
@ -65,7 +65,7 @@ describe DossierProjectionService do
|
||||||
end
|
end
|
||||||
|
|
||||||
before do
|
before do
|
||||||
dossier.champs_public.first.update(code_postal: '63290', external_id: '63102')
|
dossier.project_champs_public.first.update(code_postal: '63290', external_id: '63102')
|
||||||
end
|
end
|
||||||
|
|
||||||
let(:result) { subject }
|
let(:result) { subject }
|
||||||
|
@ -185,7 +185,7 @@ describe DossierProjectionService do
|
||||||
let(:dossier) { create(:dossier) }
|
let(:dossier) { create(:dossier) }
|
||||||
let(:column) { dossier.procedure.active_revision.types_de_champ_public.first.stable_id.to_s }
|
let(:column) { dossier.procedure.active_revision.types_de_champ_public.first.stable_id.to_s }
|
||||||
|
|
||||||
before { dossier.champs_public.first.update(value: 'kale') }
|
before { dossier.project_champs_public.first.update(value: 'kale') }
|
||||||
|
|
||||||
it { is_expected.to eq('kale') }
|
it { is_expected.to eq('kale') }
|
||||||
end
|
end
|
||||||
|
@ -195,7 +195,7 @@ describe DossierProjectionService do
|
||||||
let(:dossier) { create(:dossier) }
|
let(:dossier) { create(:dossier) }
|
||||||
let(:column) { dossier.procedure.active_revision.types_de_champ_private.first.stable_id.to_s }
|
let(:column) { dossier.procedure.active_revision.types_de_champ_private.first.stable_id.to_s }
|
||||||
|
|
||||||
before { dossier.champs_private.first.update(value: 'quinoa') }
|
before { dossier.project_champs_private.first.update(value: 'quinoa') }
|
||||||
|
|
||||||
it { is_expected.to eq('quinoa') }
|
it { is_expected.to eq('quinoa') }
|
||||||
end
|
end
|
||||||
|
@ -206,7 +206,7 @@ describe DossierProjectionService do
|
||||||
let(:dossier) { create(:dossier, procedure: procedure) }
|
let(:dossier) { create(:dossier, procedure: procedure) }
|
||||||
let(:column) { dossier.procedure.active_revision.types_de_champ_public.first.stable_id.to_s }
|
let(:column) { dossier.procedure.active_revision.types_de_champ_public.first.stable_id.to_s }
|
||||||
|
|
||||||
before { dossier.champs_public.first.update(value: 'true') }
|
before { dossier.project_champs_public.first.update(value: 'true') }
|
||||||
|
|
||||||
it { is_expected.to eq('Oui') }
|
it { is_expected.to eq('Oui') }
|
||||||
end
|
end
|
||||||
|
@ -217,7 +217,7 @@ describe DossierProjectionService do
|
||||||
let(:dossier) { create(:dossier, procedure: procedure) }
|
let(:dossier) { create(:dossier, procedure: procedure) }
|
||||||
let(:column) { dossier.procedure.active_revision.types_de_champ_public.first.stable_id.to_s }
|
let(:column) { dossier.procedure.active_revision.types_de_champ_public.first.stable_id.to_s }
|
||||||
|
|
||||||
before { dossier.champs_public.first.update(value: '18 a la bonne rue', data: { 'label' => '18 a la bonne rue', 'departement' => 'd' }) }
|
before { dossier.project_champs_public.first.update(value: '18 a la bonne rue', data: { 'label' => '18 a la bonne rue', 'departement' => 'd' }) }
|
||||||
|
|
||||||
it { is_expected.to eq('18 a la bonne rue') }
|
it { is_expected.to eq('18 a la bonne rue') }
|
||||||
end
|
end
|
||||||
|
@ -236,7 +236,7 @@ describe DossierProjectionService do
|
||||||
|
|
||||||
context 'when external id is set' do
|
context 'when external id is set' do
|
||||||
before do
|
before do
|
||||||
dossier.champs_public.first.update(external_id: 'GB')
|
dossier.project_champs_public.first.update(external_id: 'GB')
|
||||||
end
|
end
|
||||||
|
|
||||||
it { is_expected.to eq('Royaume-Uni') }
|
it { is_expected.to eq('Royaume-Uni') }
|
||||||
|
@ -244,7 +244,7 @@ describe DossierProjectionService do
|
||||||
|
|
||||||
context 'when no external id is set' do
|
context 'when no external id is set' do
|
||||||
before do
|
before do
|
||||||
dossier.champs_public.first.update(value: "qu'il est beau mon pays")
|
dossier.project_champs_public.first.update(value: "qu'il est beau mon pays")
|
||||||
end
|
end
|
||||||
|
|
||||||
it { is_expected.to eq("") }
|
it { is_expected.to eq("") }
|
||||||
|
|
|
@ -10,7 +10,7 @@ describe PiecesJustificativesService do
|
||||||
let(:pj_service) { PiecesJustificativesService.new(user_profile:, export_template:) }
|
let(:pj_service) { PiecesJustificativesService.new(user_profile:, export_template:) }
|
||||||
let(:user_profile) { build(:administrateur) }
|
let(:user_profile) { build(:administrateur) }
|
||||||
|
|
||||||
def pj_champ(d) = d.champs_public.find_by(type: 'Champs::PieceJustificativeChamp')
|
def pj_champ(d) = d.project_champs_public.find { _1.type == 'Champs::PieceJustificativeChamp' }
|
||||||
def repetition(d) = d.champs.find_by(type: "Champs::RepetitionChamp")
|
def repetition(d) = d.champs.find_by(type: "Champs::RepetitionChamp")
|
||||||
def attachments(champ) = champ.piece_justificative_file.attachments
|
def attachments(champ) = champ.piece_justificative_file.attachments
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@ describe PiecesJustificativesService do
|
||||||
let(:user_profile) { build(:administrateur) }
|
let(:user_profile) { build(:administrateur) }
|
||||||
let(:procedure) { create(:procedure, types_de_champ_public: [{ type: :piece_justificative }]) }
|
let(:procedure) { create(:procedure, types_de_champ_public: [{ type: :piece_justificative }]) }
|
||||||
let(:witness) { create(:dossier, procedure: procedure) }
|
let(:witness) { create(:dossier, procedure: procedure) }
|
||||||
def pj_champ(d) = d.champs_public.find { |c| c.type == 'Champs::PieceJustificativeChamp' }
|
def pj_champ(d) = d.project_champs_public.find { |c| c.type == 'Champs::PieceJustificativeChamp' }
|
||||||
|
|
||||||
context 'with a single attachment' do
|
context 'with a single attachment' do
|
||||||
before do
|
before do
|
||||||
|
@ -143,7 +143,7 @@ describe PiecesJustificativesService do
|
||||||
let(:procedure) { create(:procedure, types_de_champ_public: [{ type: :titre_identite }]) }
|
let(:procedure) { create(:procedure, types_de_champ_public: [{ type: :titre_identite }]) }
|
||||||
let(:dossier) { create(:dossier, procedure: procedure) }
|
let(:dossier) { create(:dossier, procedure: procedure) }
|
||||||
|
|
||||||
let(:champ_identite) { dossier.champs_public.find { |c| c.type == 'Champs::TitreIdentiteChamp' } }
|
let(:champ_identite) { dossier.project_champs_public.find { |c| c.type == 'Champs::TitreIdentiteChamp' } }
|
||||||
|
|
||||||
before { attach_file_to_champ(champ_identite) }
|
before { attach_file_to_champ(champ_identite) }
|
||||||
|
|
||||||
|
@ -260,7 +260,7 @@ describe PiecesJustificativesService do
|
||||||
let(:witness) { create(:dossier, procedure: procedure) }
|
let(:witness) { create(:dossier, procedure: procedure) }
|
||||||
|
|
||||||
let!(:private_pj) { create(:type_de_champ_piece_justificative, procedure: procedure, private: true) }
|
let!(:private_pj) { create(:type_de_champ_piece_justificative, procedure: procedure, private: true) }
|
||||||
def private_pj_champ(d) = d.champs_private.find { |c| c.type == 'Champs::PieceJustificativeChamp' }
|
def private_pj_champ(d) = d.project_champs_private.find { |c| c.type == 'Champs::PieceJustificativeChamp' }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
attach_file_to_champ(private_pj_champ(dossier))
|
attach_file_to_champ(private_pj_champ(dossier))
|
||||||
|
@ -503,8 +503,8 @@ describe PiecesJustificativesService do
|
||||||
let(:dossier_1) { create(:dossier, procedure:) }
|
let(:dossier_1) { create(:dossier, procedure:) }
|
||||||
let(:champs) { dossier_1.champs }
|
let(:champs) { dossier_1.champs }
|
||||||
|
|
||||||
def pj_champ(d) = d.champs_public.find_by(type: 'Champs::PieceJustificativeChamp')
|
def pj_champ(d) = d.project_champs_public.find { _1.type == 'Champs::PieceJustificativeChamp' }
|
||||||
def repetition(d, index:) = d.champs_public.filter(&:repetition?)[index]
|
def repetition(d, index:) = d.project_champs_public.filter(&:repetition?)[index]
|
||||||
|
|
||||||
subject { PiecesJustificativesService.new(user_profile:, export_template: nil).send(:compute_champ_id_row_index, champs) }
|
subject { PiecesJustificativesService.new(user_profile:, export_template: nil).send(:compute_champ_id_row_index, champs) }
|
||||||
|
|
||||||
|
@ -535,7 +535,7 @@ describe PiecesJustificativesService do
|
||||||
end
|
end
|
||||||
|
|
||||||
it do
|
it do
|
||||||
champs = dossier_1.champs_public
|
champs = dossier_1.project_champs_public
|
||||||
repet_0 = champs[0]
|
repet_0 = champs[0]
|
||||||
pj_0 = repet_0.rows.first.first
|
pj_0 = repet_0.rows.first.first
|
||||||
pj_1 = repet_0.rows.second.first
|
pj_1 = repet_0.rows.second.first
|
||||||
|
|
|
@ -155,7 +155,7 @@ describe ProcedureExportService do
|
||||||
let!(:dossier) { create(:dossier, :en_instruction, :with_populated_champs, :with_individual, procedure:) }
|
let!(:dossier) { create(:dossier, :en_instruction, :with_populated_champs, :with_individual, procedure:) }
|
||||||
let!(:dossier_2) { create(:dossier, :en_instruction, :with_populated_champs, :with_individual, procedure:) }
|
let!(:dossier_2) { create(:dossier, :en_instruction, :with_populated_champs, :with_individual, procedure:) }
|
||||||
before do
|
before do
|
||||||
dossier_2.champs_public
|
dossier_2.project_champs_public
|
||||||
.find { _1.is_a? Champs::PieceJustificativeChamp }
|
.find { _1.is_a? Champs::PieceJustificativeChamp }
|
||||||
.piece_justificative_file
|
.piece_justificative_file
|
||||||
.attach(io: StringIO.new("toto"), filename: "toto.txt", content_type: "text/plain")
|
.attach(io: StringIO.new("toto"), filename: "toto.txt", content_type: "text/plain")
|
||||||
|
@ -351,7 +351,7 @@ describe ProcedureExportService do
|
||||||
create(:dossier, :en_instruction, :with_populated_champs, :with_individual, procedure: procedure)
|
create(:dossier, :en_instruction, :with_populated_champs, :with_individual, procedure: procedure)
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
let(:champ_repetition) { dossiers.first.champs_public.find { |champ| champ.type_champ == 'repetition' } }
|
let(:champ_repetition) { dossiers.first.project_champs_public.find { |champ| champ.type_champ == 'repetition' } }
|
||||||
|
|
||||||
it 'should have sheets' do
|
it 'should have sheets' do
|
||||||
expect(subject.sheets.map(&:name)).to eq(['Dossiers', 'Etablissements', 'Avis', champ_repetition.type_de_champ.libelle_for_export])
|
expect(subject.sheets.map(&:name)).to eq(['Dossiers', 'Etablissements', 'Avis', champ_repetition.type_de_champ.libelle_for_export])
|
||||||
|
@ -416,7 +416,7 @@ describe ProcedureExportService do
|
||||||
|
|
||||||
context 'with empty repetition' do
|
context 'with empty repetition' do
|
||||||
before do
|
before do
|
||||||
dossiers.flat_map { |dossier| dossier.champs_public.filter(&:repetition?) }.each do |champ|
|
dossiers.flat_map { |dossier| dossier.project_champs_public.filter(&:repetition?) }.each do |champ|
|
||||||
Champ.where(row_id: champ.row_ids).destroy_all
|
Champ.where(row_id: champ.row_ids).destroy_all
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -520,7 +520,7 @@ describe ProcedureExportService do
|
||||||
end
|
end
|
||||||
|
|
||||||
let(:dossier) { create(:dossier, :en_instruction, :with_populated_champs, :with_individual, procedure: procedure) }
|
let(:dossier) { create(:dossier, :en_instruction, :with_populated_champs, :with_individual, procedure: procedure) }
|
||||||
let(:champ_carte) { dossier.champs_public.find(&:carte?) }
|
let(:champ_carte) { dossier.project_champs_public.find(&:carte?) }
|
||||||
let(:properties) { subject['features'].first['properties'] }
|
let(:properties) { subject['features'].first['properties'] }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
|
|
@ -7,7 +7,7 @@ describe ProcedureExportService do
|
||||||
let(:export_template) { create(:export_template, :enabled_pjs, groupe_instructeur: procedure.defaut_groupe_instructeur) }
|
let(:export_template) { create(:export_template, :enabled_pjs, groupe_instructeur: procedure.defaut_groupe_instructeur) }
|
||||||
let(:service) { ProcedureExportService.new(procedure, procedure.dossiers, instructeur, export_template) }
|
let(:service) { ProcedureExportService.new(procedure, procedure.dossiers, instructeur, export_template) }
|
||||||
|
|
||||||
def pj_champ(d) = d.champs_public.find_by(type: 'Champs::PieceJustificativeChamp')
|
def pj_champ(d) = d.project_champs_public.find { _1.type == 'Champs::PieceJustificativeChamp' }
|
||||||
def repetition(d) = d.champs.find_by(type: "Champs::RepetitionChamp")
|
def repetition(d) = d.champs.find_by(type: "Champs::RepetitionChamp")
|
||||||
def attachments(champ) = champ.piece_justificative_file.attachments
|
def attachments(champ) = champ.piece_justificative_file.attachments
|
||||||
|
|
||||||
|
|
|
@ -282,7 +282,7 @@ describe 'fetch API Particulier Data', js: true do
|
||||||
fill_in 'Le code postal', with: 'wrong_code'
|
fill_in 'Le code postal', with: 'wrong_code'
|
||||||
|
|
||||||
dossier = Dossier.last
|
dossier = Dossier.last
|
||||||
cnaf_champ = dossier.champs_public.find(&:cnaf?)
|
cnaf_champ = dossier.project_champs_public.find(&:cnaf?)
|
||||||
|
|
||||||
wait_until { cnaf_champ.reload.code_postal == 'wrong_code' }
|
wait_until { cnaf_champ.reload.code_postal == 'wrong_code' }
|
||||||
|
|
||||||
|
@ -342,7 +342,7 @@ describe 'fetch API Particulier Data', js: true do
|
||||||
fill_in "Identifiant", with: 'wrong code'
|
fill_in "Identifiant", with: 'wrong code'
|
||||||
|
|
||||||
dossier = Dossier.last
|
dossier = Dossier.last
|
||||||
pole_emploi_champ = dossier.champs_public.find(&:pole_emploi?)
|
pole_emploi_champ = dossier.project_champs_public.find(&:pole_emploi?)
|
||||||
|
|
||||||
wait_until { pole_emploi_champ.reload.identifiant == 'wrong code' }
|
wait_until { pole_emploi_champ.reload.identifiant == 'wrong code' }
|
||||||
|
|
||||||
|
@ -418,7 +418,7 @@ describe 'fetch API Particulier Data', js: true do
|
||||||
fill_in "INE", with: 'wrong code'
|
fill_in "INE", with: 'wrong code'
|
||||||
|
|
||||||
dossier = Dossier.last
|
dossier = Dossier.last
|
||||||
mesri_champ = dossier.champs_public.find(&:mesri?)
|
mesri_champ = dossier.project_champs_public.find(&:mesri?)
|
||||||
|
|
||||||
wait_until { mesri_champ.reload.ine == 'wrong code' }
|
wait_until { mesri_champ.reload.ine == 'wrong code' }
|
||||||
clear_enqueued_jobs
|
clear_enqueued_jobs
|
||||||
|
@ -485,7 +485,7 @@ describe 'fetch API Particulier Data', js: true do
|
||||||
fill_in "La référence d’avis d’imposition", with: 'wrong_code'
|
fill_in "La référence d’avis d’imposition", with: 'wrong_code'
|
||||||
|
|
||||||
dossier = Dossier.last
|
dossier = Dossier.last
|
||||||
dgfip_champ = dossier.champs_public.find(&:dgfip?)
|
dgfip_champ = dossier.project_champs_public.find(&:dgfip?)
|
||||||
|
|
||||||
wait_until { dgfip_champ.reload.reference_avis == 'wrong_code' }
|
wait_until { dgfip_champ.reload.reference_avis == 'wrong_code' }
|
||||||
|
|
||||||
|
|
|
@ -214,7 +214,7 @@ describe 'Instructing a dossier:', js: true do
|
||||||
context 'with dossiers having attached files' do
|
context 'with dossiers having attached files' do
|
||||||
let(:procedure) { create(:procedure, :published, types_de_champ_public: [{ type: :piece_justificative }], instructeurs: [instructeur]) }
|
let(:procedure) { create(:procedure, :published, types_de_champ_public: [{ type: :piece_justificative }], instructeurs: [instructeur]) }
|
||||||
let(:dossier) { create(:dossier, :en_construction, procedure: procedure) }
|
let(:dossier) { create(:dossier, :en_construction, procedure: procedure) }
|
||||||
let(:champ) { dossier.champs_public.first }
|
let(:champ) { dossier.project_champs_public.first }
|
||||||
let(:path) { 'spec/fixtures/files/piece_justificative_0.pdf' }
|
let(:path) { 'spec/fixtures/files/piece_justificative_0.pdf' }
|
||||||
let(:commentaire) { create(:commentaire, instructeur: instructeur, dossier: dossier) }
|
let(:commentaire) { create(:commentaire, instructeur: instructeur, dossier: dossier) }
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ describe "procedure sort", js: true do
|
||||||
before do
|
before do
|
||||||
instructeur.follow(followed_dossier)
|
instructeur.follow(followed_dossier)
|
||||||
instructeur.follow(followed_dossier_2)
|
instructeur.follow(followed_dossier_2)
|
||||||
followed_dossier.champs_public.first.update(value: '123') # touch the dossier
|
followed_dossier.project_champs_public.first.update(value: '123') # touch the dossier
|
||||||
|
|
||||||
login_as(instructeur.user, scope: :user)
|
login_as(instructeur.user, scope: :user)
|
||||||
visit instructeur_procedure_path(procedure, statut: "suivis")
|
visit instructeur_procedure_path(procedure, statut: "suivis")
|
||||||
|
|
|
@ -186,7 +186,7 @@ describe 'The routing with rules', js: true do
|
||||||
click_on litteraire_user.dossiers.first.procedure.libelle
|
click_on litteraire_user.dossiers.first.procedure.libelle
|
||||||
click_on 'Modifier mon dossier'
|
click_on 'Modifier mon dossier'
|
||||||
|
|
||||||
fill_in litteraire_user.dossiers.first.champs_public.first.libelle, with: 'some value'
|
fill_in litteraire_user.dossiers.first.project_champs_public.first.libelle, with: 'some value'
|
||||||
wait_for_autosave
|
wait_for_autosave
|
||||||
|
|
||||||
click_on 'Déposer les modifications'
|
click_on 'Déposer les modifications'
|
||||||
|
|
|
@ -674,7 +674,7 @@ describe 'The user', js: true do
|
||||||
end
|
end
|
||||||
|
|
||||||
def champ_for(libelle)
|
def champ_for(libelle)
|
||||||
champs = user_dossier.reload.champs_public
|
champs = user_dossier.reload.project_champs_public
|
||||||
champ = champs.find { |c| c.libelle == libelle }
|
champ = champs.find { |c| c.libelle == libelle }
|
||||||
champ.reload
|
champ.reload
|
||||||
end
|
end
|
||||||
|
|
|
@ -35,13 +35,13 @@ describe 'dropdown list with other option activated', js: true do
|
||||||
choose I18n.t('shared.champs.drop_down_list.other')
|
choose I18n.t('shared.champs.drop_down_list.other')
|
||||||
fill_in(I18n.t('shared.champs.drop_down_list.other_label'), with: "My choice")
|
fill_in(I18n.t('shared.champs.drop_down_list.other_label'), with: "My choice")
|
||||||
|
|
||||||
wait_until { user_dossier.champs_public.first.value == "My choice" }
|
wait_until { user_dossier.reload.project_champs_public.first.value == "My choice" }
|
||||||
expect(user_dossier.champs_public.first.value).to eq("My choice")
|
expect(user_dossier.project_champs_public.first.value).to eq("My choice")
|
||||||
|
|
||||||
choose "Secondary 1.1"
|
choose "Secondary 1.1"
|
||||||
|
|
||||||
wait_until { user_dossier.champs_public.first.value == "Secondary 1.1" }
|
wait_until { user_dossier.reload.project_champs_public.first.value == "Secondary 1.1" }
|
||||||
expect(user_dossier.champs_public.first.value).to eq("Secondary 1.1")
|
expect(user_dossier.project_champs_public.first.value).to eq("Secondary 1.1")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -68,8 +68,8 @@ describe 'dropdown list with other option activated', js: true do
|
||||||
select("Secondary 1.2")
|
select("Secondary 1.2")
|
||||||
expect(page).to have_selector(".autosave-status.succeeded", visible: true)
|
expect(page).to have_selector(".autosave-status.succeeded", visible: true)
|
||||||
|
|
||||||
wait_until { user_dossier.champs_public.first.value == "Secondary 1.2" }
|
wait_until { user_dossier.reload.project_champs_public.first.value == "Secondary 1.2" }
|
||||||
expect(user_dossier.champs_public.first.value).to eq("Secondary 1.2")
|
expect(user_dossier.project_champs_public.first.value).to eq("Secondary 1.2")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ describe "Dossier en_construction", js: true do
|
||||||
}
|
}
|
||||||
|
|
||||||
let(:champ) {
|
let(:champ) {
|
||||||
dossier.find_editing_fork(dossier.user).champs_public.find { _1.stable_id == tdc.stable_id }
|
dossier.find_editing_fork(dossier.user).project_champs_public.find { _1.stable_id == tdc.stable_id }
|
||||||
}
|
}
|
||||||
|
|
||||||
scenario 'delete a non mandatory piece justificative' do
|
scenario 'delete a non mandatory piece justificative' do
|
||||||
|
|
|
@ -175,7 +175,7 @@ describe 'Invitations' do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "can search something inside the dossier and it displays the dossier" do
|
it "can search something inside the dossier and it displays the dossier" do
|
||||||
page.find_by_id('q').set(dossier_2.champs_public.first.value)
|
page.find_by_id('q').set(dossier_2.project_champs_public.first.value)
|
||||||
find('.fr-search-bar .fr-btn').click
|
find('.fr-search-bar .fr-btn').click
|
||||||
expect(current_path).to eq(dossiers_path)
|
expect(current_path).to eq(dossiers_path)
|
||||||
expect(page).to have_link(dossier.procedure.libelle)
|
expect(page).to have_link(dossier.procedure.libelle)
|
||||||
|
|
|
@ -306,7 +306,7 @@ describe 'user access to the list of their dossiers', js: true do
|
||||||
|
|
||||||
context "when user search for something inside the dossier" do
|
context "when user search for something inside the dossier" do
|
||||||
before do
|
before do
|
||||||
page.find_by_id('q').set(dossier_en_construction.champs_public.first.value)
|
page.find_by_id('q').set(dossier_en_construction.project_champs_public.first.value)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when it matches multiple dossiers' do
|
context 'when it matches multiple dossiers' do
|
||||||
|
@ -336,7 +336,7 @@ describe 'user access to the list of their dossiers', js: true do
|
||||||
click_on 'Afficher'
|
click_on 'Afficher'
|
||||||
expect(page).not_to have_link(String(dossier_en_construction.id))
|
expect(page).not_to have_link(String(dossier_en_construction.id))
|
||||||
expect(page).not_to have_link(String(dossier_with_champs.id))
|
expect(page).not_to have_link(String(dossier_with_champs.id))
|
||||||
expect(page).to have_content("Résultat de la recherche pour « #{dossier_en_construction.champs_public.first.value} » et pour la procédure « #{dossier_brouillon.procedure.libelle} » ")
|
expect(page).to have_content("Résultat de la recherche pour « #{dossier_en_construction.project_champs_public.first.value} » et pour la procédure « #{dossier_brouillon.procedure.libelle} » ")
|
||||||
expect(page).to have_text("Aucun dossier")
|
expect(page).to have_text("Aucun dossier")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,8 +11,8 @@ module Maintenance
|
||||||
let(:parent_dossier) { create(:dossier, procedure:) }
|
let(:parent_dossier) { create(:dossier, procedure:) }
|
||||||
let(:cloned_dossier) { create(:dossier, procedure:) }
|
let(:cloned_dossier) { create(:dossier, procedure:) }
|
||||||
|
|
||||||
let(:parent_champ_pj) { parent_dossier.champs_private.find(&:piece_justificative?) }
|
let(:parent_champ_pj) { parent_dossier.project_champs_private.find(&:piece_justificative?) }
|
||||||
let(:cloned_champ_pj) { cloned_dossier.champs_private.find(&:piece_justificative?) }
|
let(:cloned_champ_pj) { cloned_dossier.project_champs_private.find(&:piece_justificative?) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
cloned_dossier.update(parent_dossier:) # used on factorie, does not seed private_champs..
|
cloned_dossier.update(parent_dossier:) # used on factorie, does not seed private_champs..
|
||||||
|
|
|
@ -21,12 +21,12 @@ describe 'shared/dossiers/champs', type: :view do
|
||||||
|
|
||||||
context "there are some champs" do
|
context "there are some champs" do
|
||||||
let(:types_de_champ_public) { [{ type: :checkbox }, { type: :header_section }, { type: :explication }, { type: :dossier_link }, { type: :textarea }, { type: :rna }] }
|
let(:types_de_champ_public) { [{ type: :checkbox }, { type: :header_section }, { type: :explication }, { type: :dossier_link }, { type: :textarea }, { type: :rna }] }
|
||||||
let(:champ1) { dossier.champs[0] }
|
let(:champ1) { dossier.project_champs_public[0] }
|
||||||
let(:champ2) { dossier.champs[1] }
|
let(:champ2) { dossier.project_champs_public[1] }
|
||||||
let(:champ3) { dossier.champs[2] }
|
let(:champ3) { dossier.project_champs_public[2] }
|
||||||
let(:champ4) { dossier.champs[3] }
|
let(:champ4) { dossier.project_champs_public[3] }
|
||||||
let(:champ5) { dossier.champs[4] }
|
let(:champ5) { dossier.project_champs_public[4] }
|
||||||
let(:champ6) { dossier.champs[5] }
|
let(:champ6) { dossier.project_champs_public[5] }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
champ1.update(value: 'true')
|
champ1.update(value: 'true')
|
||||||
|
@ -57,8 +57,8 @@ describe 'shared/dossiers/champs', type: :view do
|
||||||
|
|
||||||
context "with auto-link" do
|
context "with auto-link" do
|
||||||
let(:types_de_champ_public) { [{ type: :text }, { type: :textarea }] }
|
let(:types_de_champ_public) { [{ type: :text }, { type: :textarea }] }
|
||||||
let(:champ1) { dossier.champs[0] }
|
let(:champ1) { dossier.project_champs_public.first }
|
||||||
let(:champ2) { dossier.champs[1] }
|
let(:champ2) { dossier.project_champs_public.second }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
champ1.update(value: 'https://github.com/tchak')
|
champ1.update(value: 'https://github.com/tchak')
|
||||||
|
@ -118,8 +118,8 @@ describe 'shared/dossiers/champs', type: :view do
|
||||||
|
|
||||||
context "with seen_at" do
|
context "with seen_at" do
|
||||||
let(:types_de_champ_public) { [{ type: :checkbox }] }
|
let(:types_de_champ_public) { [{ type: :checkbox }] }
|
||||||
let(:dossier) { create(:dossier, :en_construction, :with_populated_champs, procedure:, depose_at: 1.day.ago) }
|
let(:dossier) { create(:dossier, :en_construction, :with_populated_champs, procedure:, depose_at: 1.day.ago.change(usec: 0)) }
|
||||||
let(:champ1) { dossier.champs[0] }
|
let(:champ1) { dossier.champs.first }
|
||||||
|
|
||||||
context "with a demande_seen_at after champ updated_at" do
|
context "with a demande_seen_at after champ updated_at" do
|
||||||
let(:demande_seen_at) { champ1.updated_at + 1.hour }
|
let(:demande_seen_at) { champ1.updated_at + 1.hour }
|
||||||
|
@ -127,21 +127,20 @@ describe 'shared/dossiers/champs', type: :view do
|
||||||
it { is_expected.not_to have_css(".fr-badge--new") }
|
it { is_expected.not_to have_css(".fr-badge--new") }
|
||||||
end
|
end
|
||||||
|
|
||||||
context "with champ updated_at at depose_at" do
|
context "with a demande_seen_at before champ updated_at" do
|
||||||
let(:champ1) { dossier.champs[0] }
|
|
||||||
let(:demande_seen_at) { champ1.updated_at - 1.hour }
|
|
||||||
|
|
||||||
before do
|
|
||||||
champ1.update(value: 'false', updated_at: dossier.depose_at)
|
|
||||||
end
|
|
||||||
|
|
||||||
it { is_expected.not_to have_css(".fr-badge--new") }
|
|
||||||
end
|
|
||||||
|
|
||||||
context "with a demande_seen_at after champ updated_at" do
|
|
||||||
let(:demande_seen_at) { champ1.updated_at - 1.hour }
|
let(:demande_seen_at) { champ1.updated_at - 1.hour }
|
||||||
|
|
||||||
it { is_expected.to have_css(".fr-badge--new") }
|
it { is_expected.to have_css(".fr-badge--new") }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "with champ updated_at at depose_at" do
|
||||||
|
let(:demande_seen_at) { champ1.updated_at - 1.hour }
|
||||||
|
|
||||||
|
before do
|
||||||
|
champ1.update_columns(value: 'false', updated_at: dossier.depose_at)
|
||||||
|
end
|
||||||
|
|
||||||
|
it { is_expected.not_to have_css(".fr-badge--new") }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -48,7 +48,7 @@ describe 'shared/dossiers/demande', type: :view do
|
||||||
let(:procedure) { create(:procedure, :published, :with_type_de_champ) }
|
let(:procedure) { create(:procedure, :published, :with_type_de_champ) }
|
||||||
|
|
||||||
it 'renders the champs' do
|
it 'renders the champs' do
|
||||||
dossier.champs_public.each do |champ|
|
dossier.project_champs_public.each do |champ|
|
||||||
expect(subject).to include(champ.libelle)
|
expect(subject).to include(champ.libelle)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -57,7 +57,7 @@ describe 'shared/dossiers/demande', type: :view do
|
||||||
context 'when a champ is freshly build' do
|
context 'when a champ is freshly build' do
|
||||||
let(:procedure) { create(:procedure, :published, :with_type_de_champ) }
|
let(:procedure) { create(:procedure, :published, :with_type_de_champ) }
|
||||||
before do
|
before do
|
||||||
dossier.champs_public.first.destroy
|
dossier.project_champs_public.first.destroy
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'renders without error' do
|
it 'renders without error' do
|
||||||
|
|
|
@ -44,7 +44,7 @@ describe 'shared/dossiers/edit', type: :view do
|
||||||
|
|
||||||
context 'with a single-value list' do
|
context 'with a single-value list' do
|
||||||
let(:types_de_champ_public) { [{ type: :drop_down_list, options:, mandatory: }] }
|
let(:types_de_champ_public) { [{ type: :drop_down_list, options:, mandatory: }] }
|
||||||
let(:champ) { dossier.champs_public.first }
|
let(:champ) { dossier.project_champs_public.first }
|
||||||
let(:type_de_champ) { champ.type_de_champ }
|
let(:type_de_champ) { champ.type_de_champ }
|
||||||
let(:enabled_options) { type_de_champ.drop_down_options }
|
let(:enabled_options) { type_de_champ.drop_down_options }
|
||||||
let(:mandatory) { true }
|
let(:mandatory) { true }
|
||||||
|
|
Loading…
Reference in a new issue