demarches-normaliennes/spec/models/champs/rnf_champ_spec.rb
2024-11-15 17:10:48 +01:00

136 lines
4.4 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# frozen_string_literal: true
describe Champs::RNFChamp, type: :model do
let(:champ) { described_class.new(external_id:) }
let(:external_id) { '075-FDD-00003-01' }
let(:body) { Rails.root.join('spec', 'fixtures', 'files', 'api_rnf', "#{response_type}.json").read }
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 }
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
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
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",
department_code: "75",
departement_name: "Paris",
department_name: "Paris",
region_code: "11",
region_name: "Île-de-France",
title: "Fondation SFR"
}
expect(champ).to receive(:update!).with(data: anything, value_json:)
champ.update_with_external_data!(data: subject.value!)
end
end
end
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)) }
it do
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'
end
end
end