|
- 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
|