b06183d7bf
This better reflects what the trait is used for, and disambiguate it from the similarly named trait in the Procedure factory.
111 lines
3.2 KiB
Ruby
111 lines
3.2 KiB
Ruby
describe RechercheController, type: :controller do
|
|
let(:dossier) { create(:dossier, :en_construction, :with_populated_annotations) }
|
|
let(:dossier2) { create(:dossier, :en_construction, procedure: dossier.procedure) }
|
|
let(:instructeur) { create(:instructeur) }
|
|
|
|
let(:dossier_with_expert) { avis.dossier }
|
|
let(:avis) { create(:avis, dossier: create(:dossier, :en_construction, :with_populated_annotations)) }
|
|
|
|
let(:user) { instructeur.user }
|
|
|
|
before do
|
|
instructeur.assign_to_procedure(dossier.procedure)
|
|
end
|
|
|
|
describe 'GET #index' do
|
|
before { sign_in(user) }
|
|
|
|
subject { get :index, params: { q: query } }
|
|
|
|
describe 'by id' do
|
|
context 'when instructeur own the dossier' do
|
|
let(:query) { dossier.id }
|
|
|
|
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 own the dossier' do
|
|
let(:user) { avis.experts_procedure.expert.user }
|
|
let(:query) { dossier_with_expert.id }
|
|
|
|
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_with_expert.id)
|
|
end
|
|
end
|
|
|
|
context 'when instructeur do not own the dossier' do
|
|
let(:dossier3) { create(:dossier, :en_construction) }
|
|
let(:query) { dossier3.id }
|
|
|
|
it { is_expected.to have_http_status(200) }
|
|
|
|
it 'does not return the dossier' do
|
|
subject
|
|
expect(assigns(:projected_dossiers).count).to eq(0)
|
|
end
|
|
end
|
|
|
|
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
|
|
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)
|
|
end
|
|
end
|
|
end
|
|
|
|
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
|
|
expect(assigns(:projected_dossiers).count).to eq(0)
|
|
end
|
|
end
|
|
end
|
|
end
|