mirror of
https://github.com/Growstuff/growstuff.git
synced 2026-05-16 12:40:07 -04:00
Added validations for member names:
2-25 chars long alphanumeric and underscores only disallowed: "growstuff", "admin", "moderator" removed everything that was there to handle/truncate long usernames since it's no longer needed.
This commit is contained in:
@@ -37,6 +37,20 @@ class Member < ActiveRecord::Base
|
||||
:accept => true
|
||||
|
||||
validates_uniqueness_of :login_name
|
||||
validates :login_name,
|
||||
:length => {
|
||||
:minimum => 2,
|
||||
:maximum => 25,
|
||||
:message => "should be between 2 and 25 characters long"
|
||||
},
|
||||
:exclusion => {
|
||||
:in => %w(growstuff admin moderator),
|
||||
:message => "name is reserved"
|
||||
},
|
||||
:format => {
|
||||
:with => /^\w+$/,
|
||||
:message => "may only include letters, numbers, or underscores"
|
||||
}
|
||||
|
||||
# Give each new member a default garden
|
||||
after_create {|member| Garden.create(:name => "Garden", :owner_id => member.id) }
|
||||
|
||||
@@ -8,4 +8,4 @@
|
||||
%li.span2
|
||||
.thumbnail(style="height: 190px")
|
||||
= render :partial => "members/avatar", :locals => { :member => m }
|
||||
= link_to shorten(m.to_s, 30), m
|
||||
= link_to m.to_s, m
|
||||
|
||||
@@ -18,10 +18,6 @@ FactoryGirl.define do
|
||||
confirmed_at nil
|
||||
end
|
||||
|
||||
factory :long_name_member do
|
||||
login_name 'Marmaduke Blundell-Hollinshead-Blundell-Tolemache-Plantagenet-Whistlebinkie, 3rd Duke of Marmoset'
|
||||
end
|
||||
|
||||
# this member has very loose privacy settings
|
||||
factory :public_member do
|
||||
login_name 'NothingToHide'
|
||||
@@ -40,6 +36,38 @@ FactoryGirl.define do
|
||||
roles { [ FactoryGirl.create(:admin) ] }
|
||||
end
|
||||
|
||||
factory :invalid_member_shortname do
|
||||
login_name 'a'
|
||||
end
|
||||
|
||||
factory :invalid_member_longname do
|
||||
login_name 'MarmadukeBlundellHollinsheadBlundellTolemachePlantagenetWhistlebinkie3rdDukeofMarmoset'
|
||||
end
|
||||
|
||||
factory :invalid_member_spaces do
|
||||
login_name "a b"
|
||||
end
|
||||
|
||||
factory :invalid_member_badchars do
|
||||
login_name 'aa%$'
|
||||
end
|
||||
|
||||
factory :invalid_member_badname do
|
||||
login_name 'admin'
|
||||
end
|
||||
|
||||
factory :valid_member_alphanumeric do
|
||||
login_name 'abc123'
|
||||
end
|
||||
|
||||
factory :valid_member_uppercase do
|
||||
login_name 'ABC123'
|
||||
end
|
||||
|
||||
factory :valid_member_underscore do
|
||||
login_name 'abc_123'
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -101,13 +101,56 @@ describe 'member' do
|
||||
|
||||
context 'same :login_name' do
|
||||
it "should not allow two members with the same login_name" do
|
||||
FactoryGirl.create(:member, :login_name => "login-name")
|
||||
member = FactoryGirl.build(:member, :login_name => "login-name")
|
||||
FactoryGirl.create(:member, :login_name => "login_name")
|
||||
member = FactoryGirl.build(:member, :login_name => "login_name")
|
||||
member.should_not be_valid
|
||||
member.errors[:login_name].should include("has already been taken")
|
||||
end
|
||||
end
|
||||
|
||||
context 'invalid login names' do
|
||||
it "doesn't allow short names" do
|
||||
member = FactoryGirl.build(:invalid_member_shortname)
|
||||
member.should_not be_valid
|
||||
member.errors[:login_name].should include("should be between 2 and 25 characters long")
|
||||
end
|
||||
it "doesn't allow really long names" do
|
||||
member = FactoryGirl.build(:invalid_member_longname)
|
||||
member.should_not be_valid
|
||||
member.errors[:login_name].should include("should be between 2 and 25 characters long")
|
||||
end
|
||||
it "doesn't allow spaces in names" do
|
||||
member = FactoryGirl.build(:invalid_member_spaces)
|
||||
member.should_not be_valid
|
||||
member.errors[:login_name].should include("may only include letters, numbers, or underscores")
|
||||
end
|
||||
it "doesn't allow other chars in names" do
|
||||
member = FactoryGirl.build(:invalid_member_badchars)
|
||||
member.should_not be_valid
|
||||
member.errors[:login_name].should include("may only include letters, numbers, or underscores")
|
||||
end
|
||||
it "doesn't allow reserved names" do
|
||||
member = FactoryGirl.build(:invalid_member_badname)
|
||||
member.should_not be_valid
|
||||
member.errors[:login_name].should include("name is reserved")
|
||||
end
|
||||
end
|
||||
|
||||
context 'valid login names' do
|
||||
it "allows plain alphanumeric chars in names" do
|
||||
member = FactoryGirl.build(:valid_member_alphanumeric)
|
||||
member.should be_valid
|
||||
end
|
||||
it "allows uppercase chars in names" do
|
||||
member = FactoryGirl.build(:valid_member_uppercase)
|
||||
member.should be_valid
|
||||
end
|
||||
it "allows underscores in names" do
|
||||
member = FactoryGirl.build(:valid_member_underscore)
|
||||
member.should be_valid
|
||||
end
|
||||
end
|
||||
|
||||
context 'roles' do
|
||||
before(:each) do
|
||||
@member = FactoryGirl.create(:member)
|
||||
|
||||
@@ -4,20 +4,11 @@ describe "members/index" do
|
||||
before(:each) do
|
||||
assign(:members, [
|
||||
FactoryGirl.create(:member),
|
||||
FactoryGirl.create(:long_name_member)
|
||||
FactoryGirl.create(:member)
|
||||
])
|
||||
render
|
||||
end
|
||||
|
||||
it "truncates long names" do
|
||||
rendered.should contain "marmaduke blundell-hollinsh..."
|
||||
end
|
||||
|
||||
it "does not truncate short names" do
|
||||
rendered.should contain /member\d+/
|
||||
rendered.should_not contain /member\d+\.\.\./
|
||||
end
|
||||
|
||||
it "counts the number of members" do
|
||||
rendered.should contain "Displaying 2 members"
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user