enrich value from education api
This commit is contained in:
parent
4f4f4baffd
commit
d7bfb9dc18
6 changed files with 103 additions and 0 deletions
|
@ -0,0 +1,16 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class TypesDeChamp::PrefillAnnuaireEducationTypeDeChamp < TypesDeChamp::PrefillTypeDeChamp
|
||||||
|
def to_assignable_attributes(champ, value)
|
||||||
|
return nil if value.blank?
|
||||||
|
return nil unless (data = APIEducation::AnnuaireEducationAdapter.new(value.presence).to_params)
|
||||||
|
|
||||||
|
{
|
||||||
|
id: champ.id,
|
||||||
|
external_id: data['identifiant_de_l_etablissement'],
|
||||||
|
value: "#{data['nom_etablissement']}, #{data['nom_commune']} (#{data['identifiant_de_l_etablissement']})"
|
||||||
|
}
|
||||||
|
rescue APIEducation::AnnuaireEducationAdapter::InvalidSchemaError
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
end
|
|
@ -27,6 +27,8 @@ class TypesDeChamp::PrefillTypeDeChamp < SimpleDelegator
|
||||||
TypesDeChamp::PrefillCommuneTypeDeChamp.new(type_de_champ, revision)
|
TypesDeChamp::PrefillCommuneTypeDeChamp.new(type_de_champ, revision)
|
||||||
when TypeDeChamp.type_champs.fetch(:epci)
|
when TypeDeChamp.type_champs.fetch(:epci)
|
||||||
TypesDeChamp::PrefillEpciTypeDeChamp.new(type_de_champ, revision)
|
TypesDeChamp::PrefillEpciTypeDeChamp.new(type_de_champ, revision)
|
||||||
|
when TypeDeChamp.type_champs.fetch(:annuaire_education)
|
||||||
|
TypesDeChamp::PrefillAnnuaireEducationTypeDeChamp.new(type_de_champ, revision)
|
||||||
else
|
else
|
||||||
new(type_de_champ, revision)
|
new(type_de_champ, revision)
|
||||||
end
|
end
|
||||||
|
|
14
spec/fixtures/files/api_education/annuaire_education_empty.json
vendored
Normal file
14
spec/fixtures/files/api_education/annuaire_education_empty.json
vendored
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"nhits": 0,
|
||||||
|
"parameters": {
|
||||||
|
"dataset": "fr-en-annuaire-education",
|
||||||
|
"rows": 1,
|
||||||
|
"start": 0,
|
||||||
|
"refine": {
|
||||||
|
"identifiant_de_l_etablissement": "0341247"
|
||||||
|
},
|
||||||
|
"format": "json",
|
||||||
|
"timezone": "UTC"
|
||||||
|
},
|
||||||
|
"records": []
|
||||||
|
}
|
|
@ -38,4 +38,13 @@ describe APIEducation::AnnuaireEducationAdapter do
|
||||||
expect { subject }.to raise_exception(APIEducation::AnnuaireEducationAdapter::InvalidSchemaError)
|
expect { subject }.to raise_exception(APIEducation::AnnuaireEducationAdapter::InvalidSchemaError)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "when responds with empty schema" do
|
||||||
|
let(:body) { File.read('spec/fixtures/files/api_education/annuaire_education_empty.json') }
|
||||||
|
let(:status) { 200 }
|
||||||
|
|
||||||
|
it '#to_params returns nil' do
|
||||||
|
expect(subject).to eq(nil)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
RSpec.describe TypesDeChamp::PrefillAnnuaireEducationTypeDeChamp do
|
||||||
|
let(:procedure) { create(:procedure) }
|
||||||
|
let(:type_de_champ) { build(:type_de_champ_annuaire_education, procedure: procedure) }
|
||||||
|
|
||||||
|
describe 'ancestors' do
|
||||||
|
subject { described_class.new(type_de_champ, procedure.active_revision) }
|
||||||
|
|
||||||
|
it { is_expected.to be_kind_of(TypesDeChamp::PrefillTypeDeChamp) }
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#to_assignable_attributes' do
|
||||||
|
let(:champ) { create(:champ_annuaire_education, type_de_champ: type_de_champ) }
|
||||||
|
subject { described_class.build(type_de_champ, procedure.active_revision).to_assignable_attributes(champ, value) }
|
||||||
|
|
||||||
|
context 'when the value is nil' do
|
||||||
|
let(:value) { nil }
|
||||||
|
|
||||||
|
it { is_expected.to eq(nil) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when the value is empty' do
|
||||||
|
let(:value) { '' }
|
||||||
|
|
||||||
|
it { is_expected.to eq(nil) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when the value is present' do
|
||||||
|
let(:value) { '0050009H' }
|
||||||
|
|
||||||
|
before do
|
||||||
|
stub_request(:get, /https:\/\/data.education.gouv.fr\/api\/records\/1.0/)
|
||||||
|
.to_return(body: body, status: 200)
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when the annuaire education api responds with a valid schema' do
|
||||||
|
let(:body) { File.read('spec/fixtures/files/api_education/annuaire_education.json') }
|
||||||
|
|
||||||
|
it { is_expected.to match({ id: champ.id, external_id: '0050009H', value: 'Lycée professionnel Sévigné, Gap (0050009H)' }) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when the annuaire education api responds with invalid schema" do
|
||||||
|
let(:body) { File.read('spec/fixtures/files/api_education/annuaire_education_invalid.json') }
|
||||||
|
|
||||||
|
it { is_expected.to eq(nil) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when the annuaire education api responds with empty schema' do
|
||||||
|
let(:body) { File.read('spec/fixtures/files/api_education/annuaire_education_empty.json') }
|
||||||
|
|
||||||
|
it { is_expected.to eq(nil) }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -57,6 +57,12 @@ RSpec.describe TypesDeChamp::PrefillTypeDeChamp, type: :model do
|
||||||
it { expect(built).to be_kind_of(TypesDeChamp::PrefillEpciTypeDeChamp) }
|
it { expect(built).to be_kind_of(TypesDeChamp::PrefillEpciTypeDeChamp) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when the type de champ is an annuaire_education' do
|
||||||
|
let(:type_de_champ) { build(:type_de_champ_annuaire_education) }
|
||||||
|
|
||||||
|
it { expect(built).to be_kind_of(TypesDeChamp::PrefillAnnuaireEducationTypeDeChamp) }
|
||||||
|
end
|
||||||
|
|
||||||
context 'when any other type de champ' do
|
context 'when any other type de champ' do
|
||||||
let(:type_de_champ) { build(:type_de_champ_date, procedure: procedure) }
|
let(:type_de_champ) { build(:type_de_champ_date, procedure: procedure) }
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue