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