86 lines
2.9 KiB
Ruby
86 lines
2.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
describe Cache::ProcedureDossierPagination do
|
|
let(:instructeur) { double(id: 1) }
|
|
let(:procedure) { double(id: 1) }
|
|
let(:procedure_presentation) { double(instructeur:, procedure:) }
|
|
let(:instance) { described_class.new(procedure_presentation:, statut: 'a-suivre') }
|
|
|
|
before do
|
|
instance.save_context(ids: cached_ids, incoming_page: nil)
|
|
end
|
|
|
|
describe 'next_dossier_id' do
|
|
context 'when procedure.dossiers.by_statut has only one page' do
|
|
let(:cached_ids) { [3, 4] }
|
|
before do
|
|
allow(instance).to receive(:fetch_all_ids).and_return(cached_ids)
|
|
end
|
|
|
|
it 'find next until the end' do
|
|
expect(instance.next_dossier_id(from_id: cached_ids.last)).to eq(nil)
|
|
expect(instance.next_dossier_id(from_id: cached_ids.first)).to eq(cached_ids.last)
|
|
end
|
|
end
|
|
|
|
context 'when procedure.dossiers.by_statut has more than one page' do
|
|
let(:cached_ids) { [2, 3, 4] }
|
|
let(:next_page_ids) { (0..10).to_a }
|
|
|
|
subject { instance.next_dossier_id(from_id: cached_ids.last) }
|
|
before do
|
|
allow(instance).to receive(:fetch_all_ids).and_return(next_page_ids)
|
|
end
|
|
|
|
it 'refreshes paginated_ids' do
|
|
expect { subject }.to change { instance.send(:ids) }.from(cached_ids).to(next_page_ids)
|
|
end
|
|
end
|
|
|
|
context 'when procedure.dossiers.by_statut does not include searched dossiers anymore' do
|
|
let(:cached_ids) { [] }
|
|
let(:next_page_ids) { [] }
|
|
before { allow(instance).to receive(:fetch_all_ids).and_return(next_page_ids) }
|
|
|
|
it 'works' do
|
|
expect(instance.next_dossier_id(from_id: 50)).to eq(nil)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe 'previous_dossier_id' do
|
|
context 'when procedure.dossiers.by_statut has only one page' do
|
|
let(:cached_ids) { [3, 4] }
|
|
before do
|
|
allow(instance).to receive(:fetch_all_ids).and_return(cached_ids)
|
|
end
|
|
|
|
it 'find next until the end' do
|
|
expect(instance.previous_dossier_id(from_id: cached_ids.last)).to eq(cached_ids.first)
|
|
expect(instance.previous_dossier_id(from_id: cached_ids.first)).to eq(nil)
|
|
end
|
|
end
|
|
|
|
context 'when procedure.dossiers.by_statut has more than one page' do
|
|
let(:cached_ids) { [11, 12, 13] }
|
|
subject { instance.previous_dossier_id(from_id: cached_ids.first) }
|
|
let(:next_page_ids) { (11..20).to_a }
|
|
before do
|
|
allow(instance).to receive(:fetch_all_ids).and_return(next_page_ids)
|
|
end
|
|
|
|
it 'works' do
|
|
expect { subject }.to change { instance.send(:ids) }.from(cached_ids).to(next_page_ids)
|
|
end
|
|
end
|
|
|
|
context 'when procedure.dossiers.by_statut does not include searched dossiers anymore' do
|
|
let(:cached_ids) { [] }
|
|
before { allow(instance).to receive(:fetch_all_ids).and_return([]) }
|
|
|
|
it 'works' do
|
|
expect(instance.previous_dossier_id(from_id: 50)).to eq(nil)
|
|
end
|
|
end
|
|
end
|
|
end
|