Skip to content
Extraits de code Groupes Projets
Valider 50f9e8f2 rédigé par Sarah Mei's avatar Sarah Mei
Parcourir les fichiers

Reorganize User model. Preserve case of username.

parent f6886539
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -17,17 +17,18 @@ end
class User
include MongoMapper::Document
plugin MongoMapper::Devise
include Diaspora::UserModules
include Encryptor::Private
plugin MongoMapper::Devise
QUEUE = MessageHandler.new
devise :invitable, :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
key :username, :unique => true
key :username
key :serialized_private_key, String
key :invites, Integer, :default => 5
key :invitation_token, String
key :invitation_sent_at, DateTime
......@@ -37,9 +38,13 @@ class User
key :visible_post_ids, Array
key :visible_person_ids, Array
before_validation :strip_username, :on => :create
validates_presence_of :username
validates_uniqueness_of :username, :case_sensitive => false
validates_format_of :username, :without => /\s/
validates_with InvitedUserValidator
one :person, :class_name => 'Person', :foreign_key => :owner_id
many :inviters, :in => :inviter_ids, :class_name => 'User'
......@@ -47,21 +52,21 @@ class User
many :visible_people, :in => :visible_person_ids, :class_name => 'Person' # One of these needs to go
many :pending_requests, :in => :pending_request_ids, :class_name => 'Request'
many :raw_visible_posts, :in => :visible_post_ids, :class_name => 'Post'
many :aspects, :class_name => 'Aspect'
after_create :seed_aspects
before_validation :strip_and_downcase_username, :on => :create
validates_with InvitedUserValidator
before_destroy :unfriend_everyone, :remove_person
def strip_username
if username.present?
username.strip!
end
end
def self.find_for_authentication(conditions={})
if conditions[:username] =~ /^([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})$/i # email regex
conditions[:email] = conditions.delete(:username)
else
conditions[:username].downcase!
end
super
end
......@@ -360,13 +365,6 @@ class User
"#{self.username}@#{APP_CONFIG[:terse_pod_url]}"
end
def strip_and_downcase_username
if username.present?
username.strip!
username.downcase!
end
end
def as_json(opts={})
{
:user => {
......
......@@ -13,7 +13,6 @@ describe User do
let(:aspect3) { user3.aspect(:name => 'stuff') }
describe "validation" do
describe "of passwords" do
it "fails if password doesn't match confirmation" do
user = Factory.build(:user, :password => "password", :password_confirmation => "nope")
......@@ -27,24 +26,25 @@ describe User do
end
describe "of username" do
it "requires a username" do
it "requires presence" do
user = Factory.build(:user, :username => nil)
user.should_not be_valid
end
it "requires a unique username" do
it "requires uniqueness" do
duplicate_user = Factory.build(:user, :username => user.username)
duplicate_user.should_not be_valid
end
it "downcases the username" do
user = Factory.build(:user, :username => "ALLUPPERCASE")
user.valid?
user.username.should == "alluppercase"
it "keeps the original case" do
user = Factory.build(:user, :username => "WeIrDcAsE")
user.should be_valid
user.username.should == "WeIrDcAsE"
end
user = Factory.build(:user, :username => "someUPPERCASE")
user.valid?
user.username.should == "someuppercase"
it "fails if the requested username is only different in case from an existing username" do
duplicate_user = Factory.build(:user, :username => user.username.upcase)
duplicate_user.should_not be_valid
end
it "strips leading and trailing whitespace" do
......@@ -72,6 +72,13 @@ describe User do
end
end
describe ".find_for_authentication" do
it "preserves case" do
User.find_for_authentication(:username => user.username).should == user
User.find_for_authentication(:username => user.username.upcase).should be_nil
end
end
describe '#diaspora_handle' do
it 'uses the pod config url to set the diaspora_handle' do
user.diaspora_handle.should == user.username + "@" + APP_CONFIG[:terse_pod_url]
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter