2021-04-29 09:33:32 +02:00
|
|
|
describe RechercheController, type: :controller do
|
2021-11-03 15:52:53 +01:00
|
|
|
let(:dossier) { create(:dossier, :en_construction, :with_populated_annotations) }
|
2017-12-14 15:51:45 +01:00
|
|
|
let(:dossier2) { create(:dossier, :en_construction, procedure: dossier.procedure) }
|
2019-08-06 11:02:54 +02:00
|
|
|
let(:instructeur) { create(:instructeur) }
|
2017-07-31 11:58:52 +02:00
|
|
|
|
2021-05-06 01:14:57 +02:00
|
|
|
let(:dossier_with_expert) { avis.dossier }
|
2021-11-03 15:52:53 +01:00
|
|
|
let(:avis) { create(:avis, dossier: create(:dossier, :en_construction, :with_populated_annotations)) }
|
2021-05-06 01:14:57 +02:00
|
|
|
|
|
|
|
let(:user) { instructeur.user }
|
|
|
|
|
2021-04-29 09:33:32 +02:00
|
|
|
before do
|
2021-05-06 01:14:57 +02:00
|
|
|
instructeur.assign_to_procedure(dossier.procedure)
|
2021-04-29 09:33:32 +02:00
|
|
|
end
|
2017-07-31 11:58:52 +02:00
|
|
|
|
|
|
|
describe 'GET #index' do
|
2021-05-06 01:14:57 +02:00
|
|
|
before { sign_in(user) }
|
|
|
|
|
2017-07-31 11:58:52 +02:00
|
|
|
subject { get :index, params: { q: query } }
|
|
|
|
|
|
|
|
describe 'by id' do
|
2019-08-06 11:02:54 +02:00
|
|
|
context 'when instructeur own the dossier' do
|
2021-05-06 01:14:57 +02:00
|
|
|
let(:query) { dossier.id }
|
2021-04-29 09:33:32 +02:00
|
|
|
|
2021-05-06 01:14:57 +02:00
|
|
|
before { subject }
|
|
|
|
|
|
|
|
it { is_expected.to have_http_status(200) }
|
|
|
|
|
|
|
|
it 'returns the expected dossier' do
|
|
|
|
expect(assigns(:projected_dossiers).count).to eq(1)
|
|
|
|
expect(assigns(:projected_dossiers).first.dossier_id).to eq(dossier.id)
|
2021-04-29 09:33:32 +02:00
|
|
|
end
|
2021-05-06 01:14:57 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
context 'when expert own the dossier' do
|
|
|
|
let(:user) { avis.experts_procedure.expert.user }
|
|
|
|
let(:query) { dossier_with_expert.id }
|
|
|
|
|
|
|
|
before { subject }
|
2017-07-31 11:58:52 +02:00
|
|
|
|
|
|
|
it { is_expected.to have_http_status(200) }
|
|
|
|
|
|
|
|
it 'returns the expected dossier' do
|
2021-05-06 01:14:57 +02:00
|
|
|
expect(assigns(:projected_dossiers).count).to eq(1)
|
|
|
|
expect(assigns(:projected_dossiers).first.dossier_id).to eq(dossier_with_expert.id)
|
2017-07-31 11:58:52 +02:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-08-06 11:02:54 +02:00
|
|
|
context 'when instructeur do not own the dossier' do
|
2017-12-14 15:51:45 +01:00
|
|
|
let(:dossier3) { create(:dossier, :en_construction) }
|
2017-07-31 11:58:52 +02:00
|
|
|
let(:query) { dossier3.id }
|
|
|
|
|
|
|
|
it { is_expected.to have_http_status(200) }
|
|
|
|
|
|
|
|
it 'does not return the dossier' do
|
|
|
|
subject
|
2021-05-06 01:14:57 +02:00
|
|
|
expect(assigns(:projected_dossiers).count).to eq(0)
|
2017-07-31 11:58:52 +02:00
|
|
|
end
|
|
|
|
end
|
2018-02-06 12:15:20 +01:00
|
|
|
|
|
|
|
context 'with an id out of range' do
|
|
|
|
let(:query) { 123456789876543234567 }
|
|
|
|
|
|
|
|
it { is_expected.to have_http_status(200) }
|
|
|
|
|
|
|
|
it 'does not return the dossier' do
|
|
|
|
subject
|
2021-05-06 01:14:57 +02:00
|
|
|
expect(assigns(:projected_dossiers).count).to eq(0)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe 'by private annotations' do
|
|
|
|
context 'when instructeur search by private annotations' do
|
|
|
|
let(:query) { dossier.private_search_terms }
|
|
|
|
|
|
|
|
before { subject }
|
|
|
|
|
|
|
|
it { is_expected.to have_http_status(200) }
|
|
|
|
|
|
|
|
it 'returns the expected dossier' do
|
|
|
|
expect(assigns(:projected_dossiers).count).to eq(1)
|
|
|
|
expect(assigns(:projected_dossiers).first.dossier_id).to eq(dossier.id)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when expert search by private annotations' do
|
|
|
|
let(:user) { avis.experts_procedure.expert.user }
|
|
|
|
let(:query) { dossier_with_expert.private_search_terms }
|
|
|
|
|
|
|
|
before { subject }
|
|
|
|
|
|
|
|
it { is_expected.to have_http_status(200) }
|
|
|
|
|
|
|
|
it 'returns 0 dossiers' do
|
|
|
|
expect(assigns(:projected_dossiers).count).to eq(0)
|
2018-02-06 12:15:20 +01:00
|
|
|
end
|
|
|
|
end
|
2017-07-31 11:58:52 +02:00
|
|
|
end
|
2019-05-22 14:34:46 +02:00
|
|
|
|
|
|
|
context 'with no query param it does not crash' do
|
|
|
|
subject { get :index, params: {} }
|
|
|
|
|
|
|
|
it { is_expected.to have_http_status(200) }
|
|
|
|
|
|
|
|
it 'returns 0 dossier' do
|
|
|
|
subject
|
2021-05-06 01:14:57 +02:00
|
|
|
expect(assigns(:projected_dossiers).count).to eq(0)
|
2019-05-22 14:34:46 +02:00
|
|
|
end
|
|
|
|
end
|
2017-07-31 11:58:52 +02:00
|
|
|
end
|
|
|
|
end
|