Merge pull request #6633 from betagouv/improve-procedure-factory
This commit is contained in:
commit
a82ce9a13c
23 changed files with 212 additions and 128 deletions
|
@ -131,7 +131,7 @@ describe NewAdministrateur::ServicesController, type: :controller do
|
|||
end
|
||||
|
||||
it { expect(service.reload).not_to be_nil }
|
||||
it { expect(flash.alert).to eq("la démarche #{procedure.libelle} utilise encore le service service. Veuillez l'affecter à un autre service avant de pouvoir le supprimer") }
|
||||
it { expect(flash.alert).to eq("la démarche #{procedure.libelle} utilise encore le service #{service.nom}. Veuillez l'affecter à un autre service avant de pouvoir le supprimer") }
|
||||
it { expect(flash.notice).to be_nil }
|
||||
it { expect(response).to redirect_to(admin_services_path(procedure_id: 12)) }
|
||||
end
|
||||
|
|
|
@ -1,15 +1,35 @@
|
|||
describe RechercheController, type: :controller do
|
||||
let(:dossier) { create(:dossier, :en_construction, :with_populated_annotations) }
|
||||
let(:dossier2) { create(:dossier, :en_construction, procedure: dossier.procedure) }
|
||||
let(:procedure) {
|
||||
create(:procedure,
|
||||
:published,
|
||||
:for_individual,
|
||||
:with_type_de_champ,
|
||||
:with_type_de_champ_private,
|
||||
types_de_champ_count: 2,
|
||||
types_de_champ_private_count: 2)
|
||||
}
|
||||
let(:dossier) { create(:dossier, :en_construction, :with_individual, procedure: procedure) }
|
||||
let(:instructeur) { create(:instructeur) }
|
||||
|
||||
let(:dossier_with_expert) { avis.dossier }
|
||||
let(:avis) { create(:avis, dossier: create(:dossier, :en_construction, :with_populated_annotations)) }
|
||||
let(:dossier_with_expert) { create(:dossier, :en_construction, :with_individual, procedure: procedure) }
|
||||
let(:avis) { create(:avis, dossier: dossier_with_expert) }
|
||||
|
||||
let(:user) { instructeur.user }
|
||||
|
||||
before do
|
||||
instructeur.assign_to_procedure(dossier.procedure)
|
||||
|
||||
dossier.champs[0].value = "Name of district A"
|
||||
dossier.champs[1].value = "Name of city A"
|
||||
dossier.champs_private[0].value = "Dossier A is complete"
|
||||
dossier.champs_private[1].value = "Dossier A is valid"
|
||||
dossier.save!
|
||||
|
||||
dossier_with_expert.champs[0].value = "Name of district B"
|
||||
dossier_with_expert.champs[1].value = "name of city B"
|
||||
dossier_with_expert.champs_private[0].value = "Dossier B is incomplete"
|
||||
dossier_with_expert.champs_private[1].value = "Dossier B is invalid"
|
||||
dossier_with_expert.save!
|
||||
end
|
||||
|
||||
describe 'GET #index' do
|
||||
|
@ -46,8 +66,8 @@ describe RechercheController, type: :controller do
|
|||
end
|
||||
|
||||
context 'when instructeur do not own the dossier' do
|
||||
let(:dossier3) { create(:dossier, :en_construction) }
|
||||
let(:query) { dossier3.id }
|
||||
let(:dossier2) { create(:dossier, :en_construction) }
|
||||
let(:query) { dossier2.id }
|
||||
|
||||
it { is_expected.to have_http_status(200) }
|
||||
|
||||
|
@ -69,29 +89,49 @@ describe RechercheController, type: :controller do
|
|||
end
|
||||
end
|
||||
|
||||
describe 'by private annotations' do
|
||||
context 'when instructeur search by private annotations' do
|
||||
let(:query) { dossier.private_search_terms }
|
||||
describe 'by champs' do
|
||||
let(:query) { 'district A' }
|
||||
|
||||
before { subject }
|
||||
before { subject }
|
||||
|
||||
it { is_expected.to have_http_status(200) }
|
||||
it { is_expected.to have_http_status(200) }
|
||||
|
||||
it 'returns the expected dossier' do
|
||||
expect(assigns(:projected_dossiers).count).to eq(1)
|
||||
expect(assigns(:projected_dossiers).first.dossier_id).to eq(dossier.id)
|
||||
end
|
||||
it 'returns the expected dossier' do
|
||||
expect(assigns(:projected_dossiers).count).to eq(1)
|
||||
expect(assigns(:projected_dossiers).first.dossier_id).to eq(dossier.id)
|
||||
end
|
||||
|
||||
context 'when expert search by private annotations' do
|
||||
context 'as an expert' do
|
||||
let(:user) { avis.experts_procedure.expert.user }
|
||||
let(:query) { dossier_with_expert.private_search_terms }
|
||||
|
||||
before { subject }
|
||||
let(:query) { 'district' }
|
||||
|
||||
it { is_expected.to have_http_status(200) }
|
||||
|
||||
it 'returns 0 dossiers' do
|
||||
it 'returns only the dossier available to the expert' do
|
||||
expect(assigns(:projected_dossiers).count).to eq(1)
|
||||
expect(assigns(:projected_dossiers).first.dossier_id).to eq(dossier_with_expert.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'by private annotations' do
|
||||
let(:query) { 'invalid' }
|
||||
|
||||
before { subject }
|
||||
|
||||
it { is_expected.to have_http_status(200) }
|
||||
|
||||
it 'returns the expected dossier' do
|
||||
expect(assigns(:projected_dossiers).count).to eq(1)
|
||||
expect(assigns(:projected_dossiers).first.dossier_id).to eq(dossier_with_expert.id)
|
||||
end
|
||||
|
||||
context 'as an expert' do
|
||||
let(:user) { avis.experts_procedure.expert.user }
|
||||
|
||||
it { is_expected.to have_http_status(200) }
|
||||
|
||||
it 'does not allow experts to search in private annotations' do
|
||||
expect(assigns(:projected_dossiers).count).to eq(0)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -190,7 +190,7 @@ FactoryBot.define do
|
|||
end
|
||||
|
||||
factory :champ_siret, class: 'Champs::SiretChamp' do
|
||||
association :type_de_champ, factory: [:type_de_champ_siret]
|
||||
type_de_champ { association :type_de_champ_siret, procedure: dossier.procedure }
|
||||
association :etablissement, factory: [:etablissement]
|
||||
value { '44011762001530' }
|
||||
end
|
||||
|
|
|
@ -2,27 +2,19 @@ FactoryBot.define do
|
|||
factory :dossier do
|
||||
autorisation_donnees { true }
|
||||
state { Dossier.states.fetch(:brouillon) }
|
||||
association :user
|
||||
|
||||
user { association :user }
|
||||
groupe_instructeur { procedure.routee? ? nil : procedure.defaut_groupe_instructeur }
|
||||
revision { procedure.active_revision }
|
||||
individual { association(:individual, :empty, dossier: instance, strategy: :build) if procedure.for_individual? }
|
||||
|
||||
transient do
|
||||
procedure { nil }
|
||||
end
|
||||
|
||||
after(:build) do |dossier, evaluator|
|
||||
if evaluator.procedure.present?
|
||||
procedure = evaluator.procedure
|
||||
else
|
||||
procedure = create(:procedure, :published, :with_type_de_champ, :with_type_de_champ_private)
|
||||
end
|
||||
|
||||
dossier.revision = procedure.active_revision
|
||||
|
||||
# Assign the procedure to the dossier through the groupe_instructeur
|
||||
if dossier.groupe_instructeur.nil?
|
||||
dossier.groupe_instructeur = procedure.routee? ? nil : procedure.defaut_groupe_instructeur
|
||||
end
|
||||
|
||||
dossier.build_default_individual
|
||||
for_individual? { false }
|
||||
# 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
|
||||
# (due to some internal ActiveRecord error).
|
||||
# TODO: find a way to find the issue and just `build` the procedure.
|
||||
procedure { create(:procedure, :published, :with_type_de_champ, :with_type_de_champ_private, for_individual: for_individual?) }
|
||||
end
|
||||
|
||||
trait :with_entreprise do
|
||||
|
@ -42,12 +34,11 @@ FactoryBot.define do
|
|||
end
|
||||
|
||||
trait :with_individual do
|
||||
after(:build) do |dossier, evaluator|
|
||||
# If the procedure was implicitely created by the factory,
|
||||
# mark it automatically as for_individual.
|
||||
if evaluator.procedure.nil?
|
||||
dossier.procedure.update(for_individual: true)
|
||||
end
|
||||
transient do
|
||||
for_individual? { true }
|
||||
end
|
||||
|
||||
after(:build) do |dossier, _evaluator|
|
||||
if !dossier.procedure.for_individual?
|
||||
raise 'Inconsistent factory: attempting to create a dossier :with_individual on a procedure that is not `for_individual?`'
|
||||
end
|
||||
|
@ -99,9 +90,7 @@ FactoryBot.define do
|
|||
end
|
||||
|
||||
trait :with_commentaires do
|
||||
after(:create) do |dossier, _evaluator|
|
||||
dossier.commentaires += create_list(:commentaire, 2)
|
||||
end
|
||||
commentaires { [build(:commentaire), build(:commentaire)] }
|
||||
end
|
||||
|
||||
trait :followed do
|
||||
|
|
|
@ -4,5 +4,9 @@ FactoryBot.define do
|
|||
factory :groupe_instructeur do
|
||||
label { generate(:groupe_label) }
|
||||
association :procedure
|
||||
|
||||
trait :default do
|
||||
label { GroupeInstructeur::DEFAUT_LABEL }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -5,5 +5,12 @@ FactoryBot.define do
|
|||
prenom { 'Xavier' }
|
||||
birthdate { Date.new(1991, 11, 01) }
|
||||
association :dossier
|
||||
|
||||
trait :empty do
|
||||
gender { nil }
|
||||
nom { nil }
|
||||
prenom { nil }
|
||||
birthdate { nil }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
FactoryBot.define do
|
||||
sequence(:published_path) { |n| "fake_path#{n}" }
|
||||
|
||||
factory :procedure do
|
||||
sequence(:libelle) { |n| "Procedure #{n}" }
|
||||
description { "Demande de subvention à l'intention des associations" }
|
||||
|
@ -12,6 +13,9 @@ FactoryBot.define do
|
|||
lien_site_web { "https://mon-site.gouv" }
|
||||
path { SecureRandom.uuid }
|
||||
|
||||
groupe_instructeurs { [association(:groupe_instructeur, :default, procedure: instance, strategy: :build)] }
|
||||
administrateurs { administrateur.present? ? [administrateur] : [association(:administrateur)] }
|
||||
|
||||
transient do
|
||||
administrateur { }
|
||||
instructeurs { [] }
|
||||
|
@ -21,29 +25,16 @@ FactoryBot.define do
|
|||
end
|
||||
|
||||
after(:build) do |procedure, evaluator|
|
||||
if evaluator.administrateur
|
||||
procedure.administrateurs = [evaluator.administrateur]
|
||||
elsif procedure.administrateurs.empty?
|
||||
procedure.administrateurs = [build(:administrateur)]
|
||||
end
|
||||
procedure.draft_revision = build(:procedure_revision, procedure: procedure)
|
||||
initial_revision = build(:procedure_revision, procedure: procedure)
|
||||
add_types_de_champs(evaluator.types_de_champ, to: initial_revision, scope: :public)
|
||||
add_types_de_champs(evaluator.types_de_champ_private, to: initial_revision, scope: :private)
|
||||
|
||||
evaluator.types_de_champ.each do |type_de_champ|
|
||||
type_de_champ.revision = procedure.draft_revision
|
||||
type_de_champ.private = false
|
||||
type_de_champ.revision.revision_types_de_champ << build(:procedure_revision_type_de_champ,
|
||||
revision: procedure.draft_revision,
|
||||
position: type_de_champ.order_place,
|
||||
type_de_champ: type_de_champ)
|
||||
end
|
||||
|
||||
evaluator.types_de_champ_private.each do |type_de_champ|
|
||||
type_de_champ.revision = procedure.draft_revision
|
||||
type_de_champ.private = true
|
||||
type_de_champ.revision.revision_types_de_champ_private << build(:procedure_revision_type_de_champ,
|
||||
revision: procedure.draft_revision,
|
||||
position: type_de_champ.order_place,
|
||||
type_de_champ: type_de_champ)
|
||||
if procedure.brouillon?
|
||||
procedure.draft_revision = initial_revision
|
||||
else
|
||||
procedure.published_revision = initial_revision
|
||||
procedure.published_revision.published_at = Time.zone.now
|
||||
procedure.draft_revision = build(:procedure_revision, from_original: initial_revision)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -71,11 +62,12 @@ FactoryBot.define do
|
|||
end
|
||||
|
||||
factory :simple_procedure do
|
||||
published
|
||||
|
||||
for_individual { true }
|
||||
|
||||
after(:build) do |procedure, _evaluator|
|
||||
procedure.for_individual = true
|
||||
build(:type_de_champ, libelle: 'Texte obligatoire', mandatory: true, procedure: procedure)
|
||||
procedure.path = generate(:published_path)
|
||||
procedure.publish!
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -88,9 +80,7 @@ FactoryBot.define do
|
|||
end
|
||||
|
||||
trait :with_service do
|
||||
after(:build) do |procedure, _evaluator|
|
||||
procedure.service = create(:service)
|
||||
end
|
||||
service { association :service, administrateur: administrateurs.first }
|
||||
end
|
||||
|
||||
trait :with_instructeur do
|
||||
|
@ -106,9 +96,7 @@ FactoryBot.define do
|
|||
end
|
||||
|
||||
trait :for_individual do
|
||||
after(:build) do |procedure, _evaluator|
|
||||
procedure.for_individual = true
|
||||
end
|
||||
for_individual { true }
|
||||
end
|
||||
|
||||
trait :with_auto_archive do
|
||||
|
@ -218,26 +206,27 @@ FactoryBot.define do
|
|||
end
|
||||
|
||||
trait :published do
|
||||
after(:build) do |procedure, _evaluator|
|
||||
procedure.path = generate(:published_path)
|
||||
procedure.publish!
|
||||
end
|
||||
aasm_state { :publiee }
|
||||
path { generate(:published_path) }
|
||||
published_at { Time.zone.now }
|
||||
unpublished_at { nil }
|
||||
closed_at { nil }
|
||||
end
|
||||
|
||||
trait :closed do
|
||||
after(:build) do |procedure, _evaluator|
|
||||
procedure.path = generate(:published_path)
|
||||
procedure.publish!
|
||||
procedure.close!
|
||||
end
|
||||
published
|
||||
|
||||
aasm_state { :close }
|
||||
published_at { Time.zone.now - 1.second }
|
||||
closed_at { Time.zone.now }
|
||||
end
|
||||
|
||||
trait :unpublished do
|
||||
after(:build) do |procedure, _evaluator|
|
||||
procedure.path = generate(:published_path)
|
||||
procedure.publish!
|
||||
procedure.unpublish!
|
||||
end
|
||||
published
|
||||
|
||||
aasm_state { :depubliee }
|
||||
published_at { Time.zone.now - 1.second }
|
||||
unpublished_at { Time.zone.now }
|
||||
end
|
||||
|
||||
trait :discarded do
|
||||
|
@ -308,3 +297,17 @@ FactoryBot.define do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
def add_types_de_champs(types_de_champ, to: nil, scope: :public)
|
||||
revision = to
|
||||
association_name = scope == :private ? :revision_types_de_champ_private : :revision_types_de_champ
|
||||
|
||||
types_de_champ.each do |type_de_champ|
|
||||
type_de_champ.revision = revision
|
||||
type_de_champ.private = (scope == :private)
|
||||
type_de_champ.revision.public_send(association_name) << build(:procedure_revision_type_de_champ,
|
||||
revision: revision,
|
||||
position: type_de_champ.order_place,
|
||||
type_de_champ: type_de_champ)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,4 +1,21 @@
|
|||
FactoryBot.define do
|
||||
factory :procedure_revision do
|
||||
transient do
|
||||
from_original { nil }
|
||||
end
|
||||
|
||||
after(:build) do |revision, evaluator|
|
||||
if evaluator.from_original
|
||||
original = evaluator.from_original
|
||||
|
||||
revision.procedure = original.procedure
|
||||
original.revision_types_de_champ.each do |r_tdc|
|
||||
revision.revision_types_de_champ << build(:procedure_revision_type_de_champ, from_original: r_tdc)
|
||||
end
|
||||
original.revision_types_de_champ_private.each do |r_tdc|
|
||||
revision.revision_types_de_champ_private << build(:procedure_revision_type_de_champ, from_original: r_tdc)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,4 +1,16 @@
|
|||
FactoryBot.define do
|
||||
factory :procedure_revision_type_de_champ do
|
||||
transient do
|
||||
from_original { nil }
|
||||
end
|
||||
|
||||
after(:build) do |revision_type_de_champ, evaluator|
|
||||
if evaluator.from_original
|
||||
original = evaluator.from_original
|
||||
|
||||
revision_type_de_champ.type_de_champ = original.type_de_champ
|
||||
revision_type_de_champ.position = original.position
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
FactoryBot.define do
|
||||
factory :service do
|
||||
nom { 'service' }
|
||||
sequence(:nom) { |n| "Service #{n}" }
|
||||
organisme { 'organisme' }
|
||||
type_organisme { Service.type_organismes.fetch(:association) }
|
||||
email { 'email@toto.com' }
|
||||
|
|
|
@ -49,7 +49,7 @@ RSpec.describe DossierHelper, type: :helper do
|
|||
let(:procedure) { create(:simple_procedure, :for_individual) }
|
||||
|
||||
context "when the individual is not provided" do
|
||||
let(:individual) { nil }
|
||||
let(:individual) { build(:individual, :empty) }
|
||||
it { is_expected.to be_blank }
|
||||
end
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ RSpec.describe APIEntreprise::Job, type: :job do
|
|||
describe '#perform' do
|
||||
let(:dossier) { create(:dossier, :with_entreprise) }
|
||||
|
||||
context 'when a un retryable error is raised' do
|
||||
context 'when an un-retriable error is raised' do
|
||||
let(:errors) { [:standard_error] }
|
||||
|
||||
it 'does not retry' do
|
||||
|
@ -14,7 +14,7 @@ RSpec.describe APIEntreprise::Job, type: :job do
|
|||
end
|
||||
end
|
||||
|
||||
context 'when a retryable error is raised' do
|
||||
context 'when a retriable error is raised' do
|
||||
let(:errors) { [:service_unavaible, :bad_gateway, :timed_out] }
|
||||
|
||||
it 'retries 5 times' do
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
RSpec.describe ApplicationMailer, type: :mailer do
|
||||
describe 'dealing with invalid emails' do
|
||||
let(:dossier) { create(:dossier, procedure: build(:simple_procedure)) }
|
||||
let(:dossier) { create(:dossier, procedure: create(:simple_procedure)) }
|
||||
subject { DossierMailer.notify_new_draft(dossier) }
|
||||
|
||||
describe 'invalid emails are not sent' do
|
||||
|
|
|
@ -12,7 +12,7 @@ RSpec.describe DossierMailer, type: :mailer do
|
|||
end
|
||||
|
||||
describe '.notify_new_draft' do
|
||||
let(:dossier) { create(:dossier, procedure: build(:simple_procedure, :with_auto_archive)) }
|
||||
let(:dossier) { create(:dossier, procedure: create(:simple_procedure, :with_auto_archive)) }
|
||||
|
||||
subject { described_class.notify_new_draft(dossier) }
|
||||
|
||||
|
@ -27,7 +27,7 @@ RSpec.describe DossierMailer, type: :mailer do
|
|||
end
|
||||
|
||||
describe '.notify_new_answer with dossier brouillon' do
|
||||
let(:dossier) { create(:dossier, procedure: build(:simple_procedure)) }
|
||||
let(:dossier) { create(:dossier, procedure: create(:simple_procedure)) }
|
||||
let(:commentaire) { create(:commentaire, dossier: dossier) }
|
||||
subject { described_class.with(commentaire: commentaire).notify_new_answer }
|
||||
|
||||
|
@ -39,8 +39,9 @@ RSpec.describe DossierMailer, type: :mailer do
|
|||
end
|
||||
|
||||
describe '.notify_new_answer with dossier en construction' do
|
||||
let(:dossier) { create(:dossier, state: "en_construction", procedure: build(:simple_procedure)) }
|
||||
let(:dossier) { create(:dossier, :en_construction, procedure: create(:simple_procedure)) }
|
||||
let(:commentaire) { create(:commentaire, dossier: dossier) }
|
||||
|
||||
subject { described_class.with(commentaire: commentaire).notify_new_answer }
|
||||
|
||||
it { expect(subject.subject).to include("Nouveau message") }
|
||||
|
@ -51,7 +52,7 @@ RSpec.describe DossierMailer, type: :mailer do
|
|||
end
|
||||
|
||||
describe '.notify_new_answer with commentaire discarded' do
|
||||
let(:dossier) { create(:dossier, procedure: build(:simple_procedure)) }
|
||||
let(:dossier) { create(:dossier, procedure: create(:simple_procedure)) }
|
||||
let(:commentaire) { create(:commentaire, dossier: dossier, discarded_at: 2.minutes.ago) }
|
||||
|
||||
subject { described_class.with(commentaire: commentaire).notify_new_answer }
|
||||
|
@ -83,7 +84,7 @@ RSpec.describe DossierMailer, type: :mailer do
|
|||
end
|
||||
|
||||
describe '.notify_revert_to_instruction' do
|
||||
let(:dossier) { create(:dossier, procedure: build(:simple_procedure)) }
|
||||
let(:dossier) { create(:dossier, procedure: create(:simple_procedure)) }
|
||||
|
||||
subject { described_class.notify_revert_to_instruction(dossier) }
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
describe Champs::IbanChamp do
|
||||
describe '#valid?' do
|
||||
it do
|
||||
|
|
|
@ -193,11 +193,21 @@ describe Dossier do
|
|||
expect(dossier.champs.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) }
|
||||
|
||||
subject do
|
||||
dossier.individual = nil
|
||||
dossier.build_default_individual
|
||||
end
|
||||
|
||||
context 'when the dossier belongs to a procedure for individuals' do
|
||||
let(:procedure) { create(:procedure, :with_type_de_champ, for_individual: true) }
|
||||
let(:procedure) { create(:procedure, for_individual: true) }
|
||||
|
||||
it 'creates a default individual' do
|
||||
subject
|
||||
expect(dossier.individual).to be_present
|
||||
expect(dossier.individual.nom).to be_nil
|
||||
expect(dossier.individual.prenom).to be_nil
|
||||
|
@ -209,6 +219,7 @@ describe Dossier do
|
|||
let(:user) { build(:user, france_connect_information: france_connect_information) }
|
||||
|
||||
it 'fills the individual with the informations from France Connect' do
|
||||
subject
|
||||
expect(dossier.individual.nom).to eq('DUBOIS')
|
||||
expect(dossier.individual.prenom).to eq('Angela Claire Louise')
|
||||
expect(dossier.individual.gender).to eq(Individual::GENDER_FEMALE)
|
||||
|
@ -217,9 +228,10 @@ describe Dossier do
|
|||
end
|
||||
|
||||
context 'when the dossier belongs to a procedure for moral personas' do
|
||||
let(:procedure) { create(:procedure, :with_type_de_champ, for_individual: false) }
|
||||
let(:procedure) { create(:procedure, for_individual: false) }
|
||||
|
||||
it 'doesn’t create a individual' do
|
||||
subject
|
||||
expect(dossier.individual).to be_nil
|
||||
end
|
||||
end
|
||||
|
|
|
@ -262,14 +262,14 @@ describe Instructeur, type: :model do
|
|||
end
|
||||
|
||||
describe '#notifications_for_groupe_instructeurs' do
|
||||
# one procedure, one group, 2 instructeurs
|
||||
# a procedure, one group, 2 instructeurs
|
||||
let(:procedure) { create(:simple_procedure, :routee, :with_type_de_champ_private, :for_individual) }
|
||||
let(:gi_p1) { procedure.groupe_instructeurs.last }
|
||||
let!(:dossier) { create(:dossier, :with_individual, :followed, groupe_instructeur: gi_p1, state: Dossier.states.fetch(:en_construction)) }
|
||||
let!(:dossier) { create(:dossier, :with_individual, :followed, procedure: procedure, groupe_instructeur: gi_p1, state: Dossier.states.fetch(:en_construction)) }
|
||||
let(:instructeur) { dossier.follows.first.instructeur }
|
||||
let!(:instructeur_2) { create(:instructeur, groupe_instructeurs: [gi_p1]) }
|
||||
|
||||
# one other procedure, dossier followed by a third instructeur
|
||||
# another procedure, dossier followed by a third instructeur
|
||||
let!(:dossier_on_procedure_2) { create(:dossier, :followed, state: Dossier.states.fetch(:en_construction)) }
|
||||
let!(:instructeur_on_procedure_2) { dossier_on_procedure_2.follows.first.instructeur }
|
||||
let(:gi_p2) { dossier.groupe_instructeur }
|
||||
|
|
|
@ -16,7 +16,7 @@ describe ProcedurePresentation do
|
|||
|
||||
context 'for a published procedure' do
|
||||
let(:procedure) { create(:procedure, :published) }
|
||||
let!(:tdc) { { type_champ: :number, libelle: 'libelle 1' } }
|
||||
let(:tdc) { { type_champ: :number, libelle: 'libelle 1' } }
|
||||
|
||||
before do
|
||||
procedure.draft_revision.add_type_de_champ(tdc)
|
||||
|
@ -26,7 +26,7 @@ describe ProcedurePresentation do
|
|||
it { is_expected.to match(['libelle 1']) }
|
||||
|
||||
context 'when there is another published revision with an added tdc' do
|
||||
let!(:added_tdc) { { type_champ: :number, libelle: 'libelle 2' } }
|
||||
let(:added_tdc) { { type_champ: :number, libelle: 'libelle 2' } }
|
||||
|
||||
before do
|
||||
procedure.draft_revision.add_type_de_champ(added_tdc)
|
||||
|
@ -37,7 +37,7 @@ describe ProcedurePresentation do
|
|||
end
|
||||
|
||||
context 'add one tdc above the first one' do
|
||||
let!(:tdc2) { { type_champ: :number, libelle: 'libelle 2' } }
|
||||
let(:tdc2) { { type_champ: :number, libelle: 'libelle 2' } }
|
||||
|
||||
before do
|
||||
created_tdc2 = procedure.draft_revision.add_type_de_champ(tdc2)
|
||||
|
@ -47,7 +47,7 @@ describe ProcedurePresentation do
|
|||
|
||||
it { is_expected.to match(['libelle 2', 'libelle 1']) }
|
||||
|
||||
context 'and finaly, when this tdc is removed' do
|
||||
context 'and finally, when this tdc is removed' do
|
||||
let!(:previous_tdc2) { procedure.published_revision.types_de_champ.find_by(libelle: 'libelle 2') }
|
||||
|
||||
before do
|
||||
|
|
|
@ -320,8 +320,8 @@ describe ProcedurePresentation do
|
|||
|
||||
let(:procedure) { create(:procedure, :for_individual) }
|
||||
|
||||
let!(:first_dossier) { create(:dossier, procedure: procedure, individual: create(:individual, gender: 'M', prenom: 'Alain', nom: 'Antonelli')) }
|
||||
let!(:last_dossier) { create(:dossier, procedure: procedure, individual: create(:individual, gender: 'Mme', prenom: 'Zora', nom: 'Zemmour')) }
|
||||
let!(:first_dossier) { create(:dossier, procedure: procedure, individual: build(:individual, gender: 'M', prenom: 'Alain', nom: 'Antonelli')) }
|
||||
let!(:last_dossier) { create(:dossier, procedure: procedure, individual: build(:individual, gender: 'Mme', prenom: 'Zora', nom: 'Zemmour')) }
|
||||
|
||||
context 'for gender column' do
|
||||
let(:column) { 'gender' }
|
||||
|
@ -617,8 +617,8 @@ describe ProcedurePresentation do
|
|||
|
||||
context 'for individual table' do
|
||||
let(:procedure) { create(:procedure, :for_individual) }
|
||||
let!(:kept_dossier) { create(:dossier, procedure: procedure, individual: create(:individual, gender: 'Mme', prenom: 'Josephine', nom: 'Baker')) }
|
||||
let!(:discarded_dossier) { create(:dossier, procedure: procedure, individual: create(:individual, gender: 'M', prenom: 'Jean', nom: 'Tremblay')) }
|
||||
let!(:kept_dossier) { create(:dossier, procedure: procedure, individual: build(:individual, gender: 'Mme', prenom: 'Josephine', nom: 'Baker')) }
|
||||
let!(:discarded_dossier) { create(:dossier, procedure: procedure, individual: build(:individual, gender: 'M', prenom: 'Jean', nom: 'Tremblay')) }
|
||||
|
||||
context 'for gender column' do
|
||||
let(:filter) { [{ 'table' => 'individual', 'column' => 'gender', 'value' => 'Mme' }] }
|
||||
|
@ -646,7 +646,7 @@ describe ProcedurePresentation do
|
|||
]
|
||||
end
|
||||
|
||||
let!(:other_kept_dossier) { create(:dossier, procedure: procedure, individual: create(:individual, gender: 'M', prenom: 'Romuald', nom: 'Pistis')) }
|
||||
let!(:other_kept_dossier) { create(:dossier, procedure: procedure, individual: build(:individual, gender: 'M', prenom: 'Romuald', nom: 'Pistis')) }
|
||||
|
||||
it 'returns every dossier that matches any of the search criteria for a given column' do
|
||||
is_expected.to contain_exactly(kept_dossier.id, other_kept_dossier.id)
|
||||
|
|
|
@ -21,11 +21,11 @@ describe DossierSerializer do
|
|||
let(:dossier) { create(:dossier, :en_construction, procedure: create(:procedure, :published, :with_type_de_champ)) }
|
||||
|
||||
before do
|
||||
dossier.champs << build(:champ_carte)
|
||||
dossier.champs << build(:champ_siret)
|
||||
dossier.champs << build(:champ_integer_number)
|
||||
dossier.champs << build(:champ_decimal_number)
|
||||
dossier.champs << build(:champ_linked_drop_down_list)
|
||||
dossier.champs << build(:champ_carte, dossier: dossier)
|
||||
dossier.champs << build(:champ_siret, dossier: dossier)
|
||||
dossier.champs << build(:champ_integer_number, dossier: dossier)
|
||||
dossier.champs << build(:champ_decimal_number, dossier: dossier)
|
||||
dossier.champs << build(:champ_linked_drop_down_list, dossier: dossier)
|
||||
end
|
||||
|
||||
it {
|
||||
|
|
|
@ -92,7 +92,7 @@ describe DossierProjectionService do
|
|||
context 'for individual table' do
|
||||
let(:table) { 'individual' }
|
||||
let(:procedure) { create(:procedure, :for_individual, :with_type_de_champ, :with_type_de_champ_private) }
|
||||
let(:dossier) { create(:dossier, procedure: procedure, individual: create(:individual, nom: 'Martin', prenom: 'Jacques', gender: 'M.')) }
|
||||
let(:dossier) { create(:dossier, procedure: procedure, individual: build(:individual, nom: 'Martin', prenom: 'Jacques', gender: 'M.')) }
|
||||
|
||||
context 'for prenom column' do
|
||||
let(:column) { 'prenom' }
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
describe 'wcag rules for usager', js: true do
|
||||
let(:procedure) { create(:procedure, :with_type_de_champ, :with_all_champs, :with_service, :for_individual, :published) }
|
||||
let(:procedure) { create(:procedure, :published, :with_all_champs, :with_service, :for_individual) }
|
||||
let(:password) { 'a very complicated password' }
|
||||
let(:litteraire_user) { create(:user, password: password) }
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ describe 'shared/dossiers/demande.html.haml', type: :view do
|
|||
end
|
||||
|
||||
context 'when dossier was created by an individual' do
|
||||
let(:individual) { create(:individual) }
|
||||
let(:individual) { build(:individual) }
|
||||
|
||||
it 'renders the individual identity infos' do
|
||||
expect(subject).to include(individual.gender)
|
||||
|
|
Loading…
Add table
Reference in a new issue