<commit_before>require 'spec_helper'

describe User do
  pending "add some examples to (or delete) #{__FILE__}"
end<commit_msg>Add test for user model<commit_after>require 'spec_helper'

describe User do

  before do
    @user = User.new(username: "Example User", email: "<EMAIL>",
                     password: "<PASSWORD>", password_confirmation: "<PASSWORD>")
  end

  subject { @user }

  it { should respond_to(:username) }
  it { should respond_to(:email) }
  # it { should respond_to(:password_digest) }
  it { should respond_to(:password) }
  it { should respond_to(:password_confirmation) }
  # it { should respond_to(:remember_token) }
  # it { should respond_to(:authenticate) }
  it { should respond_to(:admin) }

  it { should be_valid }
  it { should_not be_admin }

  # describe "when username is not present" do
  #   before { @user.username = "" }
  #   it { should_not be_valid }
  # end

  # describe "when username is loo long" do
  #   before { @user.username = "a" * 51 }
  #   it { should_not be_valid }
  # end

  describe "when email is not present" do
    before { @user.email = "" }
    it { should_not be_valid }
  end

  describe "when email format is invalid" do
    it "should be invalid" do
      addresses = %w[user@foo,com user_at_foo.org example.user@foo.
                     foo@bar_baz.com foo@bar+baz.com foo@bar..com]
      addresses.each do |invalid_address|
        @user.email = invalid_address
        expect(@user).not_to be_valid
      end
    end
  end

  describe "when email format is valid" do
    it "should be valid" do
      addresses = %w[<EMAIL> <EMAIL>-<EMAIL> <EMAIL> <EMAIL>]
      addresses.each do |valid_address|
        @user.email = valid_address
        expect(@user).to be_valid
      end
    end
  end

  describe "when email address is already taken" do
    before do
      user_with_same_email = @user.dup
      user_with_same_email.email = @user.email.upcase
      user_with_same_email.save
    end

    it { should_not be_valid }
  end

  describe "email address with mixed case" do
    let(:mixed_case_email) { "<EMAIL>" }

    it "should be saved as all lower-case" do
      @user.email = mixed_case_email
      @user.save
      expect(@user.reload.email).to eq mixed_case_email.downcase
    end
  end

  describe "when password is not present" do
    before do
      @user = User.new(username: "Example User", email: "<EMAIL>",
                       password: " ", password_confirmation: " ")
    end
    it { should_not be_valid }
  end

  describe "when password doesn't match confirmation" do
    before { @user.password_confirmation = "mismatch" }
    it { should_not be_valid }
  end

  describe "with a password that's too short" do
    before { @user.password = @user.password_confirmation = "a" * 5 }
    it { should be_invalid }
  end

  # describe "return value of authenticate method" do
  #   before { @user.save }
  #   let(:found_user) { User.find_by(email: @user.email) }

  #   describe "with valid password" do
  #     it { should eq found_user.authenticate(@user.password) }
  #   end

  #   describe "with invalid password" do
  #     let(:user_for_invalid_password) { found_user.authenticate("invalid") }

  #     it { should_not eq user_for_invalid_password }
  #     specify { expect(user_for_invalid_password).to be_false }
  #   end
  # end

  # describe "remember token" do
  #   before { @user.save }

  #   its(:remember_token) { should_not be_blank }
  # end

  describe "with admin attribute set to 'true'" do
    before do
      @user.save!
      @user.toggle(:admin)
    end

    it { should be_admin }
  end

end
{'fraction_non_alphanumeric': 0.1036197844708483, 'fraction_numerical': 0.0008289582757667864, 'mean_word_length': 2.8266384778012683, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 13, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 1, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2326391', 'n_tokens_mistral': 1190, 'n_tokens_neox': 1149, 'n_words': 328}