Guest User

Untitled

a guest
Oct 5th, 2018
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. RSpec.describe 'POST /signup', type: :request do
  2. let(:url) { '/signup' }
  3. let(:params) do
  4. {
  5. user: {
  6. email: 'user@example.com',
  7. password: 'password'
  8. }
  9. }
  10. end
  11.  
  12. context 'when user is unauthenticated' do
  13. before { post url, params: params }
  14.  
  15. it 'returns 200' do
  16. expect(response.status).to eq 200
  17. end
  18.  
  19. it 'returns a new user' do
  20. expect(response).to match_response_schema('user')
  21. end
  22. end
  23.  
  24. context 'when user already exists' do
  25. before do
  26. Fabricate :user, email: params[:user][:email]
  27. post url, params: params
  28. end
  29.  
  30. it 'returns bad request status' do
  31. expect(response.status).to eq 400
  32. end
  33.  
  34. it 'returns validation errors' do
  35. expect(json['errors'].first['title']).to eq('Bad Request')
  36. end
  37. end
  38.  
  39. class RegistrationsController < Devise::RegistrationsController
  40. respond_to :json
  41.  
  42. def create
  43. build_resource(sign_up_params)
  44. resource.save
  45. render_resource(resource)
  46. end
  47. end
  48.  
  49. 3) POST /signup when user already exists returns validation errors
  50. Failure/Error: resource.save
  51.  
  52. ActiveRecord::RecordNotUnique:
  53. SQLite3::ConstraintException: UNIQUE constraint failed: users.email:
  54. INSERT INTO "users" ("email", "encrypted_password") VALUES (?, ?)
  55.  
  56. class ApplicationController < ActionController::API
  57.  
  58. def render_resource(resource)
  59. if resource.errors.empty?
  60. render json: resource
  61. else
  62. validation_error(resource)
  63. end
  64. end
  65.  
  66. def validation_error(resource)
  67. render json: {
  68. errors: [
  69. {
  70. status: '400',
  71. title: 'Bad Request',
  72. detail: resource.errors,
  73. code: '100'
  74. }
  75. ]
  76. }, status: :bad_request
  77. end
  78.  
  79. end
  80.  
  81. # add to app/models/user.rb
  82. validates :email, uniqueness: { case_sensitive: false }
Add Comment
Please, Sign In to add comment