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:
Skud
2013-03-18 17:36:54 +11:00
parent 81e414b2ee
commit 5378e7344d
5 changed files with 93 additions and 17 deletions

View File

@@ -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) }

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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