user_spec.rb 6.0 KB
Newer Older
D
Dmitriy Zaporozhets 已提交
1 2 3 4
# == Schema Information
#
# Table name: users
#
D
Dmitriy Zaporozhets 已提交
5 6 7
#  id                     :integer          not null, primary key
#  email                  :string(255)      default(""), not null
#  encrypted_password     :string(255)      default(""), not null
D
Dmitriy Zaporozhets 已提交
8 9 10
#  reset_password_token   :string(255)
#  reset_password_sent_at :datetime
#  remember_created_at    :datetime
D
Dmitriy Zaporozhets 已提交
11
#  sign_in_count          :integer          default(0)
D
Dmitriy Zaporozhets 已提交
12 13 14 15
#  current_sign_in_at     :datetime
#  last_sign_in_at        :datetime
#  current_sign_in_ip     :string(255)
#  last_sign_in_ip        :string(255)
D
Dmitriy Zaporozhets 已提交
16 17
#  created_at             :datetime         not null
#  updated_at             :datetime         not null
D
Dmitriy Zaporozhets 已提交
18
#  name                   :string(255)
D
Dmitriy Zaporozhets 已提交
19 20 21 22 23
#  admin                  :boolean          default(FALSE), not null
#  projects_limit         :integer          default(10)
#  skype                  :string(255)      default(""), not null
#  linkedin               :string(255)      default(""), not null
#  twitter                :string(255)      default(""), not null
D
Dmitriy Zaporozhets 已提交
24
#  authentication_token   :string(255)
D
Dmitriy Zaporozhets 已提交
25
#  theme_id               :integer          default(1), not null
D
Dmitriy Zaporozhets 已提交
26
#  bio                    :string(255)
D
Dmitriy Zaporozhets 已提交
27
#  failed_attempts        :integer          default(0)
D
Dmitriy Zaporozhets 已提交
28 29 30
#  locked_at              :datetime
#  extern_uid             :string(255)
#  provider               :string(255)
D
Dmitriy Zaporozhets 已提交
31
#  username               :string(255)
32 33
#  can_create_group       :boolean          default(TRUE), not null
#  can_create_team        :boolean          default(TRUE), not null
D
Dmitriy Zaporozhets 已提交
34 35
#  state                  :string(255)
#  color_scheme_id        :integer          default(1), not null
D
Dmitriy Zaporozhets 已提交
36 37
#

G
gitlabhq 已提交
38 39 40 41
require 'spec_helper'

describe User do
  describe "Associations" do
42
    it { should have_one(:namespace) }
43
    it { should have_many(:users_projects).dependent(:destroy) }
44
    it { should have_many(:groups) }
45 46 47
    it { should have_many(:keys).dependent(:destroy) }
    it { should have_many(:events).class_name('Event').dependent(:destroy) }
    it { should have_many(:recent_events).class_name('Event') }
48
    it { should have_many(:issues).dependent(:destroy) }
49
    it { should have_many(:notes).dependent(:destroy) }
50 51 52
    it { should have_many(:assigned_issues).dependent(:destroy) }
    it { should have_many(:merge_requests).dependent(:destroy) }
    it { should have_many(:assigned_merge_requests).dependent(:destroy) }
53 54
  end

55 56 57 58 59
  describe "Mass assignment" do
    it { should_not allow_mass_assignment_of(:projects_limit) }
    it { should allow_mass_assignment_of(:projects_limit).as(:admin) }
  end

60
  describe 'validations' do
61
    it { should validate_presence_of(:username) }
62 63 64 65 66 67
    it { should validate_presence_of(:projects_limit) }
    it { should validate_numericality_of(:projects_limit) }
    it { should allow_value(0).for(:projects_limit) }
    it { should_not allow_value(-1).for(:projects_limit) }

    it { should ensure_length_of(:bio).is_within(0..255) }
G
gitlabhq 已提交
68 69 70 71 72
  end

  describe "Respond to" do
    it { should respond_to(:is_admin?) }
    it { should respond_to(:name) }
N
Nihad Abbasov 已提交
73
    it { should respond_to(:private_token) }
G
gitlabhq 已提交
74 75
  end

76 77 78 79 80 81 82 83 84 85 86
  describe '#generate_password' do
    it "should execute callback when force_random_password specified" do
      user = build(:user, force_random_password: true)
      user.should_receive(:generate_password)
      user.save
    end

    it "should not generate password by default" do
      user = create(:user, password: 'abcdefg')
      user.password.should == 'abcdefg'
    end
87

88 89 90 91 92
    it "should generate password when forcing random password" do
      Devise.stub(:friendly_token).and_return('123456789')
      user = create(:user, password: 'abcdefg', force_random_password: true)
      user.password.should == '12345678'
    end
93 94
  end

95 96
  describe 'authentication token' do
    it "should have authentication token" do
97
      user = create(:user)
98 99
      user.authentication_token.should_not be_blank
    end
N
Nihad Abbasov 已提交
100
  end
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142

  describe 'projects' do
    before do
      ActiveRecord::Base.observers.enable(:user_observer)
      @user = create :user
      @project = create :project, namespace: @user.namespace
    end

    it { @user.authorized_projects.should include(@project) }
    it { @user.owned_projects.should include(@project) }
    it { @user.personal_projects.should include(@project) }
  end

  describe 'groups' do
    before do
      ActiveRecord::Base.observers.enable(:user_observer)
      @user = create :user
      @group = create :group, owner: @user
    end

    it { @user.several_namespaces?.should be_true }
    it { @user.namespaces.should == [@user.namespace, @group] }
    it { @user.authorized_groups.should == [@group] }
    it { @user.owned_groups.should == [@group] }
  end

  describe 'namespaced' do
    before do
      ActiveRecord::Base.observers.enable(:user_observer)
      @user = create :user
      @project = create :project, namespace: @user.namespace
    end

    it { @user.several_namespaces?.should be_false }
    it { @user.namespaces.should == [@user.namespace] }
  end

  describe 'blocking user' do
    let(:user) { create(:user, name: 'John Smith') }

    it "should block user" do
      user.block
143
      user.blocked?.should be_true
144 145 146 147 148
    end
  end

  describe 'filter' do
    before do
149
      User.delete_all
150 151
      @user = create :user
      @admin = create :user, admin: true
152
      @blocked = create :user, state: :blocked
153 154 155 156 157 158 159 160 161 162
    end

    it { User.filter("admins").should == [@admin] }
    it { User.filter("blocked").should == [@blocked] }
    it { User.filter("wop").should == [@user, @admin, @blocked] }
    it { User.filter(nil).should == [@user, @admin] }
  end

  describe :not_in_project do
    before do
163
      User.delete_all
164 165 166 167 168 169
      @user = create :user
      @project = create :project
    end

    it { User.not_in_project(@project).should == [@user, @project.owner] }
  end
D
Dmitriy Zaporozhets 已提交
170 171 172 173 174 175

  describe 'normal user' do
    let(:user) { create(:user, name: 'John Smith') }

    it { user.is_admin?.should be_false }
    it { user.require_ssh_key?.should be_true }
D
Dmitriy Zaporozhets 已提交
176
    it { user.can_create_group?.should be_true }
D
Dmitriy Zaporozhets 已提交
177 178 179
    it { user.can_create_project?.should be_true }
    it { user.first_name.should == 'John' }
  end
G
gitlabhq 已提交
180
end