add tva adapter and tva job

This commit is contained in:
Christophe Robillard 2023-05-25 15:29:16 +02:00
parent f04e121a6f
commit 76a8b721ce
8 changed files with 83 additions and 2 deletions

View file

@ -0,0 +1,7 @@
class APIEntreprise::TvaJob < APIEntreprise::Job
def perform(etablissement_id, procedure_id)
find_etablissement(etablissement_id)
etablissement_params = APIEntreprise::TvaAdapter.new(etablissement.siret, procedure_id).to_params
etablissement.update!(etablissement_params)
end
end

View file

@ -2,6 +2,7 @@ class APIEntreprise::API
ENTREPRISE_RESOURCE_NAME = "v3/insee/sirene/unites_legales/%{id}"
ETABLISSEMENT_RESOURCE_NAME = "v2/etablissements/%{id}"
EXTRAIT_KBIS_NAME = "v3/infogreffe/rcs/unites_legales/%{id}/extrait_kbis"
TVA_NAME = "v3/european_commission/unites_legales/%{id}/numero_tva"
EXERCICES_RESOURCE_NAME = "v2/exercices/%{id}"
RNA_RESOURCE_NAME = "v2/associations/%{id}"
EFFECTIFS_RESOURCE_NAME = "v2/effectifs_mensuels_acoss_covid"
@ -37,6 +38,10 @@ class APIEntreprise::API
call_with_siret(EXTRAIT_KBIS_NAME, siren)
end
def tva(siren)
call_with_siret(TVA_NAME, siren)
end
def exercices(siret)
call_with_siret(EXERCICES_RESOURCE_NAME, siret)
end

View file

@ -0,0 +1,15 @@
class APIEntreprise::TvaAdapter < APIEntreprise::Adapter
private
def get_resource
api(@procedure_id).tva(siren)
end
def process_params
result = {}
if data_source[:data]
result[:entreprise_numero_tva_intracommunautaire] = data_source[:data][:tva_number]
end
result
end
end

View file

@ -47,7 +47,7 @@ class APIEntrepriseService
def perform_later_fetch_jobs(etablissement, procedure_id, user_id, wait: nil)
[
APIEntreprise::EntrepriseJob, APIEntreprise::ExtraitKbisJob,
APIEntreprise::EntrepriseJob, APIEntreprise::ExtraitKbisJob, APIEntreprise::TvaJob,
APIEntreprise::AssociationJob, APIEntreprise::ExercicesJob,
APIEntreprise::EffectifsJob, APIEntreprise::EffectifsAnnuelsJob, APIEntreprise::AttestationSocialeJob,
APIEntreprise::BilansBdfJob

View file

@ -0,0 +1,7 @@
{
"data": {
"tva_number": "FR48672039971"
},
"links": {},
"meta": {}
}

View file

@ -0,0 +1,21 @@
describe APIEntreprise::TvaJob, 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/tva.json') }
let(:status) { 200 }
subject { APIEntreprise::TvaJob.new.perform(etablissement.id, procedure_id) }
before do
stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v3\/european_commission\/unites_legales\/#{siren}\/numero_tva/)
.to_return(body: body, status: status)
allow_any_instance_of(APIEntrepriseToken).to receive(:expired?).and_return(false)
end
it 'updates etablissement' do
subject
expect(Etablissement.find(etablissement.id).entreprise_numero_tva_intracommunautaire).to eq("FR48672039971")
end
end

View file

@ -0,0 +1,26 @@
describe APIEntreprise::TvaAdapter 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\/v3\/european_commission\/unites_legales\/#{siren}\/numero_tva/)
.to_return(body: body, status: status)
allow_any_instance_of(APIEntrepriseToken).to receive(:expired?).and_return(false)
end
context "when the SIRET is valid" do
let(:body) { File.read('spec/fixtures/files/api_entreprise/tva.json') }
let(:status) { 200 }
it '#to_params class est une Hash ?' do
expect(subject).to be_an_instance_of(Hash)
end
it 'L\'entreprise contient bien un numero_tva_intracommunautaire' do
expect(subject[:entreprise_numero_tva_intracommunautaire]).to eq("FR48672039971")
end
end
end

View file

@ -1,7 +1,7 @@
describe APIEntrepriseService do
shared_examples 'schedule fetch of all etablissement params' do
[
APIEntreprise::EntrepriseJob, APIEntreprise::ExtraitKbisJob,
APIEntreprise::EntrepriseJob, APIEntreprise::ExtraitKbisJob, APIEntreprise::TvaJob,
APIEntreprise::AssociationJob, APIEntreprise::ExercicesJob,
APIEntreprise::EffectifsJob, APIEntreprise::EffectifsAnnuelsJob, APIEntreprise::AttestationSocialeJob,
APIEntreprise::BilansBdfJob