b06183d7bf
This better reflects what the trait is used for, and disambiguate it from the similarly named trait in the Procedure factory.
152 lines
5.3 KiB
Ruby
152 lines
5.3 KiB
Ruby
describe 'user access to the list of their dossiers' do
|
||
let(:user) { create(:user) }
|
||
let!(:dossier_brouillon) { create(:dossier, user: user) }
|
||
let!(:dossier_en_construction) { create(:dossier, :with_populated_champs, :en_construction, user: user) }
|
||
let!(:dossier_en_instruction) { create(:dossier, :en_instruction, user: user) }
|
||
let!(:dossier_archived) { create(:dossier, :en_instruction, :archived, user: user) }
|
||
let(:dossiers_per_page) { 25 }
|
||
let(:last_updated_dossier) { dossier_en_construction }
|
||
|
||
before do
|
||
@default_per_page = Dossier.default_per_page
|
||
Dossier.paginates_per dossiers_per_page
|
||
|
||
last_updated_dossier.update_column(:updated_at, "19/07/2052 15:35".to_time)
|
||
|
||
login_as user, scope: :user
|
||
visit dossiers_path
|
||
end
|
||
|
||
after do
|
||
Dossier.paginates_per @default_per_page
|
||
end
|
||
|
||
it 'the list of dossier is displayed' do
|
||
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)
|
||
end
|
||
|
||
it 'the list must be ordered by last updated' do
|
||
expect(page.body).to match(/#{last_updated_dossier.procedure.libelle}.*#{dossier_en_instruction.procedure.libelle}/m)
|
||
end
|
||
|
||
context 'when there are dossiers from other users' do
|
||
let!(:dossier_other_user) { create(:dossier) }
|
||
|
||
it 'doesn’t display dossiers belonging to other users' do
|
||
expect(page).not_to have_content(dossier_other_user.procedure.libelle)
|
||
end
|
||
end
|
||
|
||
context 'when there is more than one page' do
|
||
let(:dossiers_per_page) { 2 }
|
||
|
||
scenario 'the user can navigate through the other pages' do
|
||
expect(page).not_to have_content(dossier_en_instruction.procedure.libelle)
|
||
page.click_link("Suivant")
|
||
expect(page).to have_content(dossier_en_instruction.procedure.libelle)
|
||
end
|
||
end
|
||
|
||
context 'when user clicks on a projet in list' do
|
||
before do
|
||
page.click_on(dossier_en_construction.procedure.libelle)
|
||
end
|
||
|
||
scenario 'user is redirected to dossier page' do
|
||
expect(page).to have_current_path(dossier_path(dossier_en_construction))
|
||
end
|
||
end
|
||
|
||
describe 'deletion' do
|
||
it 'should have links to delete dossiers' do
|
||
expect(page).to have_link(nil, href: ask_deletion_dossier_path(dossier_brouillon))
|
||
expect(page).to have_link(nil, href: ask_deletion_dossier_path(dossier_en_construction))
|
||
expect(page).not_to have_link(nil, href: ask_deletion_dossier_path(dossier_en_instruction))
|
||
end
|
||
|
||
context 'when user clicks on delete button', js: true do
|
||
scenario 'the dossier is deleted' do
|
||
within(:css, "tr[data-dossier-id=\"#{dossier_brouillon.id}\"]") do
|
||
click_on 'Actions'
|
||
page.accept_alert('Confirmer la suppression ?') do
|
||
click_on 'Supprimer le dossier'
|
||
end
|
||
end
|
||
|
||
expect(page).to have_content('Votre dossier a bien été supprimé.')
|
||
expect(page).not_to have_content(dossier_brouillon.procedure.libelle)
|
||
end
|
||
end
|
||
end
|
||
|
||
describe "recherche" do
|
||
context "when the dossier does not exist" do
|
||
before do
|
||
page.find_by_id('q').set(10000000)
|
||
click_button("Rechercher")
|
||
end
|
||
|
||
it "shows an error message on the dossiers page" do
|
||
expect(current_path).to eq(dossiers_path)
|
||
expect(page).to have_content("Vous n’avez pas de dossiers contenant « 10000000 ».")
|
||
end
|
||
end
|
||
|
||
context "when the dossier does not belong to the user" do
|
||
let!(:dossier_other_user) { create(:dossier) }
|
||
|
||
before do
|
||
page.find_by_id('q').set(dossier_other_user.id)
|
||
click_button("Rechercher")
|
||
end
|
||
|
||
it "shows an error message on the dossiers page" do
|
||
expect(current_path).to eq(dossiers_path)
|
||
expect(page).to have_content("Vous n’avez pas de dossiers contenant « #{dossier_other_user.id} ».")
|
||
end
|
||
end
|
||
|
||
context "when the dossier belongs to the user" do
|
||
before do
|
||
page.find_by_id('q').set(dossier_en_construction.id)
|
||
click_button("Rechercher")
|
||
end
|
||
|
||
it "redirects to the dossier page" do
|
||
expect(current_path).to eq(dossier_path(dossier_en_construction))
|
||
end
|
||
end
|
||
|
||
context "when user search for something inside the dossier" do
|
||
let(:dossier_en_construction2) { create(:dossier, :with_populated_champs, :en_construction, user: user) }
|
||
before do
|
||
page.find_by_id('q').set(dossier_en_construction.champs.first.value)
|
||
end
|
||
|
||
context 'when it only matches one dossier' do
|
||
before do
|
||
click_button("Rechercher")
|
||
end
|
||
it "redirects to the dossier page" do
|
||
expect(current_path).to eq(dossier_path(dossier_en_construction))
|
||
end
|
||
end
|
||
|
||
context 'when it matches multiple dossier' do
|
||
before do
|
||
dossier_en_construction2.champs.first.update(value: dossier_en_construction.champs.first.value)
|
||
click_button("Rechercher")
|
||
end
|
||
|
||
it "redirects to the search results" do
|
||
expect(current_path).to eq(recherche_dossiers_path)
|
||
expect(page).to have_content(dossier_en_construction.id)
|
||
expect(page).to have_content(dossier_en_construction2.id)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|