demarches-normaliennes/spec/services/api_recherche_entreprise_service_spec.rb
2024-08-22 09:26:48 +02:00

62 lines
1.8 KiB
Ruby

# frozen_string_literal: true
describe 'APIRechercheEntreprisesService' do
include Dry::Monads[:result]
OK = Data.define(:body, :response)
def load_json(file_name)
Rails.root.join("spec/fixtures/files/api_recherche_entreprises/#{file_name}.json")
.then { File.read(_1) }
.then { JSON.parse(_1).with_indifferent_access }
end
let(:col_ter_json) { load_json('col_ter_20006541500016') }
let(:dinum_json) { load_json('dinum_13002526500013') }
describe '.collectivite_territoriale' do
let(:client_response) { Success(OK[json_response, '']) }
subject { APIRechercheEntreprisesService.collectivite_territoriale?(siret:) }
before { expect_any_instance_of(API::Client).to receive(:call).and_return(client_response) }
context 'when the api returns some results' do
let(:json_response) { col_ter_json }
context 'and the siret match' do
context 'and the structure is a collectivite territoriale' do
let(:siret) { '20006541500016' }
it { is_expected.to be true }
end
context 'and the structure is not a collectivite territoriale' do
let(:json_response) { dinum_json }
let(:siret) { '13002526500013' }
it { is_expected.to be false }
end
end
context 'and the siret does not match' do
let(:siret) { '20006541500666' }
it { is_expected.to be false }
end
end
context 'when the api returns no result' do
let(:json_response) { { results: [] } }
let(:siret) { '20006541500016' }
it { is_expected.to be false }
end
context 'when the api returns an error' do
let(:client_response) { Failure() }
let(:siret) { '20006541500016' }
it { is_expected.to be false }
end
end
end