Commit 5837835
Changed files (2)
app
models
spec
models
app/models/user.rb
@@ -11,6 +11,7 @@ class User < ActiveRecord::Base
validates_acceptance_of :terms_and_conditions
after_create :create_profile
+ before_validation :lowercase_account_fields
def timezone
TZInfo::Timezone.get('Canada/Mountain')
@@ -53,8 +54,13 @@ class User < ActiveRecord::Base
GoogleDrive.new(self)
end
- def self.authenticate(username,password)
- if user = User.where("email = :email OR username = :username", username: username, email: username).first
+ def self.authenticate(username, password)
+ user = User.where(
+ "email = :email OR username = :username",
+ username: username.downcase,
+ email: username.downcase
+ ).first
+ if user.present?
user.authenticate(password)
end
end
@@ -64,4 +70,9 @@ class User < ActiveRecord::Base
def create_profile
self.profile = Profile.create!(user: self)
end
+
+ def lowercase_account_fields
+ self.username.downcase! if self.username.present?
+ self.email.downcase! if self.email.present?
+ end
end
spec/models/user_spec.rb
@@ -10,6 +10,16 @@ describe User do
expect(saved_user.email).to eql(user.email)
expect(saved_user.password).to be_nil
end
+
+ it "lowercases the username" do
+ user = create(:user, username: "UpCASE")
+ expect(user.reload.username).to eql("upcase")
+ end
+
+ it "lowercases the email" do
+ user = create(:user, email: FFaker::Internet.email.upcase)
+ expect(user.reload.email).to eql(user.email.downcase)
+ end
end
describe "validations" do
@@ -93,7 +103,16 @@ describe User do
context "when credentials are correct" do
it "returns true" do
user = create(:user, password: "password", password_confirmation: "password")
- expect(User.authenticate(user.email, "password")).to eql(user)
+ expect(User.authenticate(user.email.upcase, "password")).to eql(user)
+ end
+
+ it "is case in-sensitive for username" do
+ user = create(:user,
+ username: "upcase",
+ password: "password",
+ password_confirmation: "password"
+ )
+ expect(User.authenticate("UPcase", "password")).to eql(user)
end
end