diff --git a/app/controllers/champs/siret_controller.rb b/app/controllers/champs/siret_controller.rb
index 0eabd821e..a099f25c4 100644
--- a/app/controllers/champs/siret_controller.rb
+++ b/app/controllers/champs/siret_controller.rb
@@ -19,7 +19,7 @@ class Champs::SiretController < ApplicationController
rescue ApiEntreprise::API::RequestFailed
return siret_error(:network_error)
end
- if etablissement.blank?
+ if etablissement.nil?
return siret_error(:not_found)
end
@@ -50,10 +50,7 @@ class Champs::SiretController < ApplicationController
end
def find_etablissement_with_siret
- etablissement_attributes = ApiEntrepriseService.get_etablissement_params_for_siret(@siret, @procedure_id)
- if etablissement_attributes.present?
- Etablissement.new(etablissement_attributes)
- end
+ ApiEntrepriseService.create_etablissement(@champ.dossier, @siret, current_user.id)
end
def clear_siret_and_etablissement
diff --git a/app/controllers/users/dossiers_controller.rb b/app/controllers/users/dossiers_controller.rb
index ae24cf0ff..4d9c75b04 100644
--- a/app/controllers/users/dossiers_controller.rb
+++ b/app/controllers/users/dossiers_controller.rb
@@ -104,20 +104,14 @@ module Users
sanitized_siret = siret_model.siret
begin
- etablissement_attributes = ApiEntrepriseService.get_etablissement_params_for_siret(sanitized_siret, @dossier.procedure.id, current_user.id)
+ etablissement = ApiEntrepriseService.create_etablissement(@dossier, sanitized_siret, current_user.id)
rescue ApiEntreprise::API::RequestFailed
return render_siret_error(t('errors.messages.siret_network_error'))
end
- if etablissement_attributes.blank?
+ if etablissement.nil?
return render_siret_error(t('errors.messages.siret_unknown'))
end
- attestation_sociale_url = etablissement_attributes.delete(:entreprise_attestation_sociale_url)
- attestation_fiscale_url = etablissement_attributes.delete(:entreprise_attestation_fiscale_url)
- etablissement = @dossier.build_etablissement(etablissement_attributes)
- etablissement.upload_attestation_sociale(attestation_sociale_url) if attestation_sociale_url.present?
- etablissement.upload_attestation_fiscale(attestation_fiscale_url) if attestation_fiscale_url.present?
- etablissement.save!
current_user.update!(siret: sanitized_siret)
@dossier.update!(autorisation_donnees: true)
diff --git a/app/javascript/components/MapEditor/index.js b/app/javascript/components/MapEditor/index.js
index aa329b524..04c55a708 100644
--- a/app/javascript/components/MapEditor/index.js
+++ b/app/javascript/components/MapEditor/index.js
@@ -6,7 +6,7 @@ import DrawControl from 'react-mapbox-gl-draw';
import SwitchMapStyle from './SwitchMapStyle';
import SearchInput from './SearchInput';
import { getJSON, ajax } from '@utils';
-import { gpx } from '@tmcw/togeojson/dist/togeojson.es.js';
+import { gpx, kml } from '@tmcw/togeojson/dist/togeojson.es.js';
import ortho from './styles/ortho.json';
import vector from './styles/vector.json';
import { polygonCadastresFill, polygonCadastresLine } from './utils';
@@ -32,6 +32,7 @@ function MapEditor({ featureCollection, url, preview }) {
const [zoom, setZoom] = useState([5]);
const [currentMap, setCurrentMap] = useState({});
const [bbox, setBbox] = useState(featureCollection.bbox);
+ const [importInputs, setImportInputs] = useState([]);
const mapStyle = style === 'ortho' ? ortho : vector;
const cadastresFeatureCollection = filterFeatureCollection(
featureCollection,
@@ -50,6 +51,13 @@ function MapEditor({ featureCollection, url, preview }) {
draw.setFeatureProperty(lid, 'id', feature.properties.id);
}
+ const generateId = () => Math.random().toString(20).substr(2, 6);
+
+ const updateImportInputs = (inputs, inputId) => {
+ const updatedInputs = inputs.filter((input) => input.id !== inputId);
+ setImportInputs(updatedInputs);
+ };
+
async function onDrawCreate({ features }) {
for (const feature of features) {
const data = await getJSON(url, { feature }, 'post');
@@ -95,29 +103,98 @@ function MapEditor({ featureCollection, url, preview }) {
}
};
- const onGpxImport = (e) => {
+ const onFileImport = (e, inputId) => {
+ const isGpxFile = e.target.files[0].name.includes('.gpx');
let reader = new FileReader();
reader.readAsText(e.target.files[0], 'UTF-8');
reader.onload = async (event) => {
- const featureCollection = gpx(
- new DOMParser().parseFromString(event.target.result, 'text/xml')
- );
+ let featureCollection;
+ isGpxFile
+ ? (featureCollection = gpx(
+ new DOMParser().parseFromString(event.target.result, 'text/xml')
+ ))
+ : (featureCollection = kml(
+ new DOMParser().parseFromString(event.target.result, 'text/xml')
+ ));
+
const resultFeatureCollection = await getJSON(
`${url}/import`,
featureCollection,
'post'
);
+
+ let inputs = [...importInputs];
+ const setInputs = inputs.map((input) => {
+ if (input.id === inputId) {
+ input.disabled = true;
+ input.hasValue = true;
+ resultFeatureCollection.features.forEach((feature) => {
+ if (
+ JSON.stringify(feature.geometry) ===
+ JSON.stringify(featureCollection.features[0].geometry)
+ ) {
+ input.featureId = feature.properties.id;
+ }
+ });
+ }
+ return input;
+ });
+
drawControl.current.draw.set(
filterFeatureCollection(
resultFeatureCollection,
'selection_utilisateur'
)
);
+
updateFeaturesList(resultFeatureCollection.features);
+ setImportInputs(setInputs);
setBbox(resultFeatureCollection.bbox);
};
};
+ const addInputFile = (e) => {
+ e.preventDefault();
+ let inputs = [...importInputs];
+ inputs.push({
+ id: generateId(),
+ disabled: false,
+ featureId: null,
+ hasValue: false
+ });
+ setImportInputs(inputs);
+ };
+
+ const removeInputFile = async (e, inputId) => {
+ e.preventDefault();
+ const draw = drawControl.current.draw;
+ const featureCollection = draw.getAll();
+ let inputs = [...importInputs];
+ let drawFeatureIdToRemove;
+ const inputToRemove = inputs.find((input) => input.id === inputId);
+
+ for (const feature of featureCollection.features) {
+ if (inputToRemove.featureId === feature.properties.id) {
+ drawFeatureIdToRemove = feature.id;
+ }
+ }
+
+ if (inputToRemove.featureId) {
+ try {
+ await getJSON(`${url}/${inputToRemove.featureId}`, null, 'delete');
+ draw.delete(drawFeatureIdToRemove).getAll();
+ } catch (e) {
+ throw new Error(
+ `La feature ${inputToRemove.featureId} a déjà été supprimée manuellement`,
+ e
+ );
+ } finally {
+ updateImportInputs(inputs, inputId);
+ }
+ }
+ updateImportInputs(inputs, inputId);
+ };
+
useEffect(() => {
addEventListener('cadastres:update', onCadastresUpdate);
return () => removeEventListener('cadastres:update', onCadastresUpdate);
@@ -136,13 +213,33 @@ function MapEditor({ featureCollection, url, preview }) {
return (
<>
+
-
- Importer un fichier GPX
-
-
-
= date_update
+ [today.strftime("%Y"), today.strftime("%m")]
+ else
+ date = today - 1.month
+ [date.strftime("%Y"), date.strftime("%m")]
+ end
+ end
+end
diff --git a/app/jobs/api_entreprise/entreprise_job.rb b/app/jobs/api_entreprise/entreprise_job.rb
new file mode 100644
index 000000000..e22443a2d
--- /dev/null
+++ b/app/jobs/api_entreprise/entreprise_job.rb
@@ -0,0 +1,7 @@
+class ApiEntreprise::EntrepriseJob < ApplicationJob
+ def perform(etablissement_id, procedure_id)
+ etablissement = Etablissement.find(etablissement_id)
+ etablissement_params = ApiEntreprise::EntrepriseAdapter.new(etablissement.siret, procedure_id).to_params
+ etablissement.update!(etablissement_params)
+ end
+end
diff --git a/app/jobs/api_entreprise/exercices_job.rb b/app/jobs/api_entreprise/exercices_job.rb
new file mode 100644
index 000000000..caf20a86b
--- /dev/null
+++ b/app/jobs/api_entreprise/exercices_job.rb
@@ -0,0 +1,7 @@
+class ApiEntreprise::ExercicesJob < ApplicationJob
+ def perform(etablissement_id, procedure_id)
+ etablissement = Etablissement.find(etablissement_id)
+ etablissement_params = ApiEntreprise::ExercicesAdapter.new(etablissement.siret, procedure_id).to_params
+ etablissement.update!(etablissement_params)
+ end
+end
diff --git a/app/jobs/application_job.rb b/app/jobs/application_job.rb
index 779825c4a..7538ed4f5 100644
--- a/app/jobs/application_job.rb
+++ b/app/jobs/application_job.rb
@@ -7,6 +7,14 @@ class ApplicationJob < ActiveJob::Base
Rails.logger.info("#{job.class.name} ended at #{Time.zone.now}")
end
+ rescue_from(ApiEntreprise::API::ResourceNotFound) do |exception|
+ error(self, exception)
+ end
+
+ rescue_from(ApiEntreprise::API::BadFormatRequest) do |exception|
+ error(self, exception)
+ end
+
def error(job, exception)
Raven.capture_exception(exception)
end
diff --git a/app/lib/api_entreprise/adapter.rb b/app/lib/api_entreprise/adapter.rb
index 4e26e8a1f..fdf5527e4 100644
--- a/app/lib/api_entreprise/adapter.rb
+++ b/app/lib/api_entreprise/adapter.rb
@@ -25,4 +25,8 @@ class ApiEntreprise::Adapter
def valid_params?(params)
!params.has_value?(UNAVAILABLE)
end
+
+ def siren
+ @siret[0..8]
+ end
end
diff --git a/app/lib/api_entreprise/api.rb b/app/lib/api_entreprise/api.rb
index 884cb1a3c..320ccd138 100644
--- a/app/lib/api_entreprise/api.rb
+++ b/app/lib/api_entreprise/api.rb
@@ -17,6 +17,9 @@ class ApiEntreprise::API
class RequestFailed < StandardError
end
+ class BadFormatRequest < StandardError
+ end
+
def self.entreprise(siren, procedure_id)
call(ENTREPRISE_RESOURCE_NAME, siren, procedure_id)
end
@@ -72,8 +75,10 @@ class ApiEntreprise::API
JSON.parse(response.body, symbolize_names: true)
elsif response.code&.between?(401, 499)
raise ResourceNotFound
+ elsif response.code == 400
+ raise BadFormatRequest
else
- raise RequestFailed
+ raise RequestFailed, "HTTP Error Code: #{response.code}"
end
end
diff --git a/app/lib/api_entreprise/attestation_fiscale_adapter.rb b/app/lib/api_entreprise/attestation_fiscale_adapter.rb
index 81489888a..f1e0adf39 100644
--- a/app/lib/api_entreprise/attestation_fiscale_adapter.rb
+++ b/app/lib/api_entreprise/attestation_fiscale_adapter.rb
@@ -1,6 +1,6 @@
class ApiEntreprise::AttestationFiscaleAdapter < ApiEntreprise::Adapter
- def initialize(siren, procedure_id, user_id)
- @siren = siren
+ def initialize(siret, procedure_id, user_id)
+ @siret = siret
@procedure_id = procedure_id
@user_id = user_id
end
@@ -8,7 +8,7 @@ class ApiEntreprise::AttestationFiscaleAdapter < ApiEntreprise::Adapter
private
def get_resource
- ApiEntreprise::API.attestation_fiscale(@siren, @procedure_id, @user_id)
+ ApiEntreprise::API.attestation_fiscale(siren, @procedure_id, @user_id)
end
def process_params
diff --git a/app/lib/api_entreprise/attestation_sociale_adapter.rb b/app/lib/api_entreprise/attestation_sociale_adapter.rb
index d901c0066..d43b19452 100644
--- a/app/lib/api_entreprise/attestation_sociale_adapter.rb
+++ b/app/lib/api_entreprise/attestation_sociale_adapter.rb
@@ -1,13 +1,13 @@
class ApiEntreprise::AttestationSocialeAdapter < ApiEntreprise::Adapter
- def initialize(siren, procedure_id)
- @siren = siren
+ def initialize(siret, procedure_id)
+ @siret = siret
@procedure_id = procedure_id
end
private
def get_resource
- ApiEntreprise::API.attestation_sociale(@siren, @procedure_id)
+ ApiEntreprise::API.attestation_sociale(siren, @procedure_id)
end
def process_params
diff --git a/app/lib/api_entreprise/bilans_bdf_adapter.rb b/app/lib/api_entreprise/bilans_bdf_adapter.rb
index 69ee6b6ec..02066545b 100644
--- a/app/lib/api_entreprise/bilans_bdf_adapter.rb
+++ b/app/lib/api_entreprise/bilans_bdf_adapter.rb
@@ -1,13 +1,13 @@
class ApiEntreprise::BilansBdfAdapter < ApiEntreprise::Adapter
- def initialize(siren, procedure_id)
- @siren = siren
+ def initialize(siret, procedure_id)
+ @siret = siret
@procedure_id = procedure_id
end
private
def get_resource
- ApiEntreprise::API.bilans_bdf(@siren, @procedure_id)
+ ApiEntreprise::API.bilans_bdf(siren, @procedure_id)
end
def process_params
diff --git a/app/lib/api_entreprise/effectifs_adapter.rb b/app/lib/api_entreprise/effectifs_adapter.rb
index ae768a3f9..ceb5f9906 100644
--- a/app/lib/api_entreprise/effectifs_adapter.rb
+++ b/app/lib/api_entreprise/effectifs_adapter.rb
@@ -1,6 +1,6 @@
class ApiEntreprise::EffectifsAdapter < ApiEntreprise::Adapter
- def initialize(siren, procedure_id, annee, mois)
- @siren = siren
+ def initialize(siret, procedure_id, annee, mois)
+ @siret = siret
@procedure_id = procedure_id
@annee = annee
@mois = mois
@@ -9,7 +9,7 @@ class ApiEntreprise::EffectifsAdapter < ApiEntreprise::Adapter
private
def get_resource
- ApiEntreprise::API.effectifs(@siren, @procedure_id, @annee, @mois)
+ ApiEntreprise::API.effectifs(siren, @procedure_id, @annee, @mois)
end
def process_params
diff --git a/app/lib/api_entreprise/effectifs_annuels_adapter.rb b/app/lib/api_entreprise/effectifs_annuels_adapter.rb
index 2c56b41f6..cfc679cd6 100644
--- a/app/lib/api_entreprise/effectifs_annuels_adapter.rb
+++ b/app/lib/api_entreprise/effectifs_annuels_adapter.rb
@@ -1,13 +1,13 @@
class ApiEntreprise::EffectifsAnnuelsAdapter < ApiEntreprise::Adapter
- def initialize(siren, procedure_id)
- @siren = siren
+ def initialize(siret, procedure_id)
+ @siret = siret
@procedure_id = procedure_id
end
private
def get_resource
- ApiEntreprise::API.effectifs_annuels(@siren, @procedure_id)
+ ApiEntreprise::API.effectifs_annuels(siren, @procedure_id)
end
def process_params
diff --git a/app/lib/api_entreprise/entreprise_adapter.rb b/app/lib/api_entreprise/entreprise_adapter.rb
index c1b4b8f4c..d15f4d29e 100644
--- a/app/lib/api_entreprise/entreprise_adapter.rb
+++ b/app/lib/api_entreprise/entreprise_adapter.rb
@@ -2,7 +2,6 @@ class ApiEntreprise::EntrepriseAdapter < ApiEntreprise::Adapter
private
def get_resource
- siren = @siret[0..8]
ApiEntreprise::API.entreprise(siren, @procedure_id)
end
diff --git a/app/services/api_entreprise_service.rb b/app/services/api_entreprise_service.rb
index 3c7457075..1ac1e273e 100644
--- a/app/services/api_entreprise_service.rb
+++ b/app/services/api_entreprise_service.rb
@@ -1,73 +1,28 @@
class ApiEntrepriseService
- # Retrieve all informations we can get about a SIRET.
+ # create etablissement with EtablissementAdapter
+ # enqueue api_entreprise jobs to retrieve
+ # all informations we can get about a SIRET.
#
- # Returns nil if the SIRET is unknown; and nested params
- # suitable for being saved into a Etablissement object otherwise.
+ # Returns nil if the SIRET is unknown
#
- # Raises a ApiEntreprise::API::RequestFailed exception on transcient errors
+ # Raises a ApiEntreprise::API::RequestFailed exception on transient errors
# (timeout, 5XX HTTP error code, etc.)
- def self.get_etablissement_params_for_siret(siret, procedure_id, user_id = nil)
- etablissement_params = ApiEntreprise::EtablissementAdapter.new(siret, procedure_id).to_params
- entreprise_params = ApiEntreprise::EntrepriseAdapter.new(siret, procedure_id).to_params
+ def self.create_etablissement(dossier, siret, user_id = nil)
+ etablissement_params = ApiEntreprise::EtablissementAdapter.new(siret, dossier.procedure.id).to_params
+ return nil if etablissement_params.empty?
- if etablissement_params.present? && entreprise_params.present?
- begin
- association_params = ApiEntreprise::RNAAdapter.new(siret, procedure_id).to_params
- etablissement_params.merge!(association_params)
- rescue ApiEntreprise::API::RequestFailed
- end
+ etablissement = dossier.build_etablissement(etablissement_params)
+ etablissement.save
- begin
- exercices_params = ApiEntreprise::ExercicesAdapter.new(siret, procedure_id).to_params
- etablissement_params.merge!(exercices_params)
- rescue ApiEntreprise::API::RequestFailed
- end
-
- begin
- effectifs_params = ApiEntreprise::EffectifsAdapter.new(entreprise_params[:entreprise_siren], procedure_id, *get_current_valid_month_for_effectif).to_params
- etablissement_params.merge!(effectifs_params)
- rescue ApiEntreprise::API::RequestFailed
- end
-
- begin
- effectifs_annuels_params = ApiEntreprise::EffectifsAnnuelsAdapter.new(entreprise_params[:entreprise_siren], procedure_id).to_params
- etablissement_params.merge!(effectifs_annuels_params)
- rescue ApiEntreprise::API::RequestFailed
- end
-
- begin
- attestation_sociale_params = ApiEntreprise::AttestationSocialeAdapter.new(entreprise_params[:entreprise_siren], procedure_id).to_params
- etablissement_params.merge!(attestation_sociale_params)
- rescue ApiEntreprise::API::RequestFailed
- end
-
- begin
- attestation_fiscale_params = ApiEntreprise::AttestationFiscaleAdapter.new(entreprise_params[:entreprise_siren], procedure_id, user_id).to_params
- etablissement_params.merge!(attestation_fiscale_params)
- rescue ApiEntreprise::API::RequestFailed
- end
-
- begin
- bilans_bdf_params = ApiEntreprise::BilansBdfAdapter.new(entreprise_params[:entreprise_siren], procedure_id).to_params
- etablissement_params.merge!(bilans_bdf_params)
- rescue ApiEntreprise::API::RequestFailed
- end
-
- etablissement_params.merge(entreprise_params)
+ [
+ ApiEntreprise::EntrepriseJob, ApiEntreprise::AssociationJob, ApiEntreprise::ExercicesJob,
+ ApiEntreprise::EffectifsJob, ApiEntreprise::EffectifsAnnuelsJob, ApiEntreprise::AttestationSocialeJob,
+ ApiEntreprise::BilansBdfJob
+ ].each do |job|
+ job.perform_later(etablissement.id, dossier.procedure.id)
end
- end
+ ApiEntreprise::AttestationFiscaleJob.perform_later(etablissement.id, dossier.procedure.id, user_id)
- private
-
- def self.get_current_valid_month_for_effectif
- today = Date.today
- date_update = Date.new(today.year, today.month, 15)
-
- if today >= date_update
- [today.strftime("%Y"), today.strftime("%m")]
- else
- date = today - 1.month
- [date.strftime("%Y"), date.strftime("%m")]
- end
+ etablissement
end
end
diff --git a/app/views/users/dossiers/etablissement.html.haml b/app/views/users/dossiers/etablissement.html.haml
index 5c469a98d..c54b26bbe 100644
--- a/app/views/users/dossiers/etablissement.html.haml
+++ b/app/views/users/dossiers/etablissement.html.haml
@@ -24,9 +24,6 @@
= render partial: 'users/dossiers/etablissement/infos_entreprise', locals: { etablissement: etablissement }
- - if etablissement.association?
- = render partial: 'users/dossiers/etablissement/infos_association', locals: { etablissement: etablissement }
-
.actions
= link_to 'Utiliser un autre numéro SIRET', siret_dossier_path(@dossier), class: 'button'
= link_to 'Continuer avec ces informations', brouillon_dossier_path(@dossier), class: 'button primary'
diff --git a/app/views/users/dossiers/etablissement/_infos_association.html.haml b/app/views/users/dossiers/etablissement/_infos_association.html.haml
deleted file mode 100644
index d8afcbdb6..000000000
--- a/app/views/users/dossiers/etablissement/_infos_association.html.haml
+++ /dev/null
@@ -1,24 +0,0 @@
-%ul.etablissement-infos-association
- %li
- Numéro d’enregistrement au Registre National des Associations :
- = etablissement.association_rna
-
- %li
- Titre :
- = etablissement.association_titre
-
- %li
- Objet :
- = etablissement.association_objet
-
- %li
- Date de création :
- = try_format_date(etablissement.association_date_creation)
-
- %li
- Date de déclaration :
- = try_format_date(etablissement.association_date_declaration)
-
- %li
- Date de publication :
- = try_format_date(etablissement.association_date_publication)
diff --git a/app/views/users/dossiers/etablissement/_infos_entreprise.html.haml b/app/views/users/dossiers/etablissement/_infos_entreprise.html.haml
index 21ab7a5f8..3e43095af 100644
--- a/app/views/users/dossiers/etablissement/_infos_entreprise.html.haml
+++ b/app/views/users/dossiers/etablissement/_infos_entreprise.html.haml
@@ -3,15 +3,6 @@
Siret :
= etablissement.siret
- - if etablissement.siret != etablissement.entreprise.siret_siege_social
- %li
- SIRET siègle social :
- = etablissement.entreprise.siret_siege_social
-
- %li
- Forme juridique :
- = etablissement.entreprise.forme_juridique
-
%li
Libellé NAF :
= etablissement.libelle_naf
@@ -20,34 +11,24 @@
Code NAF :
= etablissement.naf
- %li
- Date de création :
- = try_format_date(etablissement.entreprise.date_creation)
-
- %li
- Effectif organisation :
- = effectif(etablissement)
-
- %li
- Code effectif :
- = etablissement.entreprise.code_effectif_entreprise
-
- %li
- Numéro TVA intracommunautaire :
- = etablissement.entreprise.numero_tva_intracommunautaire
-
%li
Adresse :
- etablissement.adresse.split("\n").each do |line|
= line
- %li
- Capital social :
- = pretty_currency(etablissement.entreprise.capital_social)
+ %p.etablissement-exercices
+ Nous allons également récupérer la forme juridique, la date de création, les effectifs, le numéro TVA intracommunautaire, le capital social de votre organisation.
+ Pour les associations, nous récupérerons également l'objet, la date de création, de déclaration et de publication.
-- if etablissement.exercices.present?
- %p.etablissement-exercices Les exercices comptables des trois dernières années seront joints à votre dossier.
+ %p.etablissement-exercices Les exercices comptables des trois dernières années pourront être joints à votre dossier.
+ - procedure = etablissement.dossier.procedure
+ - if procedure.api_entreprise_role?("attestations_sociales")
+ %p.etablissement-exercices Une attestation sociale sera jointe à votre dossier
+ - if procedure.api_entreprise_role?("attestations_fiscales")
+ %p.etablissement-exercices Une attestation fiscale sera jointe à votre dossier
+ - if procedure.api_entreprise_role?("bilans_bdf")
+ %p.etablissement-exercices Les 3 derniers bilans connus de votre entreprise par la Banque de France ont été joints à votre dossier.
%p
= link_to '➡ Autres informations sur l’organisme sur « entreprise.data.gouv.fr »',
"https://entreprise.data.gouv.fr/etablissement/#{etablissement.siret}",
diff --git a/spec/controllers/champs/siret_controller_spec.rb b/spec/controllers/champs/siret_controller_spec.rb
index cc9929ebb..4bd3e4eb3 100644
--- a/spec/controllers/champs/siret_controller_spec.rb
+++ b/spec/controllers/champs/siret_controller_spec.rb
@@ -20,7 +20,17 @@ describe Champs::SiretController, type: :controller do
context 'when the user is signed in' do
render_views
- before { sign_in user }
+ let(:api_etablissement_status) { 200 }
+ let(:api_etablissement_body) { File.read('spec/fixtures/files/api_entreprise/etablissements.json') }
+ let(:token_expired) { false }
+ before do
+ sign_in user
+ stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/etablissements\/#{siret}?.*token=/)
+ .to_return(status: api_etablissement_status, body: api_etablissement_body)
+ allow_any_instance_of(ApiEntrepriseToken).to receive(:roles)
+ .and_return(["attestations_fiscales", "attestations_sociales", "bilans_entreprise_bdf"])
+ allow_any_instance_of(ApiEntrepriseToken).to receive(:expired?).and_return(token_expired)
+ end
context 'when the SIRET is empty' do
subject! { get :show, params: params, format: 'js' }
@@ -55,10 +65,7 @@ describe Champs::SiretController, type: :controller do
context 'when the API is unavailable' do
let(:siret) { '82161143100015' }
-
- before do
- allow(controller).to receive(:find_etablissement_with_siret).and_raise(ApiEntreprise::API::RequestFailed)
- end
+ let(:api_etablissement_status) { 503 }
subject! { get :show, params: params, format: 'js' }
@@ -75,10 +82,7 @@ describe Champs::SiretController, type: :controller do
context 'when the SIRET is valid but unknown' do
let(:siret) { '00000000000000' }
-
- before do
- allow(controller).to receive(:find_etablissement_with_siret).and_return(false)
- end
+ let(:api_etablissement_status) { 404 }
subject! { get :show, params: params, format: 'js' }
@@ -94,23 +98,17 @@ describe Champs::SiretController, type: :controller do
end
context 'when the SIRET informations are retrieved successfully' do
- let(:siret) { etablissement.siret }
- let(:etablissement) { build(:etablissement) }
-
- before do
- allow(controller).to receive(:find_etablissement_with_siret).and_return(etablissement)
- end
+ let(:siret) { '41816609600051' }
+ let(:api_etablissement_status) { 200 }
+ let(:api_etablissement_body) { File.read('spec/fixtures/files/api_entreprise/etablissements.json') }
subject! { get :show, params: params, format: 'js' }
it 'populates the etablissement and SIRET on the model' do
champ.reload
- expect(champ.value).to eq(etablissement.siret)
- expect(champ.etablissement.siret).to eq(etablissement.siret)
- end
-
- it 'displays the name of the company' do
- expect(response.body).to include(etablissement.entreprise_raison_sociale)
+ expect(champ.value).to eq(siret)
+ expect(champ.etablissement.siret).to eq(siret)
+ expect(champ.reload.etablissement.naf).to eq("6202A")
end
end
end
diff --git a/spec/controllers/users/dossiers_controller_spec.rb b/spec/controllers/users/dossiers_controller_spec.rb
index ad0bdae98..a64a2bd94 100644
--- a/spec/controllers/users/dossiers_controller_spec.rb
+++ b/spec/controllers/users/dossiers_controller_spec.rb
@@ -200,72 +200,18 @@ describe Users::DossiersController, type: :controller do
let(:dossier) { create(:dossier, user: user) }
let(:siret) { params_siret.delete(' ') }
let(:siren) { siret[0..8] }
-
let(:api_etablissement_status) { 200 }
let(:api_etablissement_body) { File.read('spec/fixtures/files/api_entreprise/etablissements.json') }
-
- let(:api_entreprise_status) { 200 }
- let(:api_entreprise_body) { File.read('spec/fixtures/files/api_entreprise/entreprises.json') }
-
- let(:api_entreprise_effectifs_mensuels_status) { 200 }
- let(:api_entreprise_effectifs_mensuels_body) { File.read('spec/fixtures/files/api_entreprise/effectifs.json') }
- let(:annee) { "2020" }
- let(:mois) { "02" }
-
- let(:api_entreprise_effectifs_annuels_status) { 200 }
- let(:api_entreprise_effectifs_annuels_body) { File.read('spec/fixtures/files/api_entreprise/effectifs_annuels.json') }
-
- let(:api_exercices_status) { 200 }
- let(:api_exercices_body) { File.read('spec/fixtures/files/api_entreprise/exercices.json') }
-
- let(:api_association_status) { 200 }
- let(:api_association_body) { File.read('spec/fixtures/files/api_entreprise/associations.json') }
-
- let(:api_entreprise_attestation_sociale_status) { 200 }
- let(:api_entreprise_attestation_sociale_body) { File.read('spec/fixtures/files/api_entreprise/attestation_sociale.json') }
-
- let(:api_entreprise_attestation_fiscale_status) { 200 }
- let(:api_entreprise_attestation_fiscale_body) { File.read('spec/fixtures/files/api_entreprise/attestation_fiscale.json') }
-
- let(:api_entreprise_bilans_bdf_status) { 200 }
- let(:api_entreprise_bilans_bdf_body) { File.read('spec/fixtures/files/api_entreprise/bilans_entreprise_bdf.json') }
-
let(:token_expired) { false }
- def stub_api_entreprise_requests
- stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/etablissements\/#{siret}?.*token=/)
- .to_return(status: api_etablissement_status, body: api_etablissement_body)
- stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/entreprises\/#{siren}?.*token=/)
- .to_return(status: api_entreprise_status, body: api_entreprise_body)
- stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/exercices\/#{siret}?.*token=/)
- .to_return(status: api_exercices_status, body: api_exercices_body)
- stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/associations\/#{siret}?.*token=/)
- .to_return(status: api_association_status, body: api_association_body)
- stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/effectifs_mensuels_acoss_covid\/#{annee}\/#{mois}\/entreprise\/#{siren}?.*token=/)
- .to_return(body: api_entreprise_effectifs_mensuels_body, status: api_entreprise_effectifs_mensuels_status)
- stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/effectifs_annuels_acoss_covid\/#{siren}?.*token=/)
- .to_return(body: api_entreprise_effectifs_annuels_body, status: api_entreprise_effectifs_annuels_status)
- stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/attestations_sociales_acoss\/#{siren}?.*token=/)
- .to_return(body: api_entreprise_attestation_sociale_body, status: api_entreprise_attestation_sociale_status)
- stub_request(:get, "https://storage.entreprise.api.gouv.fr/siade/1569156881-f749d75e2bfd443316e2e02d59015f-attestation_vigilance_acoss.pdf")
- .to_return(body: "body attestation", status: 200)
- stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/attestations_fiscales_dgfip\/#{siren}?.*token=/)
- .to_return(body: api_entreprise_attestation_fiscale_body, status: api_entreprise_attestation_fiscale_status)
- stub_request(:get, "https://storage.entreprise.api.gouv.fr/siade/1569156756-f6b7779f99fa95cd60dc03c04fcb-attestation_fiscale_dgfip.pdf")
- .to_return(body: "body attestation", status: 200)
- stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/bilans_entreprises_bdf\/#{siren}?.*token=/)
- .to_return(body: api_entreprise_bilans_bdf_body, status: api_entreprise_bilans_bdf_status)
- end
-
before do
sign_in(user)
- stub_api_entreprise_requests
+ stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/etablissements\/#{siret}?.*token=/)
+ .to_return(status: api_etablissement_status, body: api_etablissement_body)
allow_any_instance_of(ApiEntrepriseToken).to receive(:roles)
.and_return(["attestations_fiscales", "attestations_sociales", "bilans_entreprise_bdf"])
allow_any_instance_of(ApiEntrepriseToken).to receive(:expired?).and_return(token_expired)
end
- before { Timecop.freeze(Time.zone.local(2020, 3, 14)) }
- after { Timecop.return }
subject! { post :update_siret, params: { id: dossier.id, user: { siret: params_siret } } }
@@ -307,68 +253,29 @@ describe Users::DossiersController, type: :controller do
let(:params_siret) { '418 166 096 00051' }
context 'When API-Entreprise is down' do
let(:api_etablissement_status) { 502 }
- let(:api_body_status) { File.read('spec/fixtures/files/api_entreprise/exercices_unavailable.json') }
it_behaves_like 'the request fails with an error', I18n.t('errors.messages.siret_network_error')
end
context 'when API-Entreprise doesn’t know this SIRET' do
let(:api_etablissement_status) { 404 }
- let(:api_body_status) { '' }
it_behaves_like 'the request fails with an error', I18n.t('errors.messages.siret_unknown')
end
context 'when default token has expired' do
let(:api_etablissement_status) { 200 }
- let(:api_body_status) { '' }
let(:token_expired) { true }
it_behaves_like 'the request fails with an error', I18n.t('errors.messages.siret_unknown')
end
- context 'when the API returns no Entreprise' do
- let(:api_entreprise_status) { 404 }
- let(:api_entreprise_body) { '' }
-
- it_behaves_like 'the request fails with an error', I18n.t('errors.messages.siret_unknown')
- end
-
- context 'when the API returns no Exercices' do
- let(:api_exercices_status) { 404 }
- let(:api_exercices_body) { '' }
-
- it_behaves_like 'SIRET informations are successfully saved'
-
- it 'doesn’t save the etablissement exercices' do
- expect(dossier.reload.etablissement.exercices).to be_empty
- end
- end
-
- context 'when the RNA doesn’t have informations on the SIRET' do
- let(:api_association_status) { 404 }
- let(:api_association_body) { '' }
-
- it_behaves_like 'SIRET informations are successfully saved'
-
- it 'doesn’t save the RNA informations' do
- expect(dossier.reload.etablissement.association?).to be(false)
- end
- end
-
context 'when all API informations available' do
it_behaves_like 'SIRET informations are successfully saved'
it 'saves the associated informations on the etablissement' do
dossier.reload
expect(dossier.etablissement.entreprise).to be_present
- expect(dossier.etablissement.exercices).to be_present
- expect(dossier.etablissement.association?).to be(true)
- expect(dossier.etablissement.entreprise_effectif_mensuel).to be_present
- expect(dossier.etablissement.entreprise_effectif_annuel).to be_present
- expect(dossier.etablissement.entreprise_attestation_sociale).to be_attached
- expect(dossier.etablissement.entreprise_attestation_fiscale).to be_attached
- expect(dossier.etablissement.entreprise_bilans_bdf).to be_present
end
end
end
diff --git a/spec/features/users/dossier_creation_spec.rb b/spec/features/users/dossier_creation_spec.rb
index 6c3edc750..91a9c971c 100644
--- a/spec/features/users/dossier_creation_spec.rb
+++ b/spec/features/users/dossier_creation_spec.rb
@@ -95,7 +95,7 @@ feature 'Creating a new dossier:' do
click_on 'Valider'
expect(page).to have_current_path(etablissement_dossier_path(dossier))
- expect(page).to have_content('OCTO-TECHNOLOGY')
+ expect(page).to have_content('OCTO TECHNOLOGY')
click_on 'Continuer avec ces informations'
expect(page).to have_current_path(brouillon_dossier_path(dossier))
diff --git a/spec/jobs/api_entreprise/association_job_spec.rb b/spec/jobs/api_entreprise/association_job_spec.rb
new file mode 100644
index 000000000..8d8b3cb94
--- /dev/null
+++ b/spec/jobs/api_entreprise/association_job_spec.rb
@@ -0,0 +1,21 @@
+RSpec.describe ApiEntreprise::AssociationJob, type: :job do
+ let(:siret) { '50480511000013' }
+ let(:etablissement) { create(:etablissement, siret: siret) }
+ let(:procedure) { create(:procedure) }
+ let(:procedure_id) { procedure.id }
+ let(:body) { File.read('spec/fixtures/files/api_entreprise/associations.json') }
+ let(:status) { 200 }
+
+ before do
+ stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/associations\/.*token=/)
+ .to_return(body: body, status: status)
+ allow_any_instance_of(ApiEntrepriseToken).to receive(:expired?).and_return(false)
+ end
+
+ subject { ApiEntreprise::AssociationJob.new.perform(etablissement.id, procedure_id) }
+
+ it 'updates etablissement' do
+ subject
+ expect(Etablissement.find(etablissement.id).association_rna).to eq('W595001988')
+ end
+end
diff --git a/spec/jobs/api_entreprise/attestation_fiscale_job_spec.rb b/spec/jobs/api_entreprise/attestation_fiscale_job_spec.rb
new file mode 100644
index 000000000..7108f94d2
--- /dev/null
+++ b/spec/jobs/api_entreprise/attestation_fiscale_job_spec.rb
@@ -0,0 +1,25 @@
+RSpec.describe ApiEntreprise::AttestationFiscaleJob, type: :job do
+ let(:etablissement) { create(:etablissement, siret: siret) }
+ let(:siret) { '41816609600069' }
+ let(:siren) { '418166096' }
+ let(:procedure) { create(:procedure) }
+ let(:user_id) { 1 }
+ let(:body) { File.read('spec/fixtures/files/api_entreprise/attestation_fiscale.json') }
+ let(:status) { 200 }
+
+ before do
+ stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/attestations_fiscales_dgfip\/#{siren}\?.*token=/)
+ .to_return(body: body, status: status)
+ stub_request(:get, "https://storage.entreprise.api.gouv.fr/siade/1569156756-f6b7779f99fa95cd60dc03c04fcb-attestation_fiscale_dgfip.pdf")
+ .to_return(body: "body attestation", status: 200)
+ allow_any_instance_of(ApiEntrepriseToken).to receive(:roles).and_return(["attestations_fiscales"])
+ allow_any_instance_of(ApiEntrepriseToken).to receive(:expired?).and_return(false)
+ end
+
+ subject { ApiEntreprise::AttestationFiscaleJob.new.perform(etablissement.id, procedure.id, user_id) }
+
+ it 'updates etablissement' do
+ subject
+ expect(Etablissement.find(etablissement.id).entreprise_attestation_fiscale).to be_attached
+ end
+end
diff --git a/spec/jobs/api_entreprise/attestation_sociale_job_spec.rb b/spec/jobs/api_entreprise/attestation_sociale_job_spec.rb
new file mode 100644
index 000000000..d68594ecf
--- /dev/null
+++ b/spec/jobs/api_entreprise/attestation_sociale_job_spec.rb
@@ -0,0 +1,24 @@
+RSpec.describe ApiEntreprise::AttestationSocialeJob, type: :job do
+ let(:etablissement) { create(:etablissement, siret: siret) }
+ let(:siret) { '41816609600069' }
+ let(:siren) { '418166096' }
+ let(:procedure) { create(:procedure) }
+ let(:body) { File.read('spec/fixtures/files/api_entreprise/attestation_sociale.json') }
+ let(:status) { 200 }
+
+ before do
+ stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/attestations_sociales_acoss\/#{siren}\?.*token=/)
+ .to_return(body: body, status: status)
+ stub_request(:get, "https://storage.entreprise.api.gouv.fr/siade/1569156881-f749d75e2bfd443316e2e02d59015f-attestation_vigilance_acoss.pdf")
+ .to_return(body: "body attestation", status: 200)
+ allow_any_instance_of(ApiEntrepriseToken).to receive(:roles).and_return(["attestations_sociales"])
+ allow_any_instance_of(ApiEntrepriseToken).to receive(:expired?).and_return(false)
+ end
+
+ subject { ApiEntreprise::AttestationSocialeJob.new.perform(etablissement.id, procedure.id) }
+
+ it 'updates etablissement' do
+ subject
+ expect(Etablissement.find(etablissement.id).entreprise_attestation_sociale).to be_attached
+ end
+end
diff --git a/spec/jobs/api_entreprise/bilans_bdf_job_spec.rb b/spec/jobs/api_entreprise/bilans_bdf_job_spec.rb
new file mode 100644
index 000000000..b70cd79c0
--- /dev/null
+++ b/spec/jobs/api_entreprise/bilans_bdf_job_spec.rb
@@ -0,0 +1,24 @@
+RSpec.describe ApiEntreprise::BilansBdfJob, type: :job do
+ let(:etablissement) { create(:etablissement, siret: siret) }
+ let(:siret) { '41816609600069' }
+ let(:siren) { '418166096' }
+ let(:procedure) { create(:procedure) }
+ let(:procedure_id) { procedure.id }
+ let(:body) { File.read('spec/fixtures/files/api_entreprise/bilans_entreprise_bdf.json') }
+ let(:status) { 200 }
+ let(:bilans_bdf) { JSON.parse(body)["bilans"] }
+
+ before do
+ stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/bilans_entreprises_bdf\/#{siren}\?.*token=/)
+ .to_return(body: body, status: status)
+ allow_any_instance_of(ApiEntrepriseToken).to receive(:roles).and_return(["bilans_entreprise_bdf"])
+ allow_any_instance_of(ApiEntrepriseToken).to receive(:expired?).and_return(false)
+ end
+
+ subject { ApiEntreprise::BilansBdfJob.new.perform(etablissement.id, procedure_id) }
+
+ it 'updates etablissement' do
+ subject
+ expect(Etablissement.find(etablissement.id).entreprise_bilans_bdf).to eq(bilans_bdf)
+ end
+end
diff --git a/spec/jobs/api_entreprise/effectifs_annuels_job_spec.rb b/spec/jobs/api_entreprise/effectifs_annuels_job_spec.rb
new file mode 100644
index 000000000..765f4be1b
--- /dev/null
+++ b/spec/jobs/api_entreprise/effectifs_annuels_job_spec.rb
@@ -0,0 +1,22 @@
+RSpec.describe ApiEntreprise::EffectifsAnnuelsJob, type: :job do
+ let(:etablissement) { create(:etablissement, siret: siret) }
+ let(:siret) { '41816609600069' }
+ let(:siren) { '418166096' }
+ let(:procedure) { create(:procedure) }
+ let(:procedure_id) { procedure.id }
+ let(:body) { File.read('spec/fixtures/files/api_entreprise/effectifs_annuels.json') }
+ let(:status) { 200 }
+
+ before do
+ stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/effectifs_annuels_acoss_covid\/#{siren}\?.*token=/)
+ .to_return(body: body, status: status)
+ allow_any_instance_of(ApiEntrepriseToken).to receive(:expired?).and_return(false)
+ end
+
+ subject { ApiEntreprise::EffectifsAnnuelsJob.new.perform(etablissement.id, procedure_id) }
+
+ it 'updates etablissement' do
+ subject
+ expect(Etablissement.find(etablissement.id).entreprise_effectif_annuel).to eq(100.5)
+ end
+end
diff --git a/spec/jobs/api_entreprise/effectifs_job_spec.rb b/spec/jobs/api_entreprise/effectifs_job_spec.rb
new file mode 100644
index 000000000..77e87bf36
--- /dev/null
+++ b/spec/jobs/api_entreprise/effectifs_job_spec.rb
@@ -0,0 +1,28 @@
+RSpec.describe ApiEntreprise::EffectifsJob, type: :job do
+ let(:siret) { '41816609600069' }
+ let(:siren) { '418166096' }
+ let(:etablissement) { create(:etablissement, siret: siret) }
+ let(:procedure) { create(:procedure) }
+ let(:procedure_id) { procedure.id }
+ let(:now) { Time.zone.local(2020, 3, 12) }
+ let(:annee) { "2020" }
+ let(:mois) { "02" }
+ let(:body) { File.read('spec/fixtures/files/api_entreprise/effectifs.json') }
+ let(:status) { 200 }
+
+ before do
+ stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/effectifs_mensuels_acoss_covid\/#{annee}\/#{mois}\/entreprise\/#{siren}\?.*token=/)
+ .to_return(body: body, status: status)
+ allow_any_instance_of(ApiEntrepriseToken).to receive(:expired?).and_return(false)
+ end
+
+ before { Timecop.freeze(now) }
+ after { Timecop.return }
+
+ subject { ApiEntreprise::EffectifsJob.new.perform(etablissement.id, procedure_id) }
+
+ it 'updates etablissement' do
+ subject
+ expect(Etablissement.find(etablissement.id).entreprise_effectif_mensuel).to eq(100.5)
+ end
+end
diff --git a/spec/jobs/api_entreprise/entreprise_job_spec.rb b/spec/jobs/api_entreprise/entreprise_job_spec.rb
new file mode 100644
index 000000000..74b1e475d
--- /dev/null
+++ b/spec/jobs/api_entreprise/entreprise_job_spec.rb
@@ -0,0 +1,22 @@
+RSpec.describe ApiEntreprise::EntrepriseJob, type: :job do
+ let(:siret) { '41816609600051' }
+ let(:siren) { '418166096' }
+ let(:etablissement) { create(:etablissement, siret: siret) }
+ let(:procedure) { create(:procedure) }
+ let(:procedure_id) { procedure.id }
+ let(:body) { File.read('spec/fixtures/files/api_entreprise/entreprises.json') }
+ let(:status) { 200 }
+
+ before do
+ stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/entreprises\/#{siren}?.*token=/)
+ .to_return(body: body, status: status)
+ allow_any_instance_of(ApiEntrepriseToken).to receive(:expired?).and_return(false)
+ end
+
+ subject { ApiEntreprise::EntrepriseJob.new.perform(etablissement.id, procedure_id) }
+
+ it 'updates etablissement' do
+ subject
+ expect(Etablissement.find(etablissement.id).entreprise_numero_tva_intracommunautaire).to eq('FR16418166096')
+ end
+end
diff --git a/spec/jobs/api_entreprise/exercices_job_spec.rb b/spec/jobs/api_entreprise/exercices_job_spec.rb
new file mode 100644
index 000000000..db25b91fc
--- /dev/null
+++ b/spec/jobs/api_entreprise/exercices_job_spec.rb
@@ -0,0 +1,20 @@
+RSpec.describe ApiEntreprise::ExercicesJob, type: :job do
+ let(:siret) { '41816609600051' }
+ let(:procedure) { create(:procedure) }
+ let(:etablissement) { create(:etablissement, siret: siret) }
+ let(:body) { File.read('spec/fixtures/files/api_entreprise/exercices.json') }
+ let(:status) { 200 }
+
+ before do
+ stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/exercices\/.*token=/)
+ .to_return(body: body, status: status)
+ allow_any_instance_of(ApiEntrepriseToken).to receive(:expired?).and_return(false)
+ end
+
+ subject { ApiEntreprise::ExercicesJob.new.perform(etablissement.id, procedure.id) }
+
+ it 'updates etablissement' do
+ subject
+ expect(Etablissement.find(etablissement.id).exercices[0].ca).to eq('21009417')
+ end
+end
diff --git a/spec/lib/api_entreprise/api_spec.rb b/spec/lib/api_entreprise/api_spec.rb
index 3914fffbd..fda013960 100644
--- a/spec/lib/api_entreprise/api_spec.rb
+++ b/spec/lib/api_entreprise/api_spec.rb
@@ -32,6 +32,16 @@ describe ApiEntreprise::API do
end
end
+ context 'when request has bad format' do
+ let(:siren) { '111111111' }
+ let(:status) { 400 }
+ let(:body) { File.read('spec/fixtures/files/api_entreprise/entreprises_not_found.json') }
+
+ it 'raises ApiEntreprise::API::BadFormatRequest' do
+ expect { subject }.to raise_error(ApiEntreprise::API::BadFormatRequest)
+ end
+ end
+
context 'when siren infos are private' do
let(:siren) { '111111111' }
let(:status) { 403 }
diff --git a/spec/lib/api_entreprise/attestation_fiscale_adapter_spec.rb b/spec/lib/api_entreprise/attestation_fiscale_adapter_spec.rb
index dfc19b6bb..377c459ea 100644
--- a/spec/lib/api_entreprise/attestation_fiscale_adapter_spec.rb
+++ b/spec/lib/api_entreprise/attestation_fiscale_adapter_spec.rb
@@ -1,12 +1,13 @@
describe ApiEntreprise::AttestationFiscaleAdapter do
+ let(:siret) { '41816609600069' }
let(:siren) { '418166096' }
let(:procedure) { create(:procedure) }
let(:user_id) { 1 }
- let(:adapter) { described_class.new(siren, procedure.id, user_id) }
+ let(:adapter) { described_class.new(siret, procedure.id, user_id) }
subject { adapter.to_params }
before do
- stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/attestations_fiscales_dgfip\/#{siren}?.*token=/)
+ stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/attestations_fiscales_dgfip\/#{siren}\?.*token=/)
.to_return(body: body, status: status)
allow_any_instance_of(ApiEntrepriseToken).to receive(:roles).and_return(["attestations_fiscales"])
allow_any_instance_of(ApiEntrepriseToken).to receive(:expired?).and_return(false)
diff --git a/spec/lib/api_entreprise/attestation_sociale_adapter_spec.rb b/spec/lib/api_entreprise/attestation_sociale_adapter_spec.rb
index 9c38eb95e..79660114d 100644
--- a/spec/lib/api_entreprise/attestation_sociale_adapter_spec.rb
+++ b/spec/lib/api_entreprise/attestation_sociale_adapter_spec.rb
@@ -1,11 +1,12 @@
describe ApiEntreprise::AttestationSocialeAdapter do
+ let(:siret) { '41816609600069' }
let(:siren) { '418166096' }
let(:procedure) { create(:procedure) }
- let(:adapter) { described_class.new(siren, procedure.id) }
+ let(:adapter) { described_class.new(siret, procedure.id) }
subject { adapter.to_params }
before do
- stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/attestations_sociales_acoss\/#{siren}?.*token=/)
+ stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/attestations_sociales_acoss\/#{siren}\?.*token=/)
.to_return(body: body, status: status)
allow_any_instance_of(ApiEntrepriseToken).to receive(:roles).and_return(["attestations_sociales"])
allow_any_instance_of(ApiEntrepriseToken).to receive(:expired?).and_return(false)
diff --git a/spec/lib/api_entreprise/bilans_bdf_adapter_spec.rb b/spec/lib/api_entreprise/bilans_bdf_adapter_spec.rb
index 572ea02ae..d34e9aa4c 100644
--- a/spec/lib/api_entreprise/bilans_bdf_adapter_spec.rb
+++ b/spec/lib/api_entreprise/bilans_bdf_adapter_spec.rb
@@ -1,12 +1,13 @@
describe ApiEntreprise::BilansBdfAdapter do
+ let(:siret) { '41816609600069' }
let(:siren) { '418166096' }
let(:procedure) { create(:procedure) }
let(:procedure_id) { procedure.id }
- let(:adapter) { described_class.new(siren, procedure_id) }
+ let(:adapter) { described_class.new(siret, procedure_id) }
subject { adapter.to_params }
before do
- stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/bilans_entreprises_bdf\/#{siren}?.*token=/)
+ stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/bilans_entreprises_bdf\/#{siren}\?.*token=/)
.to_return(body: body, status: status)
allow_any_instance_of(ApiEntrepriseToken).to receive(:roles).and_return(["bilans_entreprise_bdf"])
allow_any_instance_of(ApiEntrepriseToken).to receive(:expired?).and_return(false)
diff --git a/spec/lib/api_entreprise/effectifs_adapter_spec.rb b/spec/lib/api_entreprise/effectifs_adapter_spec.rb
index a34a4740a..bf0e85b6d 100644
--- a/spec/lib/api_entreprise/effectifs_adapter_spec.rb
+++ b/spec/lib/api_entreprise/effectifs_adapter_spec.rb
@@ -1,14 +1,15 @@
describe ApiEntreprise::EffectifsAdapter do
+ let(:siret) { '41816609600069' }
let(:siren) { '418166096' }
let(:procedure) { create(:procedure) }
let(:procedure_id) { procedure.id }
let(:annee) { "2020" }
let(:mois) { "02" }
- let(:adapter) { described_class.new(siren, procedure_id, annee, mois) }
+ let(:adapter) { described_class.new(siret, procedure_id, annee, mois) }
subject { adapter.to_params }
before do
- stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/effectifs_mensuels_acoss_covid\/#{annee}\/#{mois}\/entreprise\/#{siren}?.*token=/)
+ stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/effectifs_mensuels_acoss_covid\/#{annee}\/#{mois}\/entreprise\/#{siren}\?.*token=/)
.to_return(body: body, status: status)
allow_any_instance_of(ApiEntrepriseToken).to receive(:expired?).and_return(false)
end
diff --git a/spec/lib/api_entreprise/effectifs_annuels_adapter_spec.rb b/spec/lib/api_entreprise/effectifs_annuels_adapter_spec.rb
index 0c33626c9..37d858c8e 100644
--- a/spec/lib/api_entreprise/effectifs_annuels_adapter_spec.rb
+++ b/spec/lib/api_entreprise/effectifs_annuels_adapter_spec.rb
@@ -1,12 +1,13 @@
describe ApiEntreprise::EffectifsAnnuelsAdapter do
+ let(:siret) { '41816609600069' }
let(:siren) { '418166096' }
let(:procedure) { create(:procedure) }
let(:procedure_id) { procedure.id }
- let(:adapter) { described_class.new(siren, procedure_id) }
+ let(:adapter) { described_class.new(siret, procedure_id) }
subject { adapter.to_params }
before do
- stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/effectifs_annuels_acoss_covid\/#{siren}?.*token=/)
+ stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/effectifs_annuels_acoss_covid\/#{siren}\?.*token=/)
.to_return(body: body, status: status)
allow_any_instance_of(ApiEntrepriseToken).to receive(:expired?).and_return(false)
end
diff --git a/spec/services/api_entreprise_service_spec.rb b/spec/services/api_entreprise_service_spec.rb
index 7b2e33cb7..ca0629328 100644
--- a/spec/services/api_entreprise_service_spec.rb
+++ b/spec/services/api_entreprise_service_spec.rb
@@ -1,129 +1,44 @@
describe ApiEntrepriseService do
- describe '#get_etablissement_params_for_siret' do
+ describe '#create_etablissement' do
before do
- stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/entreprises\/#{siren}?.*token=/)
- .to_return(body: entreprises_body, status: entreprises_status)
stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/etablissements\/#{siret}?.*token=/)
.to_return(body: etablissements_body, status: etablissements_status)
- stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/exercices\/.*token=/)
- .to_return(body: exercices_body, status: exercices_status)
- stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/associations\/.*token=/)
- .to_return(body: associations_body, status: associations_status)
- stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/effectifs_mensuels_acoss_covid\/#{annee}\/#{mois}\/entreprise\/#{siren}?.*token=/)
- .to_return(body: effectifs_mensuels_body, status: effectifs_mensuels_status)
- stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/effectifs_annuels_acoss_covid\/#{siren}?.*token=/)
- .to_return(body: effectifs_annuels_body, status: effectifs_annuels_status)
- stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/attestations_sociales_acoss\/#{siren}?.*token=/)
- .to_return(body: attestation_sociale_body, status: attestation_sociale_status)
- stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/attestations_sociales_acoss\/#{siren}?.*token=/)
- .to_return(body: attestation_sociale_body, status: attestation_sociale_status)
- stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/attestations_fiscales_dgfip\/#{siren}?.*token=/)
- .to_return(body: attestation_fiscale_body, status: attestation_fiscale_status)
- stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/bilans_entreprises_bdf\/#{siren}?.*token=/)
- .to_return(body: bilans_bdf_body, status: bilans_bdf_status)
end
- before { Timecop.freeze(Time.zone.local(2020, 3, 14)) }
- after { Timecop.return }
-
- let(:siren) { '418166096' }
let(:siret) { '41816609600051' }
- let(:rna) { 'W595001988' }
-
- let(:entreprises_status) { 200 }
- let(:entreprises_body) { File.read('spec/fixtures/files/api_entreprise/entreprises.json') }
-
let(:etablissements_status) { 200 }
let(:etablissements_body) { File.read('spec/fixtures/files/api_entreprise/etablissements.json') }
-
- let(:effectifs_mensuels_status) { 200 }
- let(:effectifs_mensuels_body) { File.read('spec/fixtures/files/api_entreprise/effectifs.json') }
- let(:annee) { "2020" }
- let(:mois) { "02" }
- let(:effectif_mensuel) { 100.5 }
-
- let(:effectifs_annuels_status) { 200 }
- let(:effectifs_annuels_body) { File.read('spec/fixtures/files/api_entreprise/effectifs_annuels.json') }
- let(:effectif_annuel) { 100.5 }
-
- let(:attestation_sociale_status) { 200 }
- let(:attestation_sociale_body) { File.read('spec/fixtures/files/api_entreprise/attestation_sociale.json') }
- let(:attestation_sociale_url) { "https://storage.entreprise.api.gouv.fr/siade/1569156881-f749d75e2bfd443316e2e02d59015f-attestation_vigilance_acoss.pdf" }
-
- let(:attestation_fiscale_status) { 200 }
- let(:attestation_fiscale_body) { File.read('spec/fixtures/files/api_entreprise/attestation_fiscale.json') }
- let(:attestation_fiscale_url) { "https://storage.entreprise.api.gouv.fr/siade/1569156756-f6b7779f99fa95cd60dc03c04fcb-attestation_fiscale_dgfip.pdf" }
-
- let(:bilans_bdf_status) { 200 }
- let(:bilans_bdf_body) { File.read('spec/fixtures/files/api_entreprise/bilans_entreprise_bdf.json') }
- let(:bilans_bdf) { JSON.parse(bilans_bdf_body, symbolize_names: true)[:bilans] }
-
- let(:exercices_status) { 200 }
- let(:exercices_body) { File.read('spec/fixtures/files/api_entreprise/exercices.json') }
-
- let(:associations_status) { 200 }
- let(:associations_body) { File.read('spec/fixtures/files/api_entreprise/associations.json') }
-
let(:procedure) { create(:procedure, api_entreprise_token: 'un-jeton') }
- let(:result) { ApiEntrepriseService.get_etablissement_params_for_siret(siret, procedure.id) }
+ let(:dossier) { create(:dossier, procedure: procedure) }
+ let(:subject) { ApiEntrepriseService.create_etablissement(dossier, siret, procedure.id) }
before do
- allow_any_instance_of(ApiEntrepriseToken).to receive(:roles)
- .and_return(["attestations_sociales", "attestations_fiscales", "bilans_entreprise_bdf"])
+ allow_any_instance_of(ApiEntrepriseToken).to receive(:roles).and_return([])
allow_any_instance_of(ApiEntrepriseToken).to receive(:expired?).and_return(false)
end
context 'when service is up' do
it 'should fetch etablissement params' do
- expect(result[:entreprise_siren]).to eq(siren)
- expect(result[:siret]).to eq(siret)
- expect(result[:association_rna]).to eq(rna)
- expect(result[:exercices_attributes]).to_not be_empty
- expect(result[:entreprise_effectif_mensuel]).to eq(effectif_mensuel)
- expect(result[:entreprise_effectif_annuel]).to eq(effectif_annuel)
- expect(result[:entreprise_attestation_sociale_url]).to eq(attestation_sociale_url)
- expect(result[:entreprise_attestation_fiscale_url]).to eq(attestation_fiscale_url)
- expect(result[:entreprise_bilans_bdf]).to eq(bilans_bdf)
+ expect(subject[:siret]).to eq(siret)
end
- end
- context 'when exercices api down' do
- let(:exercices_status) { 400 }
- let(:exercices_body) { '' }
-
- it 'should fetch etablissement params' do
- expect(result[:entreprise_siren]).to eq(siren)
- expect(result[:siret]).to eq(siret)
- expect(result[:exercices_attributes]).to be_nil
- end
- end
-
- context 'when associations api down' do
- let(:associations_status) { 400 }
- let(:associations_body) { '' }
-
- it 'should fetch etablissement params' do
- expect(result[:entreprise_siren]).to eq(siren)
- expect(result[:siret]).to eq(siret)
- expect(result[:association_rna]).to be_nil
- end
- end
-
- context 'when entreprise api down' do
- let(:entreprises_status) { 400 }
- let(:entreprises_body) { '' }
-
- it 'should raise ApiEntreprise::API::RequestFailed' do
- expect { result }.to raise_error(ApiEntreprise::API::RequestFailed)
+ [
+ ApiEntreprise::EntrepriseJob, ApiEntreprise::AssociationJob, ApiEntreprise::ExercicesJob,
+ ApiEntreprise::EffectifsJob, ApiEntreprise::EffectifsAnnuelsJob, ApiEntreprise::AttestationSocialeJob,
+ ApiEntreprise::BilansBdfJob
+ ].each do |job|
+ it "should enqueue #{job.class.name}" do
+ expect { subject }.to have_enqueued_job(job)
+ end
end
end
context 'when etablissement api down' do
- let(:etablissements_status) { 400 }
+ let(:etablissements_status) { 504 }
let(:etablissements_body) { '' }
it 'should raise ApiEntreprise::API::RequestFailed' do
- expect { result }.to raise_error(ApiEntreprise::API::RequestFailed)
+ expect { subject }.to raise_error(ApiEntreprise::API::RequestFailed)
end
end
@@ -132,16 +47,7 @@ describe ApiEntrepriseService do
let(:etablissements_body) { '' }
it 'should return nil' do
- expect(result).to be_nil
- end
- end
-
- context 'when entreprise not found' do
- let(:etablissements_status) { 404 }
- let(:etablissements_body) { '' }
-
- it 'should return nil' do
- expect(result).to be_nil
+ expect(subject).to be_nil
end
end
end
diff --git a/spec/views/users/dossiers/etablissement.html.haml_spec.rb b/spec/views/users/dossiers/etablissement.html.haml_spec.rb
index a7d2cc3d7..df6399e82 100644
--- a/spec/views/users/dossiers/etablissement.html.haml_spec.rb
+++ b/spec/views/users/dossiers/etablissement.html.haml_spec.rb
@@ -6,27 +6,16 @@ describe 'users/dossiers/etablissement.html.haml', type: :view do
before do
sign_in dossier.user
assign(:dossier, dossier)
+ allow_any_instance_of(ApiEntrepriseToken).to receive(:roles).and_return([])
+ allow_any_instance_of(ApiEntrepriseToken).to receive(:expired?).and_return(false)
end
subject! { render }
it 'affiche les informations de l’établissement' do
- expect(rendered).to have_text(etablissement.entreprise_raison_sociale)
expect(rendered).to have_text(etablissement.siret)
end
- it 'n’affiche pas publiquement les derniers exercices comptables' do
- expect(rendered).not_to have_text(number_to_currency(etablissement.exercices.first.ca))
- end
-
- context 'quand l’établissement est une association' do
- let(:etablissement) { create(:etablissement, :is_association) }
-
- it 'affiche les informations de l’association' do
- expect(rendered).to have_text(etablissement.association_titre)
- end
- end
-
context 'etablissement avec infos non diffusables' do
let(:etablissement) { create(:etablissement, :with_exercices, :non_diffusable) }
it "affiche uniquement le nom de l'établissement si infos non diffusables" do