2024-04-29 00:17:15 +02:00
|
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
2023-10-27 14:20:40 +02:00
|
|
|
|
describe Champs::RNFChamp, type: :model do
|
2024-07-01 15:31:32 +02:00
|
|
|
|
let(:champ) { described_class.new(external_id:) }
|
2023-10-27 14:20:40 +02:00
|
|
|
|
let(:external_id) { '075-FDD-00003-01' }
|
2024-07-01 15:31:32 +02:00
|
|
|
|
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
|
2024-07-01 15:31:32 +02:00
|
|
|
|
let(:url) { RNFService.new.send(:url) }
|
|
|
|
|
let(:status) { 200 }
|
2024-08-01 18:54:50 +02:00
|
|
|
|
before { stub_request(:get, "#{url}/075-FDD-00003-01").to_return(body:, status:) }
|
2024-07-01 15:31:32 +02:00
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
2024-08-01 17:51:46 +02:00
|
|
|
|
context 'success (with space)' do
|
|
|
|
|
let(:external_id) { '075-FDD- 00003-01 ' }
|
|
|
|
|
it {
|
2024-08-01 18:54:50 +02:00
|
|
|
|
expect(subject).to be_success
|
2024-08-01 17:51:46 +02:00
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'success (with tab)' do
|
|
|
|
|
let(:external_id) { '075-FDD-0 0003-01 ' }
|
|
|
|
|
it {
|
2024-08-01 18:54:50 +02:00
|
|
|
|
expect(subject).to be_success
|
2024-08-01 17:51:46 +02:00
|
|
|
|
}
|
|
|
|
|
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
|
2024-07-24 10:23:00 +02:00
|
|
|
|
|
|
|
|
|
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",
|
2024-10-14 09:54:17 +02:00
|
|
|
|
:department_code => "75",
|
2024-07-24 10:23:00 +02:00
|
|
|
|
:departement_name => "Paris",
|
2024-10-14 09:54:17 +02:00
|
|
|
|
:department_name => "Paris",
|
2024-07-24 10:23:00 +02:00
|
|
|
|
: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
|
2024-07-01 15:31:32 +02:00
|
|
|
|
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-10-21 11:51:34 +02:00
|
|
|
|
expect(champ.type_de_champ.champ_value_for_export(champ, :value)).to eq '075-FDD-00003-01'
|
|
|
|
|
expect(champ.type_de_champ.champ_value_for_export(champ, :nom)).to eq 'Fondation SFR'
|
|
|
|
|
expect(champ.type_de_champ.champ_value_for_export(champ, :address)).to eq '16 Rue du Général de Boissieu 75015 Paris'
|
|
|
|
|
expect(champ.type_de_champ.champ_value_for_export(champ, :code_insee)).to eq '75115'
|
|
|
|
|
expect(champ.type_de_champ.champ_value_for_export(champ, :departement)).to eq '75 – Paris'
|
2023-11-21 11:02:33 +01:00
|
|
|
|
end
|
|
|
|
|
end
|
2023-10-27 14:20:40 +02:00
|
|
|
|
end
|