2023-05-30 14:42:36 +02:00
|
|
|
describe Champs::COJOChamp, type: :model do
|
|
|
|
let(:external_id) { nil }
|
|
|
|
let(:url) { COJOService.new.send(:url) }
|
|
|
|
let(:body) { Rails.root.join('spec', 'fixtures', 'files', 'api_cojo', "accreditation_#{response_type}.json").read }
|
|
|
|
let(:status) { 200 }
|
|
|
|
let(:response_type) { 'yes' }
|
2023-07-10 19:15:39 +02:00
|
|
|
let(:accreditation_number) { '123456' }
|
2023-05-30 14:42:36 +02:00
|
|
|
let(:accreditation_birthdate) { '21/12/1959' }
|
|
|
|
|
2024-07-01 15:31:32 +02:00
|
|
|
before { stub_request(:post, url).with(body: { accreditationNumber: accreditation_number.to_i, birthdate: accreditation_birthdate }).to_return(body:, status:) }
|
|
|
|
|
2023-05-30 14:42:36 +02:00
|
|
|
describe 'fetch_external_data' do
|
2024-07-01 15:31:32 +02:00
|
|
|
let(:champ) do
|
|
|
|
described_class.new do |champ|
|
|
|
|
champ.accreditation_number = accreditation_number
|
|
|
|
champ.accreditation_birthdate = accreditation_birthdate
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
subject { champ.fetch_external_data }
|
2023-05-30 14:42:36 +02:00
|
|
|
|
|
|
|
context 'success (yes)' do
|
|
|
|
it { expect(subject.value!).to eq({ accreditation_success: true, accreditation_first_name: 'Florence', accreditation_last_name: 'Griffith-Joyner' }) }
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'success (no)' do
|
|
|
|
let(:response_type) { 'no' }
|
|
|
|
it { expect(subject.value!).to eq({ accreditation_success: false, accreditation_first_name: nil, accreditation_last_name: nil }) }
|
|
|
|
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
|
|
|
|
end
|
2023-07-10 19:15:39 +02:00
|
|
|
|
|
|
|
describe 'fill champ' do
|
2024-07-01 15:31:32 +02:00
|
|
|
let(:procedure) { create(:procedure, types_de_champ_public: [{ type: :cojo }]) }
|
|
|
|
let(:dossier) { create(:dossier, :with_populated_champs, procedure:) }
|
|
|
|
let(:champ) { dossier.champs.first }
|
|
|
|
before do
|
|
|
|
champ.update(accreditation_number:, accreditation_birthdate:, data: nil)
|
|
|
|
perform_enqueued_jobs;
|
|
|
|
end
|
|
|
|
subject { champ.reload }
|
2023-07-10 19:15:39 +02:00
|
|
|
|
|
|
|
it 'success (yes)' do
|
|
|
|
expect(subject.blank?).to be_falsey
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'success (no)' do
|
|
|
|
let(:response_type) { 'no' }
|
|
|
|
|
|
|
|
it { expect(subject.blank?).to be_truthy }
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'failure (schema)' do
|
|
|
|
let(:response_type) { 'invalid' }
|
|
|
|
|
|
|
|
it { expect(subject.blank?).to be_truthy }
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'failure (http 401)' do
|
|
|
|
let(:status) { 401 }
|
|
|
|
let(:response_type) { 'invalid' }
|
|
|
|
|
|
|
|
it { expect(subject.blank?).to be_truthy }
|
|
|
|
end
|
|
|
|
end
|
2023-05-30 14:42:36 +02:00
|
|
|
end
|