4cb747fdb6
Test helpers are separated between two files: spec_helper and rails_helper. This separation is meant to allow tests that do not require Rails (like testing standalone libs) to boot faster. The spec_helper file is always loaded, through `--require spec_helper` in the `.rspec` config file. When needed, the rails_helper file is expected to be required manually. This is fine, but: - Many test files have a redundant `require 'spec_helper'` line; - Many test files should require `rails_helper`, but don't. Not requiring `rails_helper` will cause the Rails-concerned section of the test environment not to be configured–which may cause subtle bugs (like the test database not being properly initialized). Moreover, Spring loads all the Rails files on preloading anyway. So the gains from using only `spec_helper` are thin. To streamline this process, this commit: - Configures `.rspec` to require `rails_helper` by default; - Remove all manual requires to spec_helper or rails_helper. Reference: https://stackoverflow.com/questions/24145329/how-is-spec-rails-helper-rb-different-from-spec-spec-helper-rb-do-i-need-it
88 lines
2.6 KiB
Ruby
88 lines
2.6 KiB
Ruby
RSpec.describe ProcedureContextConcern, type: :controller do
|
|
class TestController < ActionController::Base
|
|
include ProcedureContextConcern
|
|
|
|
before_action :restore_procedure_context
|
|
|
|
def index
|
|
head :ok
|
|
end
|
|
end
|
|
|
|
controller TestController do
|
|
end
|
|
|
|
describe '#restore_procedure_context' do
|
|
subject { get :index }
|
|
|
|
context 'when no return location has been stored' do
|
|
it 'succeeds, without defining a procedure on the controller' do
|
|
expect(subject.status).to eq 200
|
|
expect(assigns(:procedure)).to be nil
|
|
end
|
|
end
|
|
|
|
context 'when the stored return location is not a procedure URL' do
|
|
before do
|
|
controller.store_location_for(:user, dossiers_path)
|
|
end
|
|
|
|
it 'succeeds, without assigns a procedure on the controller' do
|
|
expect(subject.status).to eq 200
|
|
expect(assigns(:procedure)).to be nil
|
|
end
|
|
end
|
|
|
|
context 'when a procedure location has been stored' do
|
|
context 'when the procedure path does not exist' do
|
|
before do
|
|
controller.store_location_for(:user, commencer_path(path: 'non-existent-path'))
|
|
end
|
|
|
|
it 'redirects with an error' do
|
|
expect(subject.status).to eq 302
|
|
expect(subject).to redirect_to root_path
|
|
end
|
|
end
|
|
|
|
context 'when the procedure path exists, but not with the same publication status' do
|
|
let(:published_procedure) { create :procedure, :published }
|
|
|
|
before do
|
|
controller.store_location_for(:user, commencer_test_path(path: published_procedure.path))
|
|
end
|
|
|
|
it 'redirects with an error' do
|
|
expect(subject.status).to eq 302
|
|
expect(subject).to redirect_to root_path
|
|
end
|
|
end
|
|
|
|
context 'when the stored procedure is in test' do
|
|
let(:test_procedure) { create :procedure, :with_path }
|
|
|
|
before do
|
|
controller.store_location_for(:user, commencer_test_path(path: test_procedure.path))
|
|
end
|
|
|
|
it 'succeeds, and assigns the procedure on the controller' do
|
|
expect(subject.status).to eq 200
|
|
expect(assigns(:procedure)).to eq test_procedure
|
|
end
|
|
end
|
|
|
|
context 'when the stored procedure is published' do
|
|
let(:published_procedure) { create :procedure, :published }
|
|
|
|
before do
|
|
controller.store_location_for(:user, commencer_path(path: published_procedure.path))
|
|
end
|
|
|
|
it 'succeeds, and assigns the procedure on the controller' do
|
|
expect(subject.status).to eq 200
|
|
expect(assigns(:procedure)).to eq published_procedure
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|