2023-08-31 09:59:18 +02:00
describe 'user access to the list of their dossiers' , js : true , retry : 3 do
2015-09-23 12:04:57 +02:00
let ( :user ) { create ( :user ) }
2023-06-15 18:08:44 +02:00
let! ( :dossier_brouillon ) { create ( :dossier , user : user ) }
let! ( :dossier_en_construction ) { create ( :dossier , :with_populated_champs , :en_construction , user : user ) }
let! ( :dossier_en_construction_2 ) { create ( :dossier , :en_construction , user : user ) }
let! ( :dossier_en_instruction ) { create ( :dossier , :en_instruction , user : user ) }
let! ( :dossier_traite ) { create ( :dossier , :accepte , user : user ) }
let! ( :dossier_refuse ) { create ( :dossier , :refuse , user : user ) }
let! ( :dossier_a_corriger ) { create ( :dossier_correction , dossier : dossier_en_construction_2 ) }
let! ( :dossier_archived ) { create ( :dossier , :en_instruction , :archived , user : user ) }
2018-06-27 14:47:02 +02:00
let ( :dossiers_per_page ) { 25 }
2019-02-06 19:12:04 +01:00
let ( :last_updated_dossier ) { dossier_en_construction }
2015-11-20 17:50:54 +01:00
2015-09-23 12:04:57 +02:00
before do
2018-06-27 14:47:02 +02:00
@default_per_page = Dossier . default_per_page
Dossier . paginates_per dossiers_per_page
2017-04-12 11:18:28 +02:00
last_updated_dossier . update_column ( :updated_at , " 19/07/2052 15:35 " . to_time )
2016-07-19 16:10:50 +02:00
2019-02-06 19:12:04 +01:00
login_as user , scope : :user
visit dossiers_path
2015-09-23 12:04:57 +02:00
end
2017-04-12 11:18:28 +02:00
2018-06-27 14:47:02 +02:00
after do
Dossier . paginates_per @default_per_page
end
2017-04-12 11:18:28 +02:00
it 'the list of dossier is displayed' do
2019-02-06 19:12:04 +01:00
expect ( page ) . to have_content ( dossier_brouillon . procedure . libelle )
expect ( page ) . to have_content ( dossier_en_construction . procedure . libelle )
expect ( page ) . to have_content ( dossier_en_instruction . procedure . libelle )
expect ( page ) . to have_content ( dossier_archived . procedure . libelle )
2023-06-15 18:08:44 +02:00
expect ( page ) . to have_text ( '5 en cours' )
2023-04-28 15:28:04 +02:00
expect ( page ) . to have_text ( '2 traités' )
2015-09-23 12:04:57 +02:00
end
2015-09-25 10:26:50 +02:00
2018-06-27 14:47:02 +02:00
it 'the list must be ordered by last updated' do
2019-02-06 19:12:04 +01:00
expect ( page . body ) . to match ( / #{ last_updated_dossier . procedure . libelle } .* #{ dossier_en_instruction . procedure . libelle } /m )
2015-09-25 10:26:50 +02:00
end
2019-02-06 19:12:04 +01:00
context 'when there are dossiers from other users' do
let! ( :dossier_other_user ) { create ( :dossier ) }
2017-04-12 11:18:28 +02:00
2019-02-06 19:12:04 +01:00
it 'doesn’ t display dossiers belonging to other users' do
expect ( page ) . not_to have_content ( dossier_other_user . procedure . libelle )
end
2019-01-16 15:34:38 +01:00
end
2019-02-06 19:12:04 +01:00
context 'when there is more than one page' do
let ( :dossiers_per_page ) { 2 }
2019-01-24 16:38:34 +01:00
2019-02-06 19:12:04 +01:00
scenario 'the user can navigate through the other pages' do
2023-07-20 16:56:59 +02:00
expect ( page ) . not_to have_link ( dossier_en_instruction . procedure . libelle )
2019-02-06 19:12:04 +01:00
page . click_link ( " Suivant " )
2023-07-20 16:56:59 +02:00
expect ( page ) . to have_link ( dossier_en_instruction . procedure . libelle )
2023-06-15 18:08:44 +02:00
expect ( page ) . to have_text ( '5 en cours' )
2023-04-28 15:28:04 +02:00
expect ( page ) . to have_text ( '2 traités' )
end
end
context 'when user uses filter' do
2023-05-02 10:32:38 +02:00
scenario 'user filters state on tab "en-cours"' do
2023-06-15 18:08:44 +02:00
expect ( page ) . to have_text ( '5 en cours' )
2023-04-28 15:28:04 +02:00
expect ( page ) . to have_text ( '2 traités' )
2023-06-15 18:08:44 +02:00
expect ( page ) . to have_text ( '5 sur 5 dossiers' )
2023-05-03 16:47:27 +02:00
click_on ( 'Sélectionner un filtre' )
2023-06-15 18:08:44 +02:00
expect ( page ) . to have_select 'Statut' , selected : 'Sélectionner un statut' , options : [ 'Sélectionner un statut' , 'Brouillon' , 'En construction' , 'En instruction' , 'À corriger' ]
select ( 'Brouillon' , from : 'Statut' )
2023-04-28 15:28:04 +02:00
click_on ( 'Appliquer les filtres' )
2023-06-15 18:08:44 +02:00
2023-04-28 15:28:04 +02:00
expect ( page ) . to have_text ( '1 dossier' )
2023-06-15 18:08:44 +02:00
expect ( page ) . to have_select 'Statut' , selected : 'Brouillon' , options : [ 'Sélectionner un statut' , 'Brouillon' , 'En construction' , 'En instruction' , 'À corriger' ]
click_on ( 'Sélectionner un filtre' )
select ( 'À corriger' , from : 'Statut' )
click_on ( 'Appliquer les filtres' )
expect ( page ) . to have_text ( '1 dossier' )
expect ( page ) . to have_select 'Statut' , selected : 'À corriger' , options : [ 'Sélectionner un statut' , 'Brouillon' , 'En construction' , 'En instruction' , 'À corriger' ]
2023-04-28 15:28:04 +02:00
end
2023-05-02 10:32:38 +02:00
scenario 'user filters state on tab "traité"' do
2023-04-28 15:28:04 +02:00
visit dossiers_path ( statut : 'traites' )
2023-06-15 18:08:44 +02:00
expect ( page ) . to have_text ( '5 en cours' )
2023-04-28 15:28:04 +02:00
expect ( page ) . to have_text ( '2 traités' )
expect ( page ) . to have_text ( '2 sur 2 dossiers' )
2023-05-03 11:04:15 +02:00
2023-05-03 16:47:27 +02:00
click_on ( 'Sélectionner un filtre' )
2023-06-15 18:08:44 +02:00
expect ( page ) . to have_select 'Statut' , selected : 'Sélectionner un statut' , options : [ 'Sélectionner un statut' , 'Accepté' , 'Refusé' , 'Classé sans suite' ]
select ( 'Refusé' , from : 'Statut' )
2023-04-28 15:28:04 +02:00
click_on ( 'Appliquer les filtres' )
expect ( page ) . to have_text ( '1 dossier' )
2023-06-15 18:08:44 +02:00
expect ( page ) . to have_select 'Statut' , selected : 'Refusé' , options : [ 'Sélectionner un statut' , 'Accepté' , 'Refusé' , 'Classé sans suite' ]
2023-05-03 11:04:15 +02:00
2023-05-03 16:47:27 +02:00
click_on ( 'Sélectionner un filtre' )
2023-04-28 15:28:04 +02:00
click_on ( 'Réinitialiser les filtres' )
expect ( page ) . to have_text ( '2 sur 2 dossiers' )
2023-06-15 18:08:44 +02:00
expect ( page ) . to have_select 'Statut' , selected : 'Sélectionner un statut' , options : [ 'Sélectionner un statut' , 'Accepté' , 'Refusé' , 'Classé sans suite' ]
2019-01-16 15:34:38 +01:00
end
2023-05-02 09:37:03 +02:00
scenario 'user filters by created_at' do
dossier_en_construction . update! ( created_at : Date . yesterday )
2023-06-15 18:08:44 +02:00
expect ( page ) . to have_text ( '5 sur 5 dossiers' )
2023-05-03 16:47:27 +02:00
click_on ( 'Sélectionner un filtre' )
2023-05-02 09:37:03 +02:00
fill_in 'from_created_at_date' , with : Date . today
click_on ( 'Appliquer les filtres' )
2023-06-15 18:08:44 +02:00
expect ( page ) . to have_text ( '4 sur 4 dossiers' )
2023-05-02 09:37:03 +02:00
end
2023-05-02 10:32:38 +02:00
scenario 'user uses multiple filters' do
2023-05-02 09:37:03 +02:00
dossier_en_construction . update! ( created_at : Date . yesterday )
2023-06-15 18:08:44 +02:00
expect ( page ) . to have_select 'Statut' , selected : 'Sélectionner un statut' , options : [ 'Sélectionner un statut' , 'Brouillon' , 'En construction' , 'En instruction' , 'À corriger' ]
expect ( page ) . to have_text ( '5 sur 5 dossiers' )
2023-05-03 16:47:27 +02:00
click_on ( 'Sélectionner un filtre' )
2023-05-02 09:37:03 +02:00
fill_in 'from_created_at_date' , with : Date . today
click_on ( 'Appliquer les filtres' )
2023-06-15 18:08:44 +02:00
expect ( page ) . to have_text ( '4 sur 4 dossiers' )
2023-05-03 16:47:27 +02:00
expect ( page ) . to have_text ( '1 filtre actif' )
2023-05-02 09:37:03 +02:00
2023-05-03 16:47:27 +02:00
click_on ( 'Sélectionner un filtre' )
2023-06-15 18:08:44 +02:00
select ( 'En construction' , from : 'Statut' )
2023-05-02 09:37:03 +02:00
click_on ( 'Appliquer les filtres' )
2023-06-15 18:08:44 +02:00
expect ( page ) . to have_text ( '1 dossier' )
expect ( page ) . to have_text ( '2 filtres actifs' )
2023-05-02 10:32:38 +02:00
2023-05-03 16:47:27 +02:00
click_on ( 'Sélectionner un filtre' )
2023-05-02 10:32:38 +02:00
fill_in 'from_depose_at_date' , with : Date . today
click_on ( 'Appliquer les filtres' )
expect ( page ) . to have_text ( '1 dossier' )
2023-06-15 18:08:44 +02:00
expect ( page ) . to have_text ( '3 filtres actifs' )
click_on ( '3 filtres actifs' )
expect ( page ) . to have_text ( '5 sur 5 dossiers' )
expect ( page ) . not_to have_text ( '5 filtres actifs' )
2023-05-02 09:37:03 +02:00
end
2019-01-16 15:34:38 +01:00
end
2019-02-06 19:12:04 +01:00
context 'when user clicks on a projet in list' do
2015-09-24 12:02:59 +02:00
before do
2019-02-06 19:12:04 +01:00
page . click_on ( dossier_en_construction . procedure . libelle )
2015-09-24 12:02:59 +02:00
end
2019-02-06 19:12:04 +01:00
2015-09-24 12:02:59 +02:00
scenario 'user is redirected to dossier page' do
2019-02-06 19:12:04 +01:00
expect ( page ) . to have_current_path ( dossier_path ( dossier_en_construction ) )
2015-09-24 12:02:59 +02:00
end
end
2018-06-27 14:47:02 +02:00
2019-02-06 19:12:04 +01:00
describe 'deletion' do
it 'should have links to delete dossiers' do
2023-04-03 20:00:52 +02:00
expect ( page ) . to have_link ( 'Supprimer le dossier' , href : dossier_path ( dossier_brouillon ) )
expect ( page ) . to have_link ( 'Supprimer le dossier' , href : dossier_path ( dossier_en_construction ) )
expect ( page ) . not_to have_link ( 'Supprimer le dossier' , href : dossier_path ( dossier_en_instruction ) )
2019-02-06 19:12:04 +01:00
end
2018-06-27 14:47:02 +02:00
2023-08-31 09:59:18 +02:00
context 'when user clicks on delete button' , js : true , retry : 3 do
2019-02-06 19:12:04 +01:00
scenario 'the dossier is deleted' do
2023-06-28 12:48:47 +02:00
expect ( page ) . to have_content ( dossier_en_construction . procedure . libelle )
within ( :css , " .card " , match : :first ) do
click_on 'Autres actions'
2019-03-26 17:55:40 +01:00
page . accept_alert ( 'Confirmer la suppression ?' ) do
click_on 'Supprimer le dossier'
end
2019-02-06 19:12:04 +01:00
end
2021-12-01 11:02:16 +01:00
expect ( page ) . to have_content ( 'Votre dossier a bien été supprimé' )
2023-06-28 12:48:47 +02:00
expect ( page ) . not_to have_content ( dossier_en_construction . procedure . libelle )
2019-02-06 19:12:04 +01:00
end
2018-06-27 14:47:02 +02:00
end
2022-11-08 16:26:03 +01:00
describe 'clone' do
it 'should have links to clone dossiers' do
expect ( page ) . to have_link ( nil , href : clone_dossier_path ( dossier_brouillon ) )
expect ( page ) . to have_link ( nil , href : clone_dossier_path ( dossier_en_construction ) )
expect ( page ) . to have_link ( nil , href : clone_dossier_path ( dossier_en_instruction ) )
end
2023-08-31 09:59:18 +02:00
context 'when user clicks on clone button' , js : true , retry : 3 do
2023-06-28 12:48:47 +02:00
scenario 'the dossier is cloned' do
within ( :css , " .card " , match : :first ) do
click_on 'Autres actions'
2023-06-29 13:53:23 +02:00
expect { click_on 'Dupliquer ce dossier' } . to change { dossier_brouillon . user . dossiers . count } . by ( 1 )
2022-11-08 16:26:03 +01:00
end
expect ( page ) . to have_content ( " Votre dossier a bien été dupliqué. Vous pouvez maintenant le vérifier, l’ adapter puis le déposer. " )
end
end
end
2018-06-27 14:47:02 +02:00
end
2018-07-17 11:40:19 +02:00
2023-07-26 17:51:04 +02:00
describe " user search bar " do
2018-07-17 11:40:19 +02:00
context " when the dossier does not exist " do
before do
2020-04-03 20:19:23 +02:00
page . find_by_id ( 'q' ) . set ( 10000000 )
2022-08-31 12:44:00 +02:00
find ( '.fr-search-bar .fr-btn' ) . click
2018-07-17 11:40:19 +02:00
end
it " shows an error message on the dossiers page " do
expect ( current_path ) . to eq ( dossiers_path )
2023-07-26 17:51:04 +02:00
expect ( page ) . to have_content ( " Résultat de la recherche pour « 10000000 » " )
expect ( page ) . to have_content ( " Aucun dossier " )
expect ( page ) . to have_content ( " ne correspond aux termes recherchés " )
2018-07-17 11:40:19 +02:00
end
end
context " when the dossier does not belong to the user " do
2019-02-06 19:12:04 +01:00
let! ( :dossier_other_user ) { create ( :dossier ) }
2018-07-17 11:40:19 +02:00
before do
2020-04-03 20:19:23 +02:00
page . find_by_id ( 'q' ) . set ( dossier_other_user . id )
2022-08-31 12:44:00 +02:00
find ( '.fr-search-bar .fr-btn' ) . click
2018-07-17 11:40:19 +02:00
end
it " shows an error message on the dossiers page " do
expect ( current_path ) . to eq ( dossiers_path )
2023-07-26 17:51:04 +02:00
expect ( page ) . to have_content ( " Résultat de la recherche pour « #{ dossier_other_user . id } » " )
expect ( page ) . to have_content ( " Aucun dossier " )
expect ( page ) . to have_content ( " ne correspond aux termes recherchés " )
expect ( page ) . to have_content ( " Réinitialiser la recherche " )
2018-07-17 11:40:19 +02:00
end
end
context " when the dossier belongs to the user " do
before do
2020-04-03 20:19:23 +02:00
page . find_by_id ( 'q' ) . set ( dossier_en_construction . id )
2022-08-31 12:44:00 +02:00
find ( '.fr-search-bar .fr-btn' ) . click
2018-07-17 11:40:19 +02:00
end
2023-07-26 17:51:04 +02:00
it " appears in the result list " do
expect ( current_path ) . to eq ( dossiers_path )
expect ( page ) . to have_content ( " Résultat de la recherche pour « #{ dossier_en_construction . id } » " )
expect ( page ) . not_to have_css ( '.tabs' )
expect ( page ) . to have_content ( dossier_en_construction . id )
2018-07-17 11:40:19 +02:00
end
end
2020-04-06 18:06:38 +02:00
context " when user search for something inside the dossier " do
before do
2022-11-10 22:21:14 +01:00
page . find_by_id ( 'q' ) . set ( dossier_en_construction . champs_public . first . value )
2020-04-06 18:06:38 +02:00
end
2023-07-26 17:51:04 +02:00
context 'when it matches multiple dossiers' do
let! ( :dossier_with_champs ) { create ( :dossier , :with_populated_champs , :en_construction , user : user ) }
2020-04-06 18:06:38 +02:00
before do
2022-08-31 12:44:00 +02:00
find ( '.fr-search-bar .fr-btn' ) . click
2020-04-06 18:06:38 +02:00
end
2023-07-26 17:51:04 +02:00
it " appears in the result list " do
expect ( current_path ) . to eq ( dossiers_path )
expect ( page ) . to have_link ( dossier_en_construction . procedure . libelle )
expect ( page ) . to have_link ( dossier_with_champs . procedure . libelle )
expect ( page ) . to have_text ( " 2 sur 2 dossiers " )
2020-04-06 18:06:38 +02:00
end
2023-07-26 17:51:04 +02:00
it " can be filtered by procedure and display the result - one item " do
select dossier_en_construction . procedure . libelle , from : 'procedure_id'
expect ( page ) . to have_link ( dossier_en_construction . procedure . libelle )
expect ( page ) . not_to have_link ( dossier_with_champs . procedure . libelle )
expect ( page ) . to have_text ( " 1 dossier " )
2020-04-06 18:06:38 +02:00
end
2023-07-26 17:51:04 +02:00
it " can be filtered by procedure and display the result - no item " do
select dossier_brouillon . procedure . libelle , from : 'procedure_id'
expect ( page ) . not_to have_link ( dossier_en_construction . id )
expect ( page ) . not_to have_link ( dossier_with_champs . id )
expect ( page ) . to have_content ( " Résultat de la recherche pour « #{ dossier_en_construction . champs_public . first . value } » et pour la procédure « #{ dossier_brouillon . procedure . libelle } » " )
expect ( page ) . to have_text ( " Aucun dossier " )
2020-04-06 18:06:38 +02:00
end
end
end
2018-07-17 11:40:19 +02:00
end
2023-07-20 16:56:59 +02:00
describe " filter by procedure " do
context " when dossiers are on different procedures " do
it " can filter by procedure " do
expect ( page ) . to have_text ( '5 en cours' )
expect ( page ) . to have_text ( '2 traités' )
expect ( page ) . to have_select ( 'procedure_id' , selected : 'Toutes les démarches' )
select dossier_brouillon . procedure . libelle , from : 'procedure_id'
expect ( page ) . to have_text ( '1 en cours' )
end
end
end
2016-12-13 16:10:03 +01:00
end