From 85b2e9ef44b7247245ff5e20a3c738b171e84dbf Mon Sep 17 00:00:00 2001 From: Christophe Robillard Date: Thu, 30 Apr 2020 08:18:17 +0200 Subject: [PATCH] create bilans_bdf_adapter --- app/lib/api_entreprise/api.rb | 6 +++ app/lib/api_entreprise/bilans_bdf_adapter.rb | 23 +++++++++ .../api_entreprise/bilans_entreprise_bdf.json | 51 +++++++++++++++++++ spec/lib/api_entreprise/api_spec.rb | 27 ++++++++++ .../api_entreprise/bilans_bdf_adapter_spec.rb | 26 ++++++++++ 5 files changed, 133 insertions(+) create mode 100644 app/lib/api_entreprise/bilans_bdf_adapter.rb create mode 100644 spec/fixtures/files/api_entreprise/bilans_entreprise_bdf.json create mode 100644 spec/lib/api_entreprise/bilans_bdf_adapter_spec.rb diff --git a/app/lib/api_entreprise/api.rb b/app/lib/api_entreprise/api.rb index 3f9ec089f..1b8790d2c 100644 --- a/app/lib/api_entreprise/api.rb +++ b/app/lib/api_entreprise/api.rb @@ -7,6 +7,7 @@ class ApiEntreprise::API EFFECTIFS_ANNUELS_RESOURCE_NAME = "effectifs_annuels_acoss_covid" ATTESTATION_SOCIALE_RESOURCE_NAME = "attestations_sociales_acoss" ATTESTATION_FISCALE_RESOURCE_NAME = "attestations_fiscales_dgfip" + BILANS_BDF_RESOURCE_NAME = "bilans_entreprises_bdf" TIMEOUT = 15 @@ -51,6 +52,11 @@ class ApiEntreprise::API call(ATTESTATION_FISCALE_RESOURCE_NAME, siren, procedure_id, user_id) if procedure.api_entreprise_role?("attestations_fiscales") end + def self.bilans_bdf(siren, procedure_id) + procedure = Procedure.find(procedure_id) + call(BILANS_BDF_RESOURCE_NAME, siren, procedure_id) if procedure.api_entreprise_role?("bilans_entreprise_bdf") + end + private def self.call(resource_name, siret_or_siren, procedure_id, user_id = nil) diff --git a/app/lib/api_entreprise/bilans_bdf_adapter.rb b/app/lib/api_entreprise/bilans_bdf_adapter.rb new file mode 100644 index 000000000..69ee6b6ec --- /dev/null +++ b/app/lib/api_entreprise/bilans_bdf_adapter.rb @@ -0,0 +1,23 @@ +class ApiEntreprise::BilansBdfAdapter < ApiEntreprise::Adapter + def initialize(siren, procedure_id) + @siren = siren + @procedure_id = procedure_id + end + + private + + def get_resource + ApiEntreprise::API.bilans_bdf(@siren, @procedure_id) + end + + def process_params + if data_source[:bilans].present? + { + entreprise_bilans_bdf: data_source[:bilans], + entreprise_bilans_bdf_monnaie: data_source[:monnaie] + } + else + {} + end + end +end diff --git a/spec/fixtures/files/api_entreprise/bilans_entreprise_bdf.json b/spec/fixtures/files/api_entreprise/bilans_entreprise_bdf.json new file mode 100644 index 000000000..1f2350363 --- /dev/null +++ b/spec/fixtures/files/api_entreprise/bilans_entreprise_bdf.json @@ -0,0 +1,51 @@ +{ + "monnaie": "kEuros", + "bilans": [ + { + "duree_exercice": "12", + "valeur_ajoutee_bdf": "7848792", + "resultat_exercice": "347126", + "capitaux_propres_et_assimiles": "5928663", + "total_provisions_pour_risques_et_charges": "1957919", + "dettes1_emprunts_obligataires_et_convertibles": "0", + "dettes2_autres_emprunts_obligataires": "6552306", + "total_dettes_stables": "6552306", + "emprunts_et_dettes_financieres_divers": "430634", + "groupes_et_associes": "0", + "besoin_en_fonds_de_roulement": "-721507", + "disponibilites": "1983051", + "total_passif": "18478051", + "evolution_valeur_ajoutee_bdf": "", + "evolution_resultat_exercice": "", + "evolution_capitaux_propres_et_assimiles": "", + "evolution_total_provisions_pour_risques_et_charges": "", + "evolution_dettes1_emprunts_obligataires_et_convertibles": "", + "evolution_dettes2_autres_emprunts_obligataires": "", + "evolution_emprunts_et_dettes_financieres_divers": "", + "evolution_groupes_et_associes": "", + "evolution_besoin_en_fonds_de_roulement": "", + "evolution_disponibilites": "", + "evolution_total_passif": "", + "chiffre_affaires_ht": "12030700", + "capacite_autofinancement": "891914", + "date_arret_exercice": "201512", + "dettes3_emprunts_et_dettes_aupres_des_etablissements_de_credit": "0", + "dettes4_maturite_a_un_an_au_plus": "0", + "autres_fonds_propres": "0", + "capital_social_inclus_dans_capitaux_propres_et_assimiles": "3800000", + "excedent_brut_exploitation": "-1876863", + "evolution_chiffre_affaires_ht": "", + "evolution_capacite_autofinancement": "", + "evolution_dettes3_emprunts_et_dettes_aupres_des_etablissements_de_credit": "", + "evolution_dettes4_maturite_a_un_an_au_plus": "", + "evolution_autres_fonds_propres": "", + "evolution_capital_social_inclus_dans_capitaux_propres_et_assimiles": "", + "evolution_excedent_brut_exploitation": "", + "evolution_fonds_roulement_net_global": "", + "evolution_ratio_fonds_roulement_net_global_sur_besoin_en_fonds_de_roulement": "", + "evolution_total_dettes_stables": "", + "fonds_roulement_net_global": "2464585", + "ratio_fonds_roulement_net_global_sur_besoin_en_fonds_de_roulement": "-" + }, "bilan 2", "bilan 3" + ] +} diff --git a/spec/lib/api_entreprise/api_spec.rb b/spec/lib/api_entreprise/api_spec.rb index de537515d..81e50b35c 100644 --- a/spec/lib/api_entreprise/api_spec.rb +++ b/spec/lib/api_entreprise/api_spec.rb @@ -213,4 +213,31 @@ describe ApiEntreprise::API do it { expect(subject).to eq(JSON.parse(body, symbolize_names: true)) } end end + + describe '.bilans_bdf' do + let(:procedure) { create(:procedure, api_entreprise_token: token) } + let(:siren) { '418166096' } + let(:status) { 200 } + let(:body) { File.read('spec/fixtures/files/api_entreprise/bilans_entreprise_bdf.json') } + + before do + allow_any_instance_of(Procedure).to receive(:api_entreprise_roles).and_return(roles) + stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/bilans_entreprises_bdf\/#{siren}?.*token=#{token}/) + .to_return(body: body, status: status) + end + + subject { described_class.bilans_bdf(siren, procedure.id) } + + context 'when token not authorized' do + let(:roles) { ["entreprises"] } + + it { expect(subject).to eq(nil) } + end + + context 'when token is authorized' do + let(:roles) { ["bilans_entreprise_bdf"] } + + it { expect(subject).to eq(JSON.parse(body, symbolize_names: true)) } + end + end end diff --git a/spec/lib/api_entreprise/bilans_bdf_adapter_spec.rb b/spec/lib/api_entreprise/bilans_bdf_adapter_spec.rb new file mode 100644 index 000000000..79029fa2a --- /dev/null +++ b/spec/lib/api_entreprise/bilans_bdf_adapter_spec.rb @@ -0,0 +1,26 @@ +describe ApiEntreprise::BilansBdfAdapter do + let(:siren) { '418166096' } + let(:procedure) { create(:procedure) } + let(:procedure_id) { procedure.id } + let(:adapter) { described_class.new(siren, procedure_id) } + subject { adapter.to_params } + + 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(Procedure).to receive(:api_entreprise_roles).and_return(["bilans_entreprise_bdf"]) + end + + context "when the SIREN is valid" do + let(:body) { File.read('spec/fixtures/files/api_entreprise/bilans_entreprise_bdf.json') } + let(:status) { 200 } + + it '#to_params class est une Hash ?' do + expect(subject).to be_an_instance_of(Hash) + end + + it "returns bilans bdf" do + expect(subject[:entreprise_bilans_bdf][0][:valeur_ajoutee_bdf]).to eq("7848792") + end + end +end