graphql_controller_spec: create all types de champs only when required

Creating a procedure with all available types de champ is slow. We can
create a simpler procedure in the default case, and only create all
types de champs when the example requires it.

Speeds up this spec from 1m 55s to 0m 57s.
This commit is contained in:
Pierre de La Morinerie 2021-11-03 16:00:40 +00:00
parent e02251c0e5
commit f0e045ad25

View file

@ -1,10 +1,11 @@
describe API::V2::GraphqlController do describe API::V2::GraphqlController do
let(:admin) { create(:administrateur) } let(:admin) { create(:administrateur) }
let(:token) { admin.renew_api_token } let(:token) { admin.renew_api_token }
let(:procedure) { create(:procedure, :published, :for_individual, :with_service, :with_all_champs, :with_all_annotations, administrateurs: [admin]) } let(:procedure) { create(:procedure, :published, :for_individual, :with_service, administrateurs: [admin]) }
let(:dossier) { create(:dossier, :en_construction, :with_individual, procedure: procedure) } let(:dossier) { create(:dossier, :en_construction, :with_individual, procedure: procedure) }
let(:dossier1) { create(:dossier, :en_construction, :with_individual, procedure: procedure, en_construction_at: 1.day.ago) } let(:dossier1) { create(:dossier, :en_construction, :with_individual, procedure: procedure, en_construction_at: 1.day.ago) }
let(:dossier2) { create(:dossier, :en_construction, :with_individual, :archived, procedure: procedure, en_construction_at: 3.days.ago) } let(:dossier2) { create(:dossier, :en_construction, :with_individual, :archived, procedure: procedure, en_construction_at: 3.days.ago) }
#let(:dossiers) { [dossier2, dossier1, dossier] }
let(:dossiers) { [dossier2, dossier1, dossier] } let(:dossiers) { [dossier2, dossier1, dossier] }
let(:instructeur) { create(:instructeur, followed_dossiers: dossiers) } let(:instructeur) { create(:instructeur, followed_dossiers: dossiers) }
@ -107,53 +108,57 @@ describe API::V2::GraphqlController do
end end
describe "demarche" do describe "demarche" do
it "should be returned" do describe "query a demarche" do
expect(gql_errors).to eq(nil) let(:procedure) { create(:procedure, :published, :for_individual, :with_service, :with_all_champs, :with_all_annotations, administrateurs: [admin]) }
expect(gql_data).to eq(demarche: {
id: procedure.to_typed_id, it "returns the demarche" do
number: procedure.id, expect(gql_errors).to eq(nil)
title: procedure.libelle, expect(gql_data).to eq(demarche: {
description: procedure.description, id: procedure.to_typed_id,
state: 'publiee', number: procedure.id,
dateFermeture: nil, title: procedure.libelle,
dateCreation: procedure.created_at.iso8601, description: procedure.description,
dateDerniereModification: procedure.updated_at.iso8601, state: 'publiee',
groupeInstructeurs: [ dateFermeture: nil,
{ dateCreation: procedure.created_at.iso8601,
instructeurs: [{ email: instructeur.email }], dateDerniereModification: procedure.updated_at.iso8601,
label: "défaut" groupeInstructeurs: [
}
],
revisions: procedure.revisions.map { |revision| { id: revision.to_typed_id } },
draftRevision: { id: procedure.draft_revision.to_typed_id },
publishedRevision: {
id: procedure.published_revision.to_typed_id,
champDescriptors: procedure.published_types_de_champ.map do |tdc|
{ {
type: tdc.type_champ instructeurs: [{ email: instructeur.email }],
label: "défaut"
} }
end ],
}, revisions: procedure.revisions.map { |revision| { id: revision.to_typed_id } },
service: { draftRevision: { id: procedure.draft_revision.to_typed_id },
nom: procedure.service.nom, publishedRevision: {
typeOrganisme: procedure.service.type_organisme, id: procedure.published_revision.to_typed_id,
organisme: procedure.service.organisme champDescriptors: procedure.published_types_de_champ.map do |tdc|
}, {
champDescriptors: procedure.types_de_champ.map do |tdc| type: tdc.type_champ
{ }
id: tdc.to_typed_id, end
label: tdc.libelle, },
type: tdc.type_champ, service: {
description: tdc.description, nom: procedure.service.nom,
required: tdc.mandatory?, typeOrganisme: procedure.service.type_organisme,
champDescriptors: tdc.repetition? ? tdc.reload.types_de_champ.map { |tdc| { id: tdc.to_typed_id, type: tdc.type_champ } } : nil, organisme: procedure.service.organisme
options: tdc.drop_down_list? ? tdc.drop_down_list_options.reject(&:empty?) : nil },
champDescriptors: procedure.types_de_champ.map do |tdc|
{
id: tdc.to_typed_id,
label: tdc.libelle,
type: tdc.type_champ,
description: tdc.description,
required: tdc.mandatory?,
champDescriptors: tdc.repetition? ? tdc.reload.types_de_champ.map { |tdc| { id: tdc.to_typed_id, type: tdc.type_champ } } : nil,
options: tdc.drop_down_list? ? tdc.drop_down_list_options.reject(&:empty?) : nil
}
end,
dossiers: {
nodes: dossiers.map { |dossier| { id: dossier.to_typed_id } }
} }
end, })
dossiers: { end
nodes: dossiers.map { |dossier| { id: dossier.to_typed_id } }
}
})
end end
describe "filter dossiers" do describe "filter dossiers" do
@ -300,7 +305,8 @@ describe API::V2::GraphqlController do
dossier dossier
end end
context "with individual" do context "for individual" do
let(:procedure) { create(:procedure, :published, :for_individual, :with_service, :with_all_champs, :with_all_annotations, administrateurs: [admin]) }
let(:query) do let(:query) do
"{ "{
dossier(number: #{dossier.id}) { dossier(number: #{dossier.id}) {
@ -452,7 +458,7 @@ describe API::V2::GraphqlController do
end end
end end
context "with entreprise" do context "for entreprise" do
let(:procedure_for_entreprise) { create(:procedure, :published, administrateurs: [admin]) } let(:procedure_for_entreprise) { create(:procedure, :published, administrateurs: [admin]) }
let(:dossier) { create(:dossier, :en_construction, :with_entreprise, procedure: procedure_for_entreprise) } let(:dossier) { create(:dossier, :en_construction, :with_entreprise, procedure: procedure_for_entreprise) }
@ -725,7 +731,7 @@ describe API::V2::GraphqlController do
} }
end end
context "when file is really big" do context "when the file is really big" do
before do before do
champ.piece_justificative_file.blob.update(byte_size: byte_size) champ.piece_justificative_file.blob.update(byte_size: byte_size)
end end
@ -1325,6 +1331,8 @@ describe API::V2::GraphqlController do
end end
describe 'dossierModifierAnnotation' do describe 'dossierModifierAnnotation' do
let(:procedure) { create(:procedure, :published, :for_individual, :with_service, :with_all_annotations, administrateurs: [admin]) }
describe 'text' do describe 'text' do
let(:query) do let(:query) do
"mutation { "mutation {