Advertisement
Guest User

Untitled

a guest
Jan 29th, 2017
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.14 KB | None | 0 0
  1. ERROR["test_login_with_valid_information_followed_by_logout", UserLoginTest, 1.443278428982012]
  2. test_login_with_valid_information_followed_by_logout#UserLoginTest (1.44s)
  3. NoMethodError: NoMethodError: undefined method `remember' for #<User:0x0000000a0c5698>
  4. Did you mean? remember_token
  5. app/helpers/sessions_helper.rb:8:in `remember'
  6. app/controllers/sessions_controller.rb:10:in `create'
  7. test/integration/user_login_test.rb:23:in `block in <class:UserLoginTest>'
  8.  
  9. class User < ApplicationRecord
  10. attr_accessor :remember_token
  11.  
  12. before_save { email.downcase! }
  13. validates :name, presence: true, length: {maximum: 50}
  14. VALID_EMAIL_REGEX = /A[w+-.]+@[a-zd-.]+.[a-z]+z/i
  15. validates :email, presence: true, length: {maximum: 255},
  16. format: { with: VALID_EMAIL_REGEX},
  17. uniqueness: { case_sensitive: false }
  18. has_secure_password
  19. validates :password, presence: true, length: {minimum: 6}
  20.  
  21. class << self
  22.  
  23. # Returns the hash digest of the given string.
  24. def digest(string)
  25. cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST :
  26. BCrypt::Engine.cost
  27. BCrypt::Password.create(string, cost: cost)
  28. end
  29.  
  30. # Returns a random token.
  31. def new_token
  32. SecureRandom.urlsafe_base64
  33. end
  34.  
  35. def remember
  36. remember_token = new_token
  37. update_attribute(:remember_digest, digest(remember_token))
  38. end
  39.  
  40. # Returns true if the given token matches the digest.
  41. def authenticated?(remember_token)
  42. BCrypt::Password.new(remember_digest).is_password?(remember_token)
  43. end
  44. end
  45. end
  46.  
  47. class SessionsController < ApplicationController
  48.  
  49. def new
  50. end
  51.  
  52. def create
  53. user = User.find_by(email: params[:session][:email].downcase)
  54. if user && user.authenticate(params[:session][:password])
  55. log_in user
  56. remember user
  57. redirect_to user
  58. else
  59. flash.now[:danger] = "Invalid email/password combination"
  60. render 'new'
  61. end
  62. end
  63.  
  64. def destroy
  65. log_out
  66. redirect_to root_path
  67. end
  68. end
  69.  
  70. module SessionsHelper
  71. def log_in(user)
  72. session[:user_id] = user.id
  73. end
  74.  
  75. # Remembers a user in a persistent session.
  76. def remember(user)
  77. user.remember
  78. cookies.permanent.signed[:user_id] = user.id
  79. cookies.permanent[:remember_token] = user.remember_token
  80. end
  81.  
  82. def current_user
  83. if (user_id = session[:user_id])
  84. current_user ||= User.find_by(id: user_id)
  85. elsif ( user_id = cookies.signed[:user_id] )
  86. user = User.find_by(id: user_id )
  87. if user && user.authenticated?(cookies[:remember_token])
  88. log_in user
  89. @current_user = user
  90. end
  91. end
  92. end
  93.  
  94. def logged_in?
  95. !current_user.nil?
  96. end
  97.  
  98. def log_out
  99. session.delete(:user_id)
  100. @current_user = nil
  101. end
  102. end
  103.  
  104. **user_login_test.rb**
  105.  
  106. require 'test_helper'
  107.  
  108. class UserLoginTest < ActionDispatch::IntegrationTest
  109.  
  110. def setup
  111. @user = users(:marcin)
  112. end
  113.  
  114. test "user invalid login" do
  115. get login_path
  116. assert_template 'sessions/new'
  117. post login_path, params: { session: { email: "", password: "" } }
  118. assert_template 'sessions/new'
  119. assert_not flash.empty?
  120. assert flash.any?
  121. get root_path
  122. assert_not flash.any?
  123. end
  124.  
  125. test "login with valid information followed by logout" do
  126. get login_path
  127. assert_template 'sessions/new'
  128. post login_path, params: { session: { email: @user.email,
  129. password: 'password' } }
  130. assert is_logged_in?
  131. assert_redirected_to @user
  132. follow_redirect!
  133. assert_template 'users/show'
  134. assert_select "a[href=?]", login_path, count: 0
  135. assert_select "a[href=?]", logout_path
  136. assert_select "a[href=?]", user_path(@user)
  137. delete logout_path
  138. assert_not is_logged_in?
  139. assert_redirected_to root_path
  140. follow_redirect!
  141. skip
  142. assert_select "a[href=?]", login_path
  143. assert_select "a[href=?]", logout_path, count: 0
  144. assert_select "a[href=?]", user_path(@user), count: 0
  145. end
  146.  
  147. end
  148.  
  149. ....
  150. has_secure_password
  151. validates :password, presence: true, length: {minimum: 6}
  152.  
  153. def remember
  154. remember_token = new_token
  155. update_attribute(:remember_digest, digest(remember_token))
  156. end
  157. ...
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement