From 1781a49932b2fbd369c40fbe140dc4e65ba5e094 Mon Sep 17 00:00:00 2001 From: Paul Chavard Date: Thu, 20 Jun 2019 12:11:39 +0200 Subject: [PATCH] Add order param to API --- app/controllers/api/v1/dossiers_controller.rb | 4 +++- .../api/v1/dossiers_controller_spec.rb | 20 ++++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/app/controllers/api/v1/dossiers_controller.rb b/app/controllers/api/v1/dossiers_controller.rb index 5eb8eaadd..980ba7e81 100644 --- a/app/controllers/api/v1/dossiers_controller.rb +++ b/app/controllers/api/v1/dossiers_controller.rb @@ -2,6 +2,7 @@ class API::V1::DossiersController < APIController before_action :fetch_procedure_and_check_token DEFAULT_PAGE_SIZE = 100 + ORDER_DIRECTIONS = { 'asc' => :asc, 'desc' => :desc } def index dossiers = @dossiers.page(params[:page]).per(per_page) @@ -45,7 +46,8 @@ class API::V1::DossiersController < APIController render json: {}, status: :unauthorized end - @dossiers = @procedure.dossiers.state_not_brouillon.order_for_api + order = ORDER_DIRECTIONS.fetch(params[:order], :asc) + @dossiers = @procedure.dossiers.state_not_brouillon.order_for_api(order) rescue ActiveRecord::RecordNotFound render json: {}, status: :not_found diff --git a/spec/controllers/api/v1/dossiers_controller_spec.rb b/spec/controllers/api/v1/dossiers_controller_spec.rb index cee273d56..0e8a01186 100644 --- a/spec/controllers/api/v1/dossiers_controller_spec.rb +++ b/spec/controllers/api/v1/dossiers_controller_spec.rb @@ -24,7 +24,8 @@ describe API::V1::DossiersController do end describe 'GET index' do - let(:retour) { get :index, params: { token: token, procedure_id: procedure_id } } + let(:order) { nil } + let(:retour) { get :index, params: { token: token, procedure_id: procedure_id, order: order }.compact } subject { retour } @@ -80,6 +81,23 @@ describe API::V1::DossiersController do it { expect(subject[:state]).to eq("initiated") } it { expect(subject.keys.size).to eq(4) } end + + describe 'order' do + let!(:dossier1) { create(:dossier, :with_entreprise, procedure: procedure, state: Dossier.states.fetch(:en_construction)) } + let!(:dossier2) { create(:dossier, :with_entreprise, procedure: procedure, state: Dossier.states.fetch(:en_construction)) } + + context 'asc' do + let(:order) { 'asc' } + + it { expect(subject.map { |dossier| dossier[:id] }).to eq([dossier.id, dossier1.id, dossier2.id]) } + end + + context 'desc' do + let(:order) { 'desc' } + + it { expect(subject.map { |dossier| dossier[:id] }).to eq([dossier2.id, dossier1.id, dossier.id]) } + end + end end context 'when there are multiple pages' do