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