diff --git a/app/controllers/api/v1/admin/measures_controller.rb b/app/controllers/api/v1/admin/measures_controller.rb index d879cca926b..e90e50f999b 100644 --- a/app/controllers/api/v1/admin/measures_controller.rb +++ b/app/controllers/api/v1/admin/measures_controller.rb @@ -18,8 +18,8 @@ class Api::V1::Admin::MeasuresController < Api::BaseController def set_measures @measures = Admin::Metrics::Measure.retrieve( params.require(:keys), - params.require(:start_at), - params.require(:end_at), + params[:start_at], + params[:end_at], params ) end diff --git a/app/lib/admin/metrics/dimension/base_dimension.rb b/app/lib/admin/metrics/dimension/base_dimension.rb index 0dbf55a27a4..868f164f6f8 100644 --- a/app/lib/admin/metrics/dimension/base_dimension.rb +++ b/app/lib/admin/metrics/dimension/base_dimension.rb @@ -18,7 +18,12 @@ class Admin::Metrics::Dimension::BaseDimension @params = params @loaded = false - @start_at = [@start_at, @end_at - 2.years].max if @start_at.present? && @end_at.present? + if @start_at.present? && @end_at.present? + @start_at = [@start_at, @end_at - 2.years].max + else + @start_at = nil + @end_at = nil + end end def key diff --git a/app/lib/admin/metrics/measure/base_measure.rb b/app/lib/admin/metrics/measure/base_measure.rb index 27916024d1a..7a6bc219909 100644 --- a/app/lib/admin/metrics/measure/base_measure.rb +++ b/app/lib/admin/metrics/measure/base_measure.rb @@ -12,12 +12,17 @@ class Admin::Metrics::Measure::BaseMeasure alias loaded? loaded def initialize(start_at, end_at, params) - @start_at = start_at.to_datetime - @end_at = end_at.to_datetime + @start_at = start_at&.to_datetime + @end_at = end_at&.to_datetime @params = params @loaded = false - @start_at = [@start_at, @end_at - 2.years].max + if @start_at.present? && @end_at.present? + @start_at = [@start_at, @end_at - 2.years].max + else + @start_at = nil + @end_at = nil + end end def cache_key diff --git a/spec/requests/api/v1/admin/measures_spec.rb b/spec/requests/api/v1/admin/measures_spec.rb index 7607dc17c59..9f0e1ea6c10 100644 --- a/spec/requests/api/v1/admin/measures_spec.rb +++ b/spec/requests/api/v1/admin/measures_spec.rb @@ -51,6 +51,20 @@ RSpec.describe 'Admin Measures' do expect(response.parsed_body) .to be_an(Array) end + + context 'without start_at and end_at' do + it 'returns http success and status json' do + post '/api/v1/admin/measures', params: params.merge({ start_at: nil, end_at: nil }), headers: headers + + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + + expect(response.parsed_body) + .to be_an(Array) + end + end end end end