From 72c33330cf2f99d729fc815df2d7ef29a4ea564b Mon Sep 17 00:00:00 2001 From: kikito Date: Thu, 6 Aug 2015 16:53:18 +0200 Subject: [PATCH] Adds nickname-related validations & name to User --- app/models/user.rb | 6 +++++- spec/models/user_spec.rb | 46 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/app/models/user.rb b/app/models/user.rb index da1c3ab8d..2c0c2756b 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -2,7 +2,11 @@ class User < ActiveRecord::Base devise :database_authenticatable, :registerable, :confirmable, :recoverable, :rememberable, :trackable, :validatable + validates :first_name, presence: true, unless: :use_nickname? + validates :last_name, presence: true, unless: :use_nickname? + validates :nickname, presence: true, if: :use_nickname? + def name - "#{first_name} #{last_name}" + use_nickname? ? nickname : "#{first_name} #{last_name}" end end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 80c91c2d4..bad3ac182 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -1,4 +1,50 @@ require 'rails_helper' describe User do + subject { build(:user) } + + it "is valid" do + expect(subject).to be_valid + end + + describe 'use_nickname' do + describe 'when true' do + before { subject.use_nickname = true } + + it "activates the validation of nickname" do + subject.nickname = nil + expect(subject).to_not be_valid + + subject.nickname = "dredd" + expect(subject).to be_valid + end + + it "calculates the name using the nickname" do + subject.nickname = "dredd" + expect(subject.name).to eq("dredd") + end + end + + describe 'when false' do + before { subject.use_nickname = false } + + it "activates the validation of first_name and last_name" do + subject.first_name = nil + subject.last_name = nil + expect(subject).to_not be_valid + + subject.first_name = "Joseph" + subject.last_name = "Dredd" + expect(subject).to be_valid + end + + it "calculates the name using first_name and last_name" do + subject.first_name = "Joseph" + subject.last_name = "Dredd" + expect(subject.name).to eq("Joseph Dredd") + end + end + end + + end