fix(hack): fix and test hack for procedures using groupe instructeur api

This commit is contained in:
Paul Chavard 2023-06-14 18:38:19 +01:00
parent f675d2d1a7
commit 10524643fb
6 changed files with 71 additions and 7 deletions

View file

@ -29,12 +29,7 @@ module Mutations
# ugly hack to keep retro compatibility
# do not judge
if !ENV['OLD_GROUPE_INSTRUCTEURS_CREATE_API_PROCEDURE_ID'].nil? && demarche_number.in?(ENV['OLD_GROUPE_INSTRUCTEURS_CREATE_API_PROCEDURE_ID']&.split(',')&.map(&:to_i))
stable_id = procedure.groupe_instructeurs.first.routing_rule.left.stable_id
tdc = procedure.published_revision.types_de_champ.find_by(stable_id: stable_ids)
tdc.update(options: tdc.options['drop_down_options'].push(groupe_instructeur.label))
groupe_instructeur.update(routing_rule: ds_eq(champ_value(stable_id), constant(groupe_instruteur.label)))
end
groupe_instructeur.procedure.update_groupe_instructeur_routing_roules!
result = { groupe_instructeur: }

View file

@ -11,6 +11,11 @@ module Mutations
def resolve(groupe_instructeur:, label: nil, closed: nil)
if groupe_instructeur.update({ label:, closed: }.compact)
# ugly hack to keep retro compatibility
# do not judge
groupe_instructeur.procedure.update_groupe_instructeur_routing_roules!
{ groupe_instructeur: }
else
{ errors: groupe_instructeur.errors.full_messages }

View file

@ -0,0 +1,21 @@
module ProcedureGroupeInstructeurAPIHackConcern
extend ActiveSupport::Concern
include Logic
# ugly hack to keep retro compatibility
# do not judge
def update_groupe_instructeur_routing_roules!
if feature_enabled?(:groupe_instructeur_api_hack)
stable_id = groupe_instructeurs.first.routing_rule.left.stable_id
tdc = published_revision.types_de_champ.find_by(stable_id:)
drop_down_options = groupe_instructeurs.active.map do |groupe_instructeur|
groupe_instructeur.update!(routing_rule: ds_eq(champ_value(stable_id), constant(groupe_instructeur.label)))
groupe_instructeur.label
end
tdc.update!(drop_down_options:)
end
end
end

View file

@ -64,6 +64,7 @@ class Procedure < ApplicationRecord
include ProcedureStatsConcern
include EncryptableConcern
include InitiationProcedureConcern
include ProcedureGroupeInstructeurAPIHackConcern
include Discard::Model
self.discard_column = :hidden_at

View file

@ -17,7 +17,8 @@ features = [
:dossier_pdf_vide,
:hide_instructeur_email,
:procedure_routage_api,
:routing_rules
:routing_rules,
:groupe_instructeur_api_hack
]
def database_exists?

View file

@ -651,6 +651,27 @@ describe API::V2::GraphqlController do
}
end
context 'with api hack' do
include Logic
let(:types_de_champ_public) { [{ type: :drop_down_list }] }
let(:groupe_instructeur) { procedure.groupe_instructeurs.first }
let(:routing_champ) { procedure.active_revision.types_de_champ.first }
before do
groupe_instructeur.update(routing_rule: ds_eq(champ_value(routing_champ.stable_id), constant(groupe_instructeur.label)))
create(:groupe_instructeur, procedure: procedure)
Flipper.enable(:groupe_instructeur_api_hack, procedure)
end
it {
expect(gql_errors).to be_nil
expect(gql_data[:groupeInstructeurModifier][:errors]).to be_nil
expect(gql_data[:groupeInstructeurModifier][:groupeInstructeur][:id]).to eq(dossier.groupe_instructeur.to_typed_id)
expect(routing_champ.reload.drop_down_list_options).to match_array(procedure.groupe_instructeurs.active.map(&:label))
expect(procedure.groupe_instructeurs.active.map(&:routing_rule)).to match_array(procedure.groupe_instructeurs.active.map { ds_eq(champ_value(routing_champ.stable_id), constant(_1.label)) })
}
end
context 'validation error' do
it {
expect(gql_errors).to be_nil
@ -684,6 +705,26 @@ describe API::V2::GraphqlController do
expect(gql_data[:groupeInstructeurCreer][:groupeInstructeur][:instructeurs]).to match_array([{ id: admin.instructeur.to_typed_id, email: admin.instructeur.email }, { id: Instructeur.last.to_typed_id, email: }])
}
end
context 'with api hack' do
include Logic
let(:types_de_champ_public) { [{ type: :drop_down_list }] }
let(:groupe_instructeur) { procedure.groupe_instructeurs.first }
let(:routing_champ) { procedure.active_revision.types_de_champ.first }
before do
groupe_instructeur.update(routing_rule: ds_eq(champ_value(routing_champ.stable_id), constant(groupe_instructeur.label)))
Flipper.enable(:groupe_instructeur_api_hack, procedure)
end
it {
expect(gql_errors).to be_nil
expect(gql_data[:groupeInstructeurCreer][:errors]).to be_nil
expect(gql_data[:groupeInstructeurCreer][:groupeInstructeur][:id]).not_to be_nil
expect(routing_champ.reload.drop_down_list_options).to match_array(procedure.groupe_instructeurs.map(&:label))
expect(procedure.groupe_instructeurs.map(&:routing_rule)).to match_array(procedure.groupe_instructeurs.map { ds_eq(champ_value(routing_champ.stable_id), constant(_1.label)) })
}
end
end
context 'groupeInstructeurAjouterInstructeurs' do