From 3ef3b6985ff6302f8f7df435cb5c76001df94f94 Mon Sep 17 00:00:00 2001 From: Thor77 Date: Tue, 23 Apr 2019 10:46:36 +0200 Subject: [PATCH 1/3] Add spec for custom username validation --- spec/models/user_spec.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index c4ab25f..c3ee007 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -7,6 +7,12 @@ RSpec.describe User, type: :model do it { should have_many :tournaments } end + describe 'validation' do + subject { create(:user) } + it { should validate_presence_of :username } + it { should validate_uniqueness_of(:username).case_insensitive } + end + it 'has a valid factory' do expect(build(:user)).to be_valid end From 22e547befaf8a11ed6246a18abf237b72c2bb503 Mon Sep 17 00:00:00 2001 From: Thor77 Date: Tue, 23 Apr 2019 10:47:50 +0200 Subject: [PATCH 2/3] Add validatable attribute to User model to get email and password (existence) validation --- app/models/user.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index c9104ff..a45995e 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -4,11 +4,11 @@ class User < ApplicationRecord extend Devise::Models devise :database_authenticatable, :registerable, - :recoverable, :rememberable, :trackable + :recoverable, :rememberable, :trackable, :validatable include DeviseTokenAuth::Concerns::User - validates :username, presence: true, uniqueness: true + validates :username, presence: true, uniqueness: { case_sensitive: false } has_many :tournaments, dependent: :destroy end From 847f4a1c6978594f74818ad48e47485791aba2c4 Mon Sep 17 00:00:00 2001 From: Thor77 Date: Tue, 23 Apr 2019 10:48:25 +0200 Subject: [PATCH 3/3] Add password to User factory --- spec/factories/users.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/spec/factories/users.rb b/spec/factories/users.rb index 42cb303..196c94f 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -4,5 +4,6 @@ FactoryBot.define do factory :user do username { Faker::Internet.unique.username } email { Faker::Internet.unique.email } + password { Faker::Internet.password } end end