Files
old-holivud2/spec/controllers/password_resets_controller_spec.rb

104 lines
2.8 KiB
Ruby
Raw Normal View History

2020-05-31 22:38:19 +02:00
require "rails_helper"
RSpec.describe PasswordResetsController, type: :controller do
render_views
let(:user) { create(:user) }
describe "#new" do
it "responds successfully" do
get :new
expect(response).to be_successful
end
it "renders the content" do
get :new
expect(response.body).to have_content("Password Reset")
expect(response.body).to have_field("Email")
end
end
describe "#create" do
it "redirects to new_session_path" do
post :create, params: { password_reset: { email: user.email } }
expect(response).to be_redirect
expect(response).to redirect_to(new_session_path)
end
it "shows an alert message" do
post :create, params: { password_reset: { email: user.email } }
expect(flash.notice).not_to be_nil
end
it "sends the reset email" do
assert_enqueued_emails 1 do
post :create, params: { password_reset: { email: user.email } }
end
end
end
describe "#edit" do
it "responds successfully" do
get :edit, params: { id: user.password_reset_token }
expect(response).to be_successful
end
it "renders the right content" do
user = create(:user)
get :edit, params: { id: user.password_reset_token }
expect(response.body).to have_content("Password Reset")
expect(response.body).to have_selector("input[name='password_reset[password]']")
end
end
describe "#update" do
it "redirects to new_session_path" do
patch :update, params: { id: user.password_reset_token, password_reset: { password: "newpassword" } }
expect(response).to be_redirect
expect(response).to redirect_to(new_session_path)
end
it "shows an alert message" do
patch :update, params: { id: user.password_reset_token, password_reset: { password: "newpassword" } }
expect(flash.notice).not_to be_nil
end
it "resets the user password" do
expect {
patch :update, params: { id: user.password_reset_token, password_reset: { password: "newpassword" } }
}.to change { user.reload.password_digest }
end
it "generates a new password reset token for the user" do
user = create(:user)
expect {
patch :update, params: { id: user.password_reset_token, password_reset: { password: "foo" } }
}.to change { user.reload.password_reset_token }
end
context "when no new password is set" do
it "responds successfully" do
patch :update, params: { id: user.password_reset_token, password_reset: { password: "" } }
expect(response).to be_successful
end
it "shows an alert message" do
patch :update, params: { id: user.password_reset_token, password_reset: { password: "" } }
expect(flash.alert).not_to be_nil
end
end
end
end