refactor(champ): simplify siret champ

This commit is contained in:
Paul Chavard 2022-04-28 15:04:21 +02:00
parent edba12705b
commit 3384b535c5
6 changed files with 24 additions and 38 deletions

View file

@ -2,9 +2,9 @@ class Champs::SiretController < ApplicationController
before_action :authenticate_logged_user!
def show
@position = params[:position]
extract_siret
find_etablisement
@champ = policy_scope(Champ).find(params[:champ_id])
@siret = read_param_value(@champ.input_name, 'value')
@etablissement = @champ.etablissement
if @siret.empty?
return clear_siret_and_etablissement
@ -34,22 +34,6 @@ class Champs::SiretController < ApplicationController
private
def extract_siret
if params[:dossier].key?(:champs_attributes)
@siret = params[:dossier][:champs_attributes][@position][:value]
@attribute = "dossier[champs_attributes][#{@position}][etablissement_attributes]"
else
@siret = params[:dossier][:champs_private_attributes][@position][:value]
@attribute = "dossier[champs_private_attributes][#{@position}][etablissement_attributes]"
end
end
def find_etablisement
@champ = policy_scope(Champ).find(params[:champ_id])
@etablissement = @champ.etablissement
@procedure_id = @champ.dossier.procedure.id
end
def find_etablissement_with_siret
APIEntrepriseService.create_etablissement(@champ, @siret, current_user.id)
end

View file

@ -1,6 +1,3 @@
<%= render_to_element(".siret-info-#{@position}",
<%= render_to_element("##{@champ.input_group_id} .siret-info",
partial: 'shared/champs/siret/etablissement',
locals: {
siret: @siret,
attribute: @attribute,
etablissement: @etablissement }) %>
locals: { siret: @siret, etablissement: @etablissement }) %>

View file

@ -2,11 +2,11 @@
id: champ.input_id,
aria: { describedby: champ.describedby_id },
placeholder: champ.libelle,
data: { remote: true, debounce: true, url: champs_siret_path(form.index), params: { champ_id: champ&.id }.to_query, spinner: true },
data: { remote: true, debounce: true, url: champs_siret_path(champ.id), spinner: true },
required: champ.mandatory?,
pattern: "[0-9]{14}",
title: "Le numéro de SIRET doit comporter exactement 14 chiffres"
.spinner.right.hidden
.siret-info{ class: "siret-info-#{form.index}" }
.siret-info
- if champ.etablissement.present?
= render partial: 'shared/dossiers/editable_champs/etablissement_titre', locals: { etablissement: champ.etablissement }

View file

@ -141,9 +141,9 @@ Rails.application.routes.draw do
end
namespace :champs do
get ':position/siret', to: 'siret#show', as: :siret
get ':position/dossier_link', to: 'dossier_link#show', as: :dossier_link
post ':position/carte', to: 'carte#show', as: :carte
get ':champ_id/siret', to: 'siret#show', as: :siret
get ':champ_id/carte/features', to: 'carte#index', as: :carte_features
post ':champ_id/carte/features', to: 'carte#create'

View file

@ -1,23 +1,22 @@
describe Champs::SiretController, type: :controller do
let(:user) { create(:user) }
let(:procedure) do
tdc_siret = build(:type_de_champ_siret, procedure: nil)
create(:procedure, :published, types_de_champ: [tdc_siret])
end
let(:procedure) { create(:procedure, :published, :with_siret) }
describe '#show' do
let(:dossier) { create(:dossier, user: user, procedure: procedure) }
let(:champ) { dossier.champs.first }
let(:champs_attributes) do
champ_attributes = []
champ_attributes[champ.id] = { value: siret }
champ_attributes
end
let(:params) do
{
champ_id: champ.id,
dossier: {
champs_attributes: {
'1' => { value: siret.to_s }
}
},
position: '1'
champs_attributes: champs_attributes
}
}
end
let(:siret) { '' }
@ -47,7 +46,7 @@ describe Champs::SiretController, type: :controller do
end
it 'clears any information or error message' do
expect(response.body).to include('.siret-info-1')
expect(response.body).to include("##{champ.input_group_id} .siret-info")
expect(response.body).to include('innerHTML = ""')
end
end
@ -120,7 +119,7 @@ describe Champs::SiretController, type: :controller do
end
context 'when user is not signed in' do
subject! { get :show, params: { position: '1' }, format: :js, xhr: true }
subject! { get :show, params: { champ_id: champ.id }, format: :js, xhr: true }
it { expect(response.code).to eq('401') }
end

View file

@ -154,6 +154,12 @@ FactoryBot.define do
end
end
trait :with_siret do
after(:build) do |procedure, _evaluator|
build(:type_de_champ_siret, procedure: procedure)
end
end
trait :with_yes_no do
after(:build) do |procedure, _evaluator|
build(:type_de_champ_yes_no, procedure: procedure)