demarches-normaliennes/spec/models/champs/rnf_champ_spec.rb

134 lines
4.2 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
2023-10-27 14:20:40 +02:00
describe Champs::RNFChamp, type: :model do
let(:champ) { described_class.new(external_id:) }
2023-10-27 14:20:40 +02:00
let(:external_id) { '075-FDD-00003-01' }
let(:body) { Rails.root.join('spec', 'fixtures', 'files', 'api_rnf', "#{response_type}.json").read }
2023-10-27 14:20:40 +02:00
let(:response_type) { 'valid' }
describe 'fetch_external_data' do
let(:url) { RNFService.new.send(:url) }
let(:status) { 200 }
before { stub_request(:get, "#{url}/075-FDD-00003-01").to_return(body:, status:) }
subject { champ.fetch_external_data }
2023-10-27 14:20:40 +02:00
context 'success' do
it do
expect(subject.value!).to eq({
id: 3,
rnfId: '075-FDD-00003-01',
type: 'FDD',
department: '75',
title: 'Fondation SFR',
dissolvedAt: nil,
phone: '+33185060000',
email: 'fondation@sfr.fr',
addressId: 3,
createdAt: "2023-09-07T13:26:10.358Z",
updatedAt: "2023-09-07T13:26:10.358Z",
address: {
id: 3,
createdAt: "2023-09-07T13:26:10.358Z",
updatedAt: "2023-09-07T13:26:10.358Z",
label: "16 Rue du Général de Boissieu 75015 Paris",
type: "housenumber",
streetAddress: "16 Rue du Général de Boissieu",
streetNumber: "16",
streetName: "Rue du Général de Boissieu",
postalCode: "75015",
cityName: "Paris",
cityCode: "75115",
departmentName: "Paris",
departmentCode: "75",
regionName: "Île-de-France",
regionCode: "11"
},
status: nil,
persons: []
})
end
end
context 'success (with space)' do
let(:external_id) { '075-FDD- 00003-01 ' }
it {
expect(subject).to be_success
}
end
context 'success (with tab)' do
let(:external_id) { '075-FDD-0 0003-01 ' }
it {
expect(subject).to be_success
}
end
2023-10-27 14:20:40 +02:00
context 'failure (schema)' do
let(:response_type) { 'invalid' }
it {
expect(subject.failure.retryable).to be_falsey
expect(subject.failure.reason).to be_a(API::Client::SchemaError)
}
end
context 'failure (http 500)' do
let(:status) { 500 }
let(:response_type) { 'invalid' }
it {
expect(subject.failure.retryable).to be_truthy
expect(subject.failure.reason).to be_a(API::Client::HTTPError)
}
end
context 'failure (http 401)' do
let(:status) { 401 }
let(:response_type) { 'invalid' }
it {
expect(subject.failure.retryable).to be_falsey
expect(subject.failure.reason).to be_a(API::Client::HTTPError)
}
end
2024-03-29 12:20:04 +01:00
context 'failure (http 400)' do
let(:status) { 400 }
let(:response_type) { 'invalid' }
it {
expect(subject.failure.retryable).to be_falsey
expect(subject.failure.reason).to be_a(API::Client::HTTPError)
}
end
describe 'update_with_external_data!' do
it 'works' do
value_json = {
:street_number => "16",
:street_name => "Rue du Général de Boissieu",
:street_address => "16 Rue du Général de Boissieu",
:postal_code => "75015",
:city_name => "Paris 15e Arrondissement",
:city_code => "75115",
:departement_code => "75",
:departement_name => "Paris",
:region_code => "11",
:region_name => "Île-de-France"
}
expect(champ).to receive(:update!).with(data: anything, value_json:)
champ.update_with_external_data!(data: subject.value!)
end
end
2023-10-27 14:20:40 +02:00
end
2023-11-21 11:02:33 +01:00
describe 'for_export' do
let(:champ) { described_class.new(external_id:, data: JSON.parse(body)) }
before { allow(champ).to receive(:type_de_champ).and_return(build(:type_de_champ_rnf)) }
2023-11-21 11:02:33 +01:00
it do
2024-04-02 17:05:44 +02:00
expect(champ.for_export(:value)).to eq '075-FDD-00003-01'
expect(champ.for_export(:nom)).to eq 'Fondation SFR'
expect(champ.for_export(:address)).to eq '16 Rue du Général de Boissieu 75015 Paris'
expect(champ.for_export(:code_insee)).to eq '75115'
expect(champ.for_export(:departement)).to eq '75 Paris'
2023-11-21 11:02:33 +01:00
end
end
2023-10-27 14:20:40 +02:00
end