From e29ae67f315d0e2f49389a71ce60de0bc7bf8812 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Baz=C3=A1n?= Date: Sun, 16 Aug 2015 21:52:27 +0200 Subject: [PATCH] adds methods to add/remove official position --- app/models/user.rb | 9 +++++++++ db/schema.rb | 1 + spec/models/user_spec.rb | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/app/models/user.rb b/app/models/user.rb index 5b9c225f0..2b5b376bd 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -8,6 +8,7 @@ class User < ActiveRecord::Base validates :first_name, presence: true, unless: :use_nickname? validates :last_name, presence: true, unless: :use_nickname? validates :nickname, presence: true, if: :use_nickname? + validates :official_level, inclusion: {in: 0..5} def name use_nickname? ? nickname : "#{first_name} #{last_name}" @@ -29,4 +30,12 @@ class User < ActiveRecord::Base def official? official_level && official_level > 0 end + + def add_official_position!(position, level) + update official_position: position, official_level: level.to_i + end + + def remove_official_position! + update official_position: nil, official_level: 0 + end end diff --git a/db/schema.rb b/db/schema.rb index dd3698c4b..aa2a1f12d 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -12,6 +12,7 @@ # It's strongly recommended that you check this file into your version control system. ActiveRecord::Schema.define(version: 20150815154430) do + # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 2f247d3dc..37663239f 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -120,4 +120,36 @@ describe User do end end + describe "add_official_position!" do + it "is false when level not valid" do + expect(subject.add_official_position!("Boss", 89)).to be false + end + + it "updates official position fields" do + expect(subject).not_to be_official + subject.add_official_position!("Veterinarian", 2) + + expect(subject).to be_official + expect(subject.official_position).to eq("Veterinarian") + expect(subject.official_level).to eq(2) + + subject.add_official_position!("Brain surgeon", 3) + expect(subject.official_position).to eq("Brain surgeon") + expect(subject.official_level).to eq(3) + end + end + + describe "remove_official_position!" do + it "updates official position fields" do + subject.add_official_position!("Brain surgeon", 3) + expect(subject).to be_official + + subject.remove_official_position! + + expect(subject).not_to be_official + expect(subject.official_position).to be_nil + expect(subject.official_level).to eq(0) + end + end + end