This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe 'error responses', type: :request do
|
||||
describe 'manual input errors' do
|
||||
it 'returns a stable errors array for bad requests' do
|
||||
user = create(:user)
|
||||
sign_in_as(user)
|
||||
|
||||
put "/users/#{ user.id }", params: { name: ' ' }
|
||||
|
||||
expect(response).to have_http_status(:bad_request)
|
||||
expect(json.fetch('errors')).to contain_exactly(
|
||||
include('code' => 'bad_request',
|
||||
'field' => 'name',
|
||||
'message' => be_present))
|
||||
end
|
||||
|
||||
it 'returns a stable errors array for unprocessable requests' do
|
||||
member = create(:user, :member)
|
||||
tag = create(:tag, :general, name: 'error_response_tag')
|
||||
sign_in_as(member)
|
||||
|
||||
patch "/tags/#{ tag.id }", params: { category: 'nico' }
|
||||
|
||||
expect(response).to have_http_status(:unprocessable_entity)
|
||||
expect(json.fetch('errors')).to contain_exactly(
|
||||
include('code' => 'invalid',
|
||||
'field' => 'category',
|
||||
'message' => be_present))
|
||||
end
|
||||
end
|
||||
|
||||
describe 'model validation errors' do
|
||||
it 'returns field, code, and message for model errors' do
|
||||
user = create(:user)
|
||||
sign_in_as(user)
|
||||
|
||||
put "/users/#{ user.id }", params: { name: 'a' * 256 }
|
||||
|
||||
expect(response).to have_http_status(:unprocessable_entity)
|
||||
expect(json.fetch('errors')).to include(
|
||||
include('code' => 'too_long',
|
||||
'field' => 'name',
|
||||
'message' => be_present))
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user