48 lines
1.5 KiB
Ruby
48 lines
1.5 KiB
Ruby
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
|