diff --git a/app/mailers/application_mailer.rb b/app/mailers/application_mailer.rb index 850b28c..b3c1a31 100644 --- a/app/mailers/application_mailer.rb +++ b/app/mailers/application_mailer.rb @@ -1,4 +1,4 @@ class ApplicationMailer < ActionMailer::Base - default from: ENV["WRESTLINGDEV_EMAIL"] + default from: ENV["WRESTLINGDEV_EMAIL"] || 'noreply@wrestlingdev.com' layout 'mailer' end diff --git a/app/mailers/user_mailer.rb b/app/mailers/user_mailer.rb index 29a4198..d428787 100644 --- a/app/mailers/user_mailer.rb +++ b/app/mailers/user_mailer.rb @@ -6,6 +6,6 @@ class UserMailer < ApplicationMailer # def password_reset(user) @user = user - mail to: user.email, subject: "Password reset" + mail to: user.email, subject: "WrestlingDev - Password reset" end end \ No newline at end of file diff --git a/app/views/layouts/mailer.html.erb b/app/views/layouts/mailer.html.erb new file mode 100644 index 0000000..5253fe1 --- /dev/null +++ b/app/views/layouts/mailer.html.erb @@ -0,0 +1,13 @@ + + + + + + + + + <%= yield %> + + \ No newline at end of file diff --git a/app/views/layouts/mailer.text.erb b/app/views/layouts/mailer.text.erb new file mode 100644 index 0000000..abac95f --- /dev/null +++ b/app/views/layouts/mailer.text.erb @@ -0,0 +1 @@ +<%= yield %> \ No newline at end of file diff --git a/app/views/sessions/new.html.erb b/app/views/sessions/new.html.erb index 94fed8b..fbaaefe 100644 --- a/app/views/sessions/new.html.erb +++ b/app/views/sessions/new.html.erb @@ -11,6 +11,7 @@
<%= f.label :password %> <%= f.password_field :password, class: 'form-control' %> + <%= link_to "Forgot password?", new_password_reset_path %>
<%= f.submit "Log in", class: "btn btn-primary" %> diff --git a/test/controllers/password_resets_controller_test.rb b/test/controllers/password_resets_controller_test.rb index 30fbc13..5846ffb 100644 --- a/test/controllers/password_resets_controller_test.rb +++ b/test/controllers/password_resets_controller_test.rb @@ -6,12 +6,16 @@ class PasswordResetsControllerTest < ActionController::TestCase @user.email = 'user@example.com' @user.password_digest = BCrypt::Password.create('password') @user.save + + # Configure email for testing + setup_test_mailer end test "should get new" do get :new assert_response :success assert_select 'h1', 'Forgot password' + assert_select 'form[action=?]', password_resets_path end test "should not create password reset with invalid email" do @@ -19,4 +23,42 @@ class PasswordResetsControllerTest < ActionController::TestCase assert_template 'new' assert_not_nil flash[:alert] end + + test "should create password reset with valid email" do + post :create, params: { password_reset: { email: @user.email } } + assert_not_equal @user.reset_digest, @user.reload.reset_digest + assert_equal 1, ActionMailer::Base.deliveries.size + assert_not_nil flash[:notice] + assert_redirected_to root_url + end + + test "should get edit with valid token" do + post :create, params: { password_reset: { email: @user.email } } + user = assigns(:user) + + # Valid token, correct email + get :edit, params: { id: user.reset_token, email: user.email } + assert_response :success + assert_select "input[name=?]", "user[password]" + assert_select "input[name=?]", "user[password_confirmation]" + end + + test "should update password with valid info" do + post :create, params: { password_reset: { email: @user.email } } + user = assigns(:user) + + # Valid token, correct email, valid info + patch :update, params: { + id: user.reset_token, + email: user.email, + user: { + password: "newpassword", + password_confirmation: "newpassword" + } + } + + assert_not_nil session[:user_id] + assert_not_nil flash[:notice] + assert_redirected_to root_url + end end \ No newline at end of file diff --git a/test/controllers/sessions_controller_test.rb b/test/controllers/sessions_controller_test.rb index c740896..326f729 100644 --- a/test/controllers/sessions_controller_test.rb +++ b/test/controllers/sessions_controller_test.rb @@ -12,6 +12,13 @@ class SessionsControllerTest < ActionController::TestCase get :new assert_response :success assert_select 'h1', 'Log in' + assert_select "a[href=?]", new_password_reset_path, text: "Forgot password?" + end + + test "login page should have forgot password link" do + get :new + assert_response :success + assert_select "a[href=?]", new_password_reset_path, text: "Forgot password?" end test "should create session with valid credentials" do diff --git a/test/test_helper.rb b/test/test_helper.rb index d2e3ca6..713307a 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -13,6 +13,15 @@ class ActiveSupport::TestCase # Add more helper methods to be used by all tests here... + # Configure email for testing + def setup_test_mailer + ActionMailer::Base.delivery_method = :test + ActionMailer::Base.perform_deliveries = true + ActionMailer::Base.deliveries = [] + Rails.application.routes.default_url_options[:host] = 'example.com' + ActionMailer::Base.default from: 'test@example.com' + end + # Authentication helpers for tests - replaces Devise test helpers def sign_in(user) # Set the password_digest for the user if it's not already set