add procedures_filter specs
This commit is contained in:
parent
dcb361a00d
commit
24e7de71e3
2 changed files with 83 additions and 56 deletions
|
@ -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 'doesn’t 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
|
||||||
|
|
||||||
|
|
79
spec/models/procedures_filter_spec.rb
Normal file
79
spec/models/procedures_filter_spec.rb
Normal 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
|
Loading…
Add table
Reference in a new issue