Skip to content

Commit

Permalink
Merge pull request #1994 from trade-tariff/GL-1067
Browse files Browse the repository at this point in the history
GL-1067: Implement Search Functionality for Exemptions on Category As…
  • Loading branch information
rasikasri authored Oct 18, 2024
2 parents 6d61128 + 61d82b1 commit 354c4b2
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ def index
options = { is_collection: true }
options[:include] = %i[theme]
options[:meta] = pagination_meta(category_assessments)

render json: serialize(category_assessments.to_a, options)
end

Expand Down Expand Up @@ -104,7 +105,34 @@ def record_count
end

def category_assessments
@category_assessments ||= ::GreenLanes::CategoryAssessment.eager(:theme).order(:id).paginate(current_page, per_page)
exemption_code = params.dig(:query, :filters, :exemption_code) || ''
sort_by = params.dig(:query, :sort) || 'id'
sort_order = params.dig(:query, :direction) || 'asc'

order_expr = if sort_order == 'desc'
Sequel.desc(Sequel[:green_lanes_category_assessments][sort_by.to_sym])
else
Sequel.asc(Sequel[:green_lanes_category_assessments][sort_by.to_sym])
end

@category_assessments ||= search_category_assessments(exemption_code, order_expr)
end

def search_category_assessments(exemption_code, order_expr)
if exemption_code.blank?
return ::GreenLanes::CategoryAssessment.eager(:theme).order(order_expr)
.paginate(ca_current_page, per_page)
end

::GreenLanes::CategoryAssessment
.association_join(:exemptions)
.where(
Sequel.|(
{ Sequel[:exemptions][:code] => exemption_code },
),
)
.select_all(:green_lanes_category_assessments)
.eager(:theme).order(order_expr).paginate(ca_current_page, per_page)
end

def green_lanes_measures(category_assessment)
Expand All @@ -119,10 +147,16 @@ def serialize_errors(category_assessment)
Api::Admin::ErrorSerializationService.new(category_assessment).call
end

def ca_current_page
Integer(params.dig(:query, :page) || 1)
rescue ArgumentError
1
end

def pagination_meta(data_set)
{
pagination: {
page: current_page,
page: ca_current_page,
per_page:,
total_count: data_set.pagination_record_count,
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,62 @@
it { expect(json_response).to include('meta') }
end

context 'with some category assessments, search by exemption code' do
before do
category
end

let(:make_request) do
authenticated_get api_admin_green_lanes_category_assessments_path(format: :json), params: search_data
end

let :search_data do
{
query: {
exemption_code: category.exemptions[1].code,
page: 1,
},
}
end

it { is_expected.to have_http_status :success }
it { expect(json_response).to include('data') }
it { expect(json_response).to include('meta') }

it 'expects measure_type_id to be in the json response' do
measure_type_ids = json_response['data'].map { |item| item['attributes']['measure_type_id'] }
expect(measure_type_ids).to include(category.measure_type_id.to_s)
end
end

context 'with some category assessments, sort by parameter present' do
before do
category
end

let(:make_request) do
authenticated_get api_admin_green_lanes_category_assessments_path(format: :json), params: search_data
end

let :search_data do
{
query: {
sort: 'regulation_id',
direction: 'desc',
page: 1,
},
}
end

let :regulation_ids do
json_response['data'].map { |assessment| assessment['attributes']['regulation_id'] }
end

it { is_expected.to have_http_status :success }

it { expect(regulation_ids).to eq(regulation_ids.sort.reverse) }
end

context 'without any category assessments' do
it { is_expected.to have_http_status :success }
it { expect(json_response).to include('data' => []) }
Expand Down

0 comments on commit 354c4b2

Please sign in to comment.