safetypin icon

Untitled

safetypin | PRO | 05/11/20 08:11:32 PM UTC | 0 ⭐ | 400 👁️ | Never ⏰ | []
Ruby |

4.96 KB

|

None

|

0 👍

/

0 👎

UserTest#test_password_should_have_a_minimum_length [/Users/matthew/work/intertrode/test/models/user_test.rb:71]:
Expected true to be nil or false
 
#######
#######
 
class User < ApplicationRecord
  attr_accessor :remember_token, :activation_token, :reset_token
  attr_readonly :name, :email
  
  before_save   :downcase_email
  before_create :create_activation_digest
  
  has_secure_password
  has_many :plans, through: :read_marks
  
  validates :password, presence: true, on: :create, allow_blank: false, allow_nil: true, length: { minimum: 8 }
  validates :name, presence: true, length: { minimum: 3, maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX },
                    uniqueness: { case_sensitive: false }
 
  # Returns the hash digest of the given string.
  def self.digest(string)
    cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST :
                                                  BCrypt::Engine.cost
    BCrypt::Password.create(string, cost: cost)
  end
 
  # Returns a random token.
  def self.new_token
    SecureRandom.urlsafe_base64
  end
 
  def remember
    self.remember_token = User.new_token
    update_attribute(:remember_token, User.digest(remember_token))
  end
 
  # Returns true if the given token matches the digest.
  def authenticated?(attribute, token)
    digest = send("#{attribute}_digest")
    return false if digest.nil?
    BCrypt::Password.new(digest).is_password?(token)
  end
 
  # Forgets a user.
  def forget
    update_attribute(:remember_token, nil)
  end
 
  # Activates an account.
  def activate
    update_columns(active: true, activated_at: Time.zone.now)
  end
 
  def activated?
    return self.activated_at
  end
 
  # Sends activation email.
  def send_activation_email
    UserMailer.account_activation(self).deliver_now
  end
 
  # Sets the password reset attributes.
  def create_reset_digest
    self.reset_token = User.new_token
    update_columns(reset_digest:  User.digest(reset_token), reset_sent_at: Time.zone.now)
  end
 
  # Sends password reset email.
  def send_password_reset_email
    UserMailer.password_reset(self).deliver_now
  end
 
  # Returns true if a password reset has expired.
  def password_reset_expired?
    reset_sent_at < 2.hours.ago
  end
 
  def active?
    return self.active
  end
 
  def reset_activation_digest
    self.activation_token  = User.new_token
    self.activation_digest = User.digest(activation_token)
    self.save!
  end
 
  private
  
  def downcase_email
    self.email = email.downcase
  end
 
  def create_activation_digest
    self.activation_token  = User.new_token
    self.activation_digest = User.digest(activation_token)
  end
 
end
 
####################
####################
 
require 'test_helper'
 
class UserTest < ActiveSupport::TestCase
 
  def setup
    @user = users(:michael)
  end
 
  test "should be valid" do
    assert @user.valid?
  end
  
  test "name should be present" do
    @user.name = "  "
    assert_not @user.valid?
  end
  
  test "email should be present" do
    @user.email = "    "
    assert_not @user.valid?
  end
  
  test "name should not be too short" do
    @user.name = "a" * 2
    assert_not @user.valid?
  end
  
  test "name should not be too long" do
    @user.name = "a" * 51
    assert_not @user.valid?
  end
  
  test "email should not be too long" do
    @user.email = "a" * 244 + "@example.com"
    assert_not @user.valid?
  end
  
  test "email validation should accept valid addresses" do
    valid_addresses = %w[user@example.com USER@foo.COM A_US-ER@foo.bar.org
                         first.last@foo.jp alice+bob@baz.cn]
    valid_addresses.each do |valid_address|
      @user.email = valid_address
      assert @user.valid?, "#{valid_address.inspect} should be valid"
    end
  end
 
  test "email validation should reject invalid addresses" do
    invalid_addresses = %w[user@example,com user_at_foo.org user.name@example.
                           foo@bar_baz.com foo@bar+baz.com]
    invalid_addresses.each do |invalid_address|
      @user.email = invalid_address
      assert_not @user.valid?, "#{invalid_address.inspect} should be invalid"
    end
  end
 
  test "email addresses should be unique" do
    duplicate_user = @user.dup
    duplicate_user.email = @user.email.upcase
    @user.save
    assert_not duplicate_user.valid?
  end
 
  test "mixed case emails should be converted to lower case" do
    @user.email = "[email protected]"
    @user.save
    assert @user.email == "[email protected]"
  end
 
  test "password should have a minimum length" do
    @user.password = @user.password_confirmation = 'a'
    assert_not @user.valid?
  end
 
  test "authenticated? should return false for a user with nil digest" do
    assert_not @user.authenticated?(:remember, '')
  end
 
end

Comments