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

150 lines
5.3 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::RNAController, type: :controller do
let(:user) { create(:user) }
let(:procedure) { create(:procedure, :published, types_de_champ_public: [{ type: :rna }]) }
describe '#show' do
let(:dossier) { create(:dossier, user: user, procedure: procedure) }
let(:champ) { dossier.project_champs_public.first }
let(:champs_public_attributes) do
champ_attributes = {}
champ_attributes[champ.public_id] = { value: rna }
champ_attributes
end
let(:params) do
{
dossier_id: champ.dossier_id,
stable_id: champ.stable_id,
dossier: {
champs_public_attributes: champs_public_attributes
}
}
end
context 'when the user is signed in' do
render_views
before do
sign_in user
stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v4\/djepva\/api-association\/associations\/open_data\/#{rna}/)
.to_return(body: body, status: status)
allow_any_instance_of(APIEntrepriseToken).to receive(:expired?).and_return(false)
end
context 'when the RNA is empty' do
let(:rna) { '' }
let(:status) { 422 }
let(:body) { '' }
subject! { get :show, params: params, format: :turbo_stream }
it 'clears the data on the model' do
expect(champ.reload.data).to be_nil
end
it 'clears any information or error message' do
expect(response.body).to include(ActionView::RecordIdentifier.dom_id(champ, :rna_info))
end
end
context 'when the RNA is invalid' do
let(:rna) { '1234' }
let(:status) { 422 }
let(:body) { '' }
subject! { get :show, params: params, format: :turbo_stream }
it 'clears the data on the model' do
expect(champ.reload.data).to be_nil
end
it 'displays a “RNA is invalid” error message' do
expect(response.body).to include("Le numéro RNA doit commencer par un W majuscule suivi de 9 chiffres ou lettres")
end
end
context 'when the RNA is unknow' do
let(:rna) { 'W111111111' }
let(:status) { 404 }
let(:body) { '' }
subject! { get :show, params: params, format: :turbo_stream }
it 'clears the data on the model' do
champ.reload
expect(champ.data).to be_nil
end
it 'displays a “RNA is invalid” error message' do
expect(response.body).to include("Aucun établissement trouvé")
end
end
context 'when the API is unavailable due to network error' do
let(:rna) { 'W595001988' }
let(:status) { 503 }
let(:body) { File.read('spec/fixtures/files/api_entreprise/associations.json') }
before do
expect(APIEntrepriseService).to receive(:api_djepva_up?).and_return(false)
end
subject! { get :show, params: params, format: :turbo_stream }
it 'clears the data on the model' do
expect(champ.reload.data).to be_nil
end
it 'displays a “API is unavailable” error message' do
expect(response.body).to include("Une erreur réseau a empêché lassociation liée à ce RNA dêtre trouvée")
end
end
context 'when the RNA informations are retrieved successfully' do
let(:rna) { 'W595001988' }
let(:status) { 200 }
let(:body) { File.read('spec/fixtures/files/api_entreprise/associations.json') }
subject! { get :show, params: params, format: :turbo_stream }
it 'populates the data and RNA on the model' do
champ.reload
expect(champ.value).to eq(rna)
expect(champ.data["association_titre"]).to eq("LA PRÉVENTION ROUTIERE")
expect(champ.data["association_objet"]).to eq("L'association a pour objet de promouvoir la pratique du sport de haut niveau et de contribuer à la formation des jeunes sportifs.")
expect(champ.data["association_date_creation"]).to eq("2015-01-01")
expect(champ.data["association_date_declaration"]).to eq("2019-01-01")
expect(champ.data["association_date_publication"]).to eq("2018-01-01")
expect(champ.data["association_rna"]).to eq("W751080001")
end
it 'populates the value_json and RNA on the model' do
champ.reload
expect(champ.value).to eq(rna)
expect(champ.value_json).to eq({
"city_code" => "75108",
"city_name" => "Paris",
"departement_code" => nil, # might seem broken lookup, but no, it's anonymized
"department_code" => nil, # might seem broken lookup, but no, it's anonymized
"departement_name" => nil,
"department_name" => nil,
"postal_code" => "75009",
"region_code" => nil,
"region_name" => nil,
"street_address" => "33 rue de Modagor",
"street_name" => "de Modagor",
"street_number" => "33",
"title" => "LA PRÉVENTION ROUTIERE"
})
end
end
end
context 'when user is not signed in' do
subject! { get :show, params: { dossier_id: champ.dossier_id, stable_id: champ.stable_id }, format: :turbo_stream }
it { expect(response.code).to redirect_to(new_user_session_path) }
end
end
end