2021-04-29 09:33:32 +02:00
describe RechercheController , type : :controller do
2022-11-03 17:39:12 +01:00
render_views
2021-11-19 12:29:24 +01:00
let ( :procedure ) {
create ( :procedure ,
:published ,
:for_individual ,
:with_type_de_champ ,
:with_type_de_champ_private ,
types_de_champ_count : 2 ,
types_de_champ_private_count : 2 )
}
let ( :dossier ) { create ( :dossier , :en_construction , :with_individual , procedure : procedure ) }
2019-08-06 11:02:54 +02:00
let ( :instructeur ) { create ( :instructeur ) }
2017-07-31 11:58:52 +02:00
2021-11-19 12:29:24 +01:00
let ( :dossier_with_expert ) { create ( :dossier , :en_construction , :with_individual , procedure : procedure ) }
let ( :avis ) { create ( :avis , dossier : dossier_with_expert ) }
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-11-19 12:29:24 +01:00
2022-11-10 22:21:14 +01:00
dossier . champs_public [ 0 ] . value = " Name of district A "
dossier . champs_public [ 1 ] . value = " Name of city A "
2021-11-19 12:29:24 +01:00
dossier . champs_private [ 0 ] . value = " Dossier A is complete "
dossier . champs_private [ 1 ] . value = " Dossier A is valid "
dossier . save!
2022-11-10 22:21:14 +01:00
dossier_with_expert . champs_public [ 0 ] . value = " Name of district B "
dossier_with_expert . champs_public [ 1 ] . value = " name of city B "
2021-11-19 12:29:24 +01:00
dossier_with_expert . champs_private [ 0 ] . value = " Dossier B is incomplete "
dossier_with_expert . champs_private [ 1 ] . value = " Dossier B is invalid "
dossier_with_expert . save!
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
2021-11-19 12:29:24 +01:00
let ( :dossier2 ) { create ( :dossier , :en_construction ) }
let ( :query ) { dossier2 . id }
2017-07-31 11:58:52 +02:00
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 )
2022-11-03 17:39:12 +01:00
expect ( response . body ) . not_to match ( / <div class='fr-alert fr-alert--info / )
end
end
context 'when instructeur is attached to the procedure but is not in the instructor group of the dossier' do
let! ( :gi_p1_1 ) { GroupeInstructeur . create ( label : 'groupe 1' , procedure : procedure ) }
let! ( :gi_p1_2 ) { GroupeInstructeur . create ( label : 'groupe 2' , procedure : procedure ) }
let! ( :dossier3 ) { create ( :dossier , :accepte , :with_individual , procedure : procedure , groupe_instructeur : gi_p1_2 ) }
before { gi_p1_1 . instructeurs << instructeur }
let ( :query ) { dossier3 . id }
it { is_expected . to have_http_status ( 200 ) }
it 'does not return the dossier but it returns a message' do
subject
expect ( assigns ( :projected_dossiers ) . count ) . to eq ( 0 )
expect ( response . body ) . to match ( / Aucun dossier correspondant à votre recherche n’ a été trouvé / )
expect ( CGI . unescapeHTML ( response . body ) ) . to match ( / Le dossier n° #{ dossier3 . id } de la procédure « #{ dossier3 . procedure . libelle } » correspond à votre recherche mais il est rattaché au groupe d'instructeurs « #{ dossier3 . groupe_instructeur . label } ». / )
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
2021-11-19 12:29:24 +01:00
describe 'by champs' do
let ( :query ) { 'district A' }
2021-05-06 01:14:57 +02:00
2021-11-19 12:29:24 +01: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 )
end
context 'as an expert' do
let ( :user ) { avis . experts_procedure . expert . user }
let ( :query ) { 'district' }
2021-05-06 01:14:57 +02:00
it { is_expected . to have_http_status ( 200 ) }
2021-11-19 12:29:24 +01:00
it 'returns only the dossier available to the expert' do
2021-05-06 01:14:57 +02:00
expect ( assigns ( :projected_dossiers ) . count ) . to eq ( 1 )
2021-11-19 12:29:24 +01:00
expect ( assigns ( :projected_dossiers ) . first . dossier_id ) . to eq ( dossier_with_expert . id )
2021-05-06 01:14:57 +02:00
end
end
2021-11-19 12:29:24 +01:00
end
2021-05-06 01:14:57 +02:00
2021-11-19 12:29:24 +01:00
describe 'by private annotations' do
let ( :query ) { 'invalid' }
2021-05-06 01:14:57 +02:00
2021-11-19 12:29:24 +01: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_with_expert . id )
end
context 'as an expert' do
let ( :user ) { avis . experts_procedure . expert . user }
2021-05-06 01:14:57 +02:00
it { is_expected . to have_http_status ( 200 ) }
2021-11-19 12:29:24 +01:00
it 'does not allow experts to search in private annotations' do
2021-05-06 01:14:57 +02:00
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