demarches-normaliennes/spec/lib/api_particulier/cnaf_adapter_spec.rb
2024-08-22 09:26:48 +02:00

72 lines
2.6 KiB
Ruby

# frozen_string_literal: true
describe APIParticulier::CnafAdapter do
let(:adapter) { described_class.new(api_particulier_token, numero_allocataire, code_postal, requested_sources) }
before { stub_const("API_PARTICULIER_URL", "https://particulier.api.gouv.fr/api") }
describe '#to_params' do
let(:api_particulier_token) { '29eb50b65f64e8e00c0847a8bbcbd150e1f847' }
let(:numero_allocataire) { '5843972' }
let(:code_postal) { '92110' }
subject { VCR.use_cassette(cassette) { adapter.to_params } }
context 'when the api answer is valid' do
let(:cassette) { "api_particulier/success/composition_familiale" }
context 'when the token has all the cnaf scopes' do
context 'and all the sources are requested' do
let(:requested_sources) do
{
'cnaf' => {
'allocataires' => ['nomPrenom', 'dateDeNaissance', 'sexe'],
'enfants' => ['nomPrenom', 'dateDeNaissance', 'sexe'],
'adresse' => ['identite', 'complementIdentite', 'complementIdentiteGeo', 'numeroRue', 'lieuDit', 'codePostalVille', 'pays'],
'quotient_familial' => ['quotientFamilial', 'annee', 'mois']
}
}
end
let(:result) { JSON.parse(File.read('spec/fixtures/files/api_particulier/composition_familiale.json')) }
it { is_expected.to eq(result) }
end
context 'when no sources is requested' do
let(:requested_sources) { {} }
it { is_expected.to eq({}) }
end
context 'when a scalar is requested' do
let(:requested_sources) { { 'cnaf' => { 'adresse' => ['pays'] } } }
it { is_expected.to eq({ "adresse" => { "pays" => "FRANCE" } }) }
end
context 'when a quotient_familial is requested' do
let(:requested_sources) { { 'cnaf' => { 'quotient_familial' => ['annee'] } } }
it { is_expected.to eq({ "quotient_familial" => { "annee" => 2021 } }) }
end
context 'when a vector is requested' do
let(:requested_sources) { { 'cnaf' => { 'allocataires' => ['nomPrenom'] } } }
it { is_expected.to eq({ "allocataires" => [{ "nomPrenom" => "ERIC SNOW" }, { "nomPrenom" => "SANSA SNOW" }] }) }
end
end
end
context 'when the api answer is invalid' do
let(:cassette) { "api_particulier/success/composition_familiale_invalid" }
context 'when no sources is requested' do
let(:requested_sources) { {} }
it { expect { subject }.to raise_error(APIParticulier::CnafAdapter::InvalidSchemaError) }
end
end
end
end