Return JSON response from 404

This commit is contained in:
Maciej Szlosarczyk 2020-06-11 13:18:05 +03:00
parent 1033ddc218
commit 7ece2e0341
No known key found for this signature in database
GPG key ID: 41D62D42D3B0D765
3 changed files with 24 additions and 9 deletions

View file

@ -1,6 +1,8 @@
module Api
module V1
class BaseController < ActionController::API
rescue_from ActiveRecord::RecordNotFound, with: :not_found_error
private
def authenticate
@ -8,6 +10,12 @@ module Api
head :unauthorized unless ip_allowed
end
def not_found_error
uuid = params['uuid']
json = { error: 'Not Found', uuid: uuid, message: 'Record not found' }
render json: json, status: :not_found
end
def allowed_ips
ENV['auction_api_allowed_ips'].split(',').map(&:strip)
end

View file

@ -25,8 +25,11 @@ class ApiV1AuctionDetailsTest < ActionDispatch::IntegrationTest
end
def test_auction_not_found
assert_raises ActiveRecord::RecordNotFound do
get api_v1_auction_path('non-existing-uuid'), as: :json
end
expected_uuid = 'not-a-real-path'
get api_v1_auction_path(expected_uuid), as: :json
assert_response :not_found
json = JSON.parse(response.body, symbolize_names: true)
assert_equal expected_uuid, json[:uuid]
assert_equal 'Not Found', json[:error]
end
end
end

View file

@ -141,10 +141,14 @@ class ApiV1AuctionUpdateTest < ActionDispatch::IntegrationTest
end
def test_auction_not_found
assert_raises ActiveRecord::RecordNotFound do
patch api_v1_auction_path('non-existing-uuid'),
params: { status: Auction.statuses[:no_bids] },
as: :json
end
expected_uuid = 'non-existing-uuid'
patch api_v1_auction_path(expected_uuid),
params: { status: Auction.statuses[:no_bids] },
as: :json
assert_response :not_found
json = JSON.parse(response.body, symbolize_names: true)
assert_equal expected_uuid, json[:uuid]
assert_equal 'Not Found', json[:error]
end
end