add procedures_filter specs

This commit is contained in:
Christophe Robillard 2022-11-08 11:34:39 +01:00
parent dcb361a00d
commit 24e7de71e3
2 changed files with 83 additions and 56 deletions

View file

@ -88,68 +88,16 @@ describe Administrateurs::ProceduresController, type: :controller do
end end
describe 'GET #all' do describe 'GET #all' do
let!(:draft_procedure) { create(:procedure) }
let!(:published_procedure) { create(:procedure_with_dossiers, :published, dossiers_count: 2) }
let!(:closed_procedure) { create(:procedure, :closed) }
subject { get :all } subject { get :all }
it { expect(subject.status).to eq(200) } it { expect(subject.status).to eq(200) }
it 'display published or closed procedures' do it 'assigns ProceduresFilter' do
filter = double('filter')
expect(ProceduresFilter).to receive(:new).and_return(filter)
subject subject
expect(assigns(:filter).procedures_result).to include(published_procedure)
expect(assigns(:filter).procedures_result).to include(closed_procedure)
end
it 'doesnt display draft procedures' do expect(assigns(:filter)).to be_present
subject
expect(assigns(:filter).procedures_result).not_to include(draft_procedure)
end
context "for specific zones" do
let(:zone1) { create(:zone) }
let(:zone2) { create(:zone) }
let!(:procedure1) { create(:procedure, :published, zones: [zone1]) }
let!(:procedure2) { create(:procedure, :published, zones: [zone1, zone2]) }
subject { get :all, params: { zone_ids: [zone2.id] } }
it 'display only procedures for specified zones' do
subject
expect(assigns(:filter).procedures_result).to include(procedure2)
expect(assigns(:filter).procedures_result).not_to include(procedure1)
end
end
context 'for specific status' do
let!(:procedure1) { create(:procedure, :published) }
let!(:procedure2) { create(:procedure, :closed) }
it 'display only published procedures' do
get :all, params: { statuses: ['publiee'] }
expect(assigns(:filter).procedures_result).to include(procedure1)
expect(assigns(:filter).procedures_result).not_to include(procedure2)
end
it 'display only closed procedures' do
get :all, params: { statuses: ['close'] }
expect(assigns(:filter).procedures_result).to include(procedure2)
expect(assigns(:filter).procedures_result).not_to include(procedure1)
end
end
context 'after specific date' do
let(:after) { Date.new(2022, 06, 30) }
let!(:procedure1) { create(:procedure, :published, published_at: after + 1.day) }
let!(:procedure2) { create(:procedure, :published, published_at: after + 2.days) }
let!(:procedure3) { create(:procedure, :published, published_at: after - 1.day) }
it 'display only procedures published after specific date' do
get :all, params: { from_publication_date: after }
expect(assigns(:filter).procedures_result).to include(procedure1)
expect(assigns(:filter).procedures_result).to include(procedure2)
expect(assigns(:filter).procedures_result).not_to include(procedure3)
end
end end
end end

View file

@ -0,0 +1,79 @@
describe ProceduresFilter do
let(:admin) { create(:administrateur) }
let(:params) { ActionController::Parameters.new(filters) }
let(:subject) { ProceduresFilter.new(admin, params) }
context 'without filter' do
let(:filters) { {} }
let!(:draft_procedure) { create(:procedure) }
let!(:published_procedure) { create(:procedure_with_dossiers, :published, dossiers_count: 2) }
let!(:closed_procedure) { create(:procedure, :closed) }
it 'returns only published and closed procedures' do
expect(subject.procedures_result).to include(published_procedure)
expect(subject.procedures_result).to include(closed_procedure)
expect(subject.procedures_result).not_to include(draft_procedure)
end
end
context 'with zone filter' do
let(:zone1) { create(:zone) }
let(:zone2) { create(:zone) }
let!(:procedure1) { create(:procedure, :published, zones: [zone1]) }
let!(:procedure2) { create(:procedure, :published, zones: [zone1, zone2]) }
let(:filters) { { zone_ids: [zone2.id] } }
it 'returns only procedures for specified zones' do
expect(subject.procedures_result).to include(procedure2)
expect(subject.procedures_result).not_to include(procedure1)
end
end
context 'with published status filter' do
let!(:procedure1) { create(:procedure, :published) }
let!(:procedure2) { create(:procedure, :closed) }
let(:filters) { { statuses: ['publiee'] } }
it 'returns only published procedures' do
expect(subject.procedures_result).to include(procedure1)
expect(subject.procedures_result).not_to include(procedure2)
end
end
context 'with closed status filter' do
let!(:procedure1) { create(:procedure, :published) }
let!(:procedure2) { create(:procedure, :closed) }
let(:filters) { { statuses: ['close'] } }
it 'returns only closed procedures' do
expect(subject.procedures_result).to include(procedure2)
expect(subject.procedures_result).not_to include(procedure1)
end
end
context 'with specific date filter' do
let(:after) { '2022-06-30' }
let(:after_date) { Date.parse(after) }
let!(:procedure1) { create(:procedure, :published, published_at: after_date + 1.day) }
let!(:procedure2) { create(:procedure, :published, published_at: after_date + 2.days) }
let!(:procedure3) { create(:procedure, :published, published_at: after_date - 1.day) }
let(:filters) { { from_publication_date: after } }
it 'returns only procedures published after specific date' do
expect(subject.procedures_result).to include(procedure1)
expect(subject.procedures_result).to include(procedure2)
expect(subject.procedures_result).not_to include(procedure3)
end
end
context 'with bad date input' do
let(:after) { 'oops' }
let!(:procedure1) { create(:procedure, :published) }
let(:filters) { { from_publication_date: after } }
it 'ignores date filter' do
expect(subject.procedures_result).to include(procedure1)
end
end
end