demarches-normaliennes/spec/controllers/users/commencer_controller_spec.rb

249 lines
7.8 KiB
Ruby
Raw Normal View History

2019-03-25 10:53:45 +01:00
describe Users::CommencerController, type: :controller do
2018-11-01 13:00:35 +01:00
let(:user) { create(:user) }
2019-01-16 11:57:58 +01:00
let(:published_procedure) { create(:procedure, :published) }
let(:draft_procedure) { create(:procedure, :with_path) }
2018-11-01 13:00:35 +01:00
2019-01-16 11:57:58 +01:00
describe '#commencer' do
2018-11-01 13:00:35 +01:00
subject { get :commencer, params: { path: path } }
2019-01-16 11:57:58 +01:00
context 'when the path is for a published procedure' do
let(:path) { published_procedure.path }
2018-11-01 13:00:35 +01:00
2019-01-16 11:57:58 +01:00
it 'renders the view' do
expect(subject.status).to eq(200)
expect(subject).to render_template('show')
expect(assigns(:procedure)).to eq published_procedure
2021-06-24 11:57:05 +02:00
expect(assigns(:revision)).to eq published_procedure.published_revision
2019-01-16 11:57:58 +01:00
end
context 'when there are query params' do
subject { get :commencer, params: { path: path, any_param: "any param" } }
it "stores the parameters in session" do
subject
expect(session[:stored_params]).to be_present
end
end
2019-01-16 11:57:58 +01:00
end
context 'when the path is for a draft procedure' do
2019-01-16 11:57:58 +01:00
let(:path) { draft_procedure.path }
it 'redirects with an error message' do
expect(subject).to redirect_to(root_path)
end
end
context 'when the path does not exist' do
2018-11-01 13:00:35 +01:00
let(:path) { 'hello' }
2019-01-16 11:57:58 +01:00
it 'redirects with an error message' do
expect(subject).to redirect_to(root_path)
end
2018-11-01 13:00:35 +01:00
end
context 'when procedure without service is closed' do
it 'works' do
published_procedure.service = nil
published_procedure.organisation = "hello"
published_procedure.close!
get :commencer, params: { path: published_procedure.path }
expect(response).to redirect_to(root_path)
end
end
context 'when procedure with service is closed' do
it 'works' do
published_procedure.service = create(:service)
published_procedure.close!
get :commencer, params: { path: published_procedure.path }
expect(response).to redirect_to(root_path)
end
end
context 'when procedure has a replaced_by_procedure' do
let(:path) { published_procedure.path }
it 'redirects to new procedure' do
replaced_by_procedure = create(:procedure, :published)
published_procedure.update!(replaced_by_procedure_id: replaced_by_procedure.id)
published_procedure.close!
expect(subject).to redirect_to(commencer_path(path: replaced_by_procedure.path))
end
end
2018-11-01 13:00:35 +01:00
end
2019-01-16 11:57:58 +01:00
describe '#commencer_test' do
subject { get :commencer_test, params: { path: path } }
context 'when the path is for a draft procedure' do
let(:path) { draft_procedure.path }
it 'renders the view' do
expect(subject.status).to eq(200)
expect(subject).to render_template('show')
expect(assigns(:procedure)).to eq draft_procedure
2021-06-24 11:57:05 +02:00
expect(assigns(:revision)).to eq draft_procedure.draft_revision
2019-01-16 11:57:58 +01:00
end
2018-11-01 13:00:35 +01:00
end
2019-01-16 11:57:58 +01:00
context 'when the path is for a published procedure' do
let(:path) { published_procedure.path }
2018-11-01 13:00:35 +01:00
2019-01-16 11:57:58 +01:00
it 'redirects with an error message' do
expect(subject).to redirect_to(root_path)
end
end
2018-11-01 13:00:35 +01:00
2019-01-16 11:57:58 +01:00
context 'when the path does not exist' do
2018-11-01 13:00:35 +01:00
let(:path) { 'hello' }
2019-01-16 11:57:58 +01:00
it 'redirects with an error message' do
expect(subject).to redirect_to(root_path)
end
2018-11-01 13:00:35 +01:00
end
end
2019-01-16 11:57:58 +01:00
describe '#sign_in' do
context 'for a published procedure' do
subject { get :sign_in, params: { path: published_procedure.path } }
it 'set the path to return after sign-in to the procedure start page' do
subject
expect(controller.stored_location_for(:user)).to eq(commencer_path(path: published_procedure.path))
end
2019-01-16 11:57:58 +01:00
it { expect(subject).to redirect_to(new_user_session_path) }
2019-01-16 11:57:58 +01:00
end
context 'for a draft procedure' do
subject { get :sign_in, params: { path: draft_procedure.path } }
it 'set the path to return after sign-in to the draft procedure start page' do
subject
expect(controller.stored_location_for(:user)).to eq(commencer_test_path(path: draft_procedure.path))
end
it { expect(subject).to redirect_to(new_user_session_path) }
end
context 'when the path doesnt exist' do
subject { get :sign_in, params: { path: 'hello' } }
it 'redirects with an error message' do
expect(subject).to redirect_to(root_path)
end
end
2019-01-16 11:57:58 +01:00
end
describe '#sign_up' do
context 'for a published procedure' do
subject { get :sign_up, params: { path: published_procedure.path } }
2019-01-16 11:57:58 +01:00
it 'set the path to return after sign-up to the procedure start page' do
subject
expect(controller.stored_location_for(:user)).to eq(commencer_path(path: published_procedure.path))
end
it { expect(subject).to redirect_to(new_user_registration_path) }
2019-01-16 11:57:58 +01:00
end
context 'for a draft procedure' do
subject { get :sign_up, params: { path: draft_procedure.path } }
it 'set the path to return after sign-up to the draft procedure start page' do
subject
expect(controller.stored_location_for(:user)).to eq(commencer_test_path(path: draft_procedure.path))
end
it { expect(subject).to redirect_to(new_user_registration_path) }
end
context 'when the path doesnt exist' do
subject { get :sign_up, params: { path: 'hello' } }
it 'redirects with an error message' do
expect(subject).to redirect_to(root_path)
end
end
2019-01-16 11:57:58 +01:00
end
describe '#france_connect' do
context 'for a published procedure' do
subject { get :france_connect, params: { path: published_procedure.path } }
it 'set the path to return after sign-up to the procedure start page' do
subject
expect(controller.stored_location_for(:user)).to eq(commencer_path(path: published_procedure.path))
end
it { expect(subject).to redirect_to(france_connect_particulier_path) }
end
context 'for a draft procedure' do
subject { get :france_connect, params: { path: draft_procedure.path } }
it 'set the path to return after sign-up to the draft procedure start page' do
subject
expect(controller.stored_location_for(:user)).to eq(commencer_test_path(path: draft_procedure.path))
end
it { expect(subject).to redirect_to(france_connect_particulier_path) }
end
context 'when the path doesnt exist' do
subject { get :france_connect, params: { path: 'hello' } }
it 'redirects with an error message' do
expect(subject).to redirect_to(root_path)
end
end
end
describe '#dossier_vide_pdf' do
let(:procedure) { create(:procedure, :published, :with_service, :with_path) }
before { get :dossier_vide_pdf, params: { path: procedure.path } }
context 'published procedure' do
it 'works' do
expect(response).to have_http_status(:success)
end
end
context 'not yet published procedure' do
let(:procedure) { create(:procedure, :with_service, :with_path) }
it 'redirects to procedure not found' do
expect(response).to have_http_status(302)
end
end
context 'closed procedure' do
it 'works' do
procedure.service = create(:service)
procedure.close!
expect(response).to have_http_status(:success)
end
end
end
describe '#dossier_vide_test_pdf' do
render_views
before { get :dossier_vide_pdf_test, params: { path: procedure.path }, format: :pdf }
context 'not published procedure with service' do
let(:procedure) { create(:procedure, :with_service, :with_path) }
it 'works' do
expect(response).to have_http_status(:success)
end
end
context 'not published procedure without service' do
let(:procedure) { create(:procedure, :with_path, service: nil, organisation: nil) }
it 'works' do
expect(response).to have_http_status(:success)
end
end
end
2018-11-01 13:00:35 +01:00
end