demarches-normaliennes/spec/controllers/api/public/v1/stats_controller_spec.rb
2024-08-22 09:26:48 +02:00

79 lines
2.6 KiB
Ruby

# frozen_string_literal: true
RSpec.describe API::Public::V1::StatsController, type: :controller do
describe '#index' do
let(:params) { { id: procedure.id } }
subject(:index_request) { get :index, params: params }
shared_examples 'the procedure is found' do
before do
create(:dossier, :en_instruction, procedure: procedure)
create(:dossier, :accepte, procedure: procedure)
index_request
end
it { expect(response).to be_successful }
it {
expect(response.parsed_body).to match({
funnel: procedure.stats_dossiers_funnel.as_json,
processed: procedure.stats_termines_states.as_json,
processed_by_week: procedure.stats_termines_by_week.as_json,
processing_time: procedure.stats_usual_traitement_time.as_json,
processing_time_by_month: procedure.stats_usual_traitement_time_by_month_in_days.as_json
}.with_indifferent_access)
}
end
shared_examples 'the procedure is not found' do
before { index_request }
it { expect(response).to have_http_status(:not_found) }
it { expect(response).to have_failed_with("procedure #{procedure.id} is not found") }
end
context 'when the procedure is found' do
context 'when the procedure is publiee' do
context 'when the procedure is opendata' do
it_behaves_like 'the procedure is found' do
let(:procedure) { create(:procedure, :published, opendata: true) }
end
end
context 'when the procedure is not opendata' do
it_behaves_like 'the procedure is not found' do
let(:procedure) { create(:procedure, :published, opendata: false) }
end
end
end
context 'when the procedure is brouillon' do
context 'when the procedure is opendata' do
it_behaves_like 'the procedure is found' do
let(:procedure) { create(:procedure, :draft, opendata: true) }
end
end
context 'when the procedure is not opendata' do
it_behaves_like 'the procedure is not found' do
let(:procedure) { create(:procedure, :draft, opendata: false) }
end
end
end
context 'when the procedure is not publiee and not brouillon' do
it_behaves_like 'the procedure is found' do
let(:procedure) { create(:procedure, :closed) }
end
end
end
context 'when the procedure is not found' do
it_behaves_like 'the procedure is not found' do
let(:procedure) { double(Procedure, id: -1) }
end
end
end
end