diff --git a/spec/requests/api/v1/sessions_request_spec.rb b/spec/requests/api/v1/sessions_request_spec.rb new file mode 100644 index 0000000..4193edb --- /dev/null +++ b/spec/requests/api/v1/sessions_request_spec.rb @@ -0,0 +1,45 @@ +require 'rails_helper' + +RSpec.describe 'Sessions requests', type: :request do + describe 'POST /sessions' do + it 'logs in a existing user' do + user = User.create(email: 'test@test.com', password: 'password', password_confirmation: 'password') + + post '/api/v1/sessions', params: { email: user.email, password: user.password } + + expect(response).to have_http_status(:ok) + + expect(session[:user_id]).to eq(user.id) + + response_body = JSON.parse(response.body, symbolize_names: true) + + expect(response_body[:data][:attributes][:email]).to eq(user.email) + end + + it 'does not log in a non-existing user' do + post '/api/v1/sessions', params: { email: 'user@email.com', password: 'password' } + + expect(response).to have_http_status(:unauthorized) + + expect(session[:user_id]).to be_nil + + response_body = JSON.parse(response.body, symbolize_names: true) + + expect(response_body[:errors].first[:message]).to eq('Invalid email or password') + end + + it 'does not log in a user with wrong password' do + user = User.create(email: 'test@test.com', password: 'password', password_confirmation: 'password') + + post '/api/v1/sessions', params: { email: user.email, password: 'passkey' } + + expect(response).to have_http_status(:unauthorized) + + expect(session[:user_id]).to be_nil + + response_body = JSON.parse(response.body, symbolize_names: true) + + expect(response_body[:errors].first[:message]).to eq('Invalid email or password') + end + end +end diff --git a/spec/requests/api/v1/user_request_spec.rb b/spec/requests/api/v1/user_request_spec.rb index 5c47bfd..c02b28f 100644 --- a/spec/requests/api/v1/user_request_spec.rb +++ b/spec/requests/api/v1/user_request_spec.rb @@ -36,20 +36,4 @@ expect(error[:errors].first[:message]).to eq("Password confirmation doesn't match Password") end end - - describe 'POST /sessions' do - it 'logs in a existing user' do - user = User.create(email: 'test@test.com', password: 'password', password_confirmation: 'password') - - post '/api/v1/sessions', params: { email: user.email, password: user.password } - - expect(response).to have_http_status(:ok) - - expect(session[:user_id]).to eq(user.id) - - response_body = JSON.parse(response.body, symbolize_names: true) - - expect(response_body[:data][:attributes][:email]).to eq(user.email) - end - end end