From 157cd001d5bf2e014a7e87e1791b081f2f788db4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Mart=C3=ADn?= Date: Sat, 28 Jul 2018 21:28:22 +0200 Subject: [PATCH 1/2] Add spec to expose a bug finding manager logged in I've moved the method to the User model in order to make it easier to test. I'm not sure where it belongs, though. There was already a failing spec in `spec/features/management_spec.rb`, but it passed if run standalone because it only failed if previous tests had already created nine users or more. --- app/controllers/management/base_controller.rb | 2 +- app/models/user.rb | 4 ++++ spec/models/user_spec.rb | 13 +++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/app/controllers/management/base_controller.rb b/app/controllers/management/base_controller.rb index 1bae36a76..ba8ece9f2 100644 --- a/app/controllers/management/base_controller.rb +++ b/app/controllers/management/base_controller.rb @@ -56,7 +56,7 @@ class Management::BaseController < ActionController::Base def manager_logged_in if current_manager - @manager_logged_in = User.find_by(id: session[:manager]["login"].last(1)) + @manager_logged_in = User.find_by_manager_login(session[:manager]["login"]) end end diff --git a/app/models/user.rb b/app/models/user.rb index 4b999207d..604132857 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -329,6 +329,10 @@ class User < ActiveRecord::Base where(conditions.to_hash).where(["username = ?", login]).first end + def self.find_by_manager_login(manager_login) + find_by(id: manager_login.last(1)) + end + def interests followables = follows.map(&:followable) followables.compact.map { |followable| followable.tags.map(&:name) }.flatten.compact.uniq diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index c201fc03c..1d860e121 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -690,4 +690,17 @@ describe User do end + describe ".find_by_manager_login" do + it "works with a low ID" do + user = create(:user) + expect(User.find_by_manager_login("admin_user_#{user.id}")).to eq user + end + + it "works with a high ID" do + 10.times { create(:user) } + user = User.last + expect(User.find_by_manager_login("admin_user_#{user.id}")).to eq user + end + end + end From 3b820571789bf86b2c769a006933ac525cb6909d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Mart=C3=ADn?= Date: Sat, 28 Jul 2018 21:43:51 +0200 Subject: [PATCH 2/2] Fix admin menu not showing for some admins There was a bug when finding the manager login, since we were only using the last digit of their user ID. --- app/models/user.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/user.rb b/app/models/user.rb index 604132857..3a274f056 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -330,7 +330,7 @@ class User < ActiveRecord::Base end def self.find_by_manager_login(manager_login) - find_by(id: manager_login.last(1)) + find_by(id: manager_login.split("_").last) end def interests