summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2012-09-03 23:14:19 -0700
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2012-09-03 23:14:19 -0700
commitcb2b888bd62fa266b9f3423f8675bcf45b1b9abe (patch)
tree0f963d69cb52539d7937af6bd772437380db7789
parentb44e9a08d5c0e012d645e75a321c6ea299b4bea1 (diff)
parentd29827433d77b9f9353fcae396ca321dd9016771 (diff)
downloadgitlab-ce-cb2b888bd62fa266b9f3423f8675bcf45b1b9abe.tar.gz
Merge pull request #1365 from tsigo/gitolite_identifier
Update User#identifier to conform to Gitolite 2.x's user pattern
-rw-r--r--app/roles/account.rb11
-rw-r--r--spec/factories.rb2
-rw-r--r--spec/models/user_spec.rb58
3 files changed, 44 insertions, 27 deletions
diff --git a/app/roles/account.rb b/app/roles/account.rb
index 63a9b5c51bf..b8c445a3d58 100644
--- a/app/roles/account.rb
+++ b/app/roles/account.rb
@@ -1,6 +1,13 @@
-module Account
+module Account
+ # Returns a string for use as a Gitolite user identifier
+ #
+ # Note that Gitolite 2.x requires the following pattern for users:
+ #
+ # ^@?[0-9a-zA-Z][0-9a-zA-Z._\@+-]*$
def identifier
- email.gsub /[^[:alnum:]]/, "_"
+ # Replace non-word chars with underscores, then make sure it starts with
+ # valid chars
+ email.gsub(/\W/, '_').gsub(/\A([\W\_])+/, '')
end
def is_admin?
diff --git a/spec/factories.rb b/spec/factories.rb
index 2e4acf39461..a8b3bc57d3f 100644
--- a/spec/factories.rb
+++ b/spec/factories.rb
@@ -28,7 +28,7 @@ FactoryGirl.define do
email { Faker::Internet.email }
name
password "123456"
- password_confirmation "123456"
+ password_confirmation { password }
trait :admin do
admin true
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index ca34f07df7f..081767543e2 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -31,36 +31,46 @@ describe User do
it { should respond_to(:private_token) }
end
- it "should return valid identifier" do
- user = User.new(email: "test@mail.com")
- user.identifier.should == "test_mail_com"
- end
+ describe '#identifier' do
+ it "should return valid identifier" do
+ user = build(:user, email: "test@mail.com")
+ user.identifier.should == "test_mail_com"
+ end
- it "should return identifier without + sign" do
- user = User.new(email: "test+foo@mail.com")
- user.identifier.should == "test_foo_mail_com"
- end
+ it "should return identifier without + sign" do
+ user = build(:user, email: "test+foo@mail.com")
+ user.identifier.should == "test_foo_mail_com"
+ end
- it "should execute callback when force_random_password specified" do
- user = User.new(email: "test@mail.com", force_random_password: true)
- user.should_receive(:generate_password)
- user.save
+ it "should conform to Gitolite's required identifier pattern" do
+ user = build(:user, email: "_test@example.com")
+ user.identifier.should == 'test_example_com'
+ end
end
- it "should not generate password by default" do
- user = Factory(:user, password: 'abcdefg', password_confirmation: 'abcdefg')
- user.password.should == 'abcdefg'
- end
+ 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
- it "should generate password when forcing random password" do
- Devise.stub(:friendly_token).and_return('123456789')
- user = User.create(email: "test1@mail.com", force_random_password: true)
- user.password.should == user.password_confirmation
- user.password.should == '12345678'
+ 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
end
- it "should have authentication token" do
- user = Factory(:user)
- user.authentication_token.should_not == ""
+ describe 'authentication token' do
+ it "should have authentication token" do
+ user = Factory(:user)
+ user.authentication_token.should_not be_blank
+ end
end
end