Skip to content

Commit

Permalink
Fixed bug in activity_user where users with only a first name or surn…
Browse files Browse the repository at this point in the history
…ame (but not both) would not be found.
  • Loading branch information
steveyken committed May 18, 2012
1 parent 85086f8 commit f64d8cb
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 15 deletions.
26 changes: 12 additions & 14 deletions app/controllers/home_controller.rb
Expand Up @@ -128,20 +128,19 @@ def activity_event
#----------------------------------------------------------------------------
def activity_user
user = @current_user.pref[:activity_user]
if user && user != "all users"
user = if user =~ /\s/ # first_name middle_name last_name any_name
name_query = if user.include?(" ")
user.name_permutations.map{ |first, last|
"(upper(first_name) LIKE upper('%#{first}%') AND upper(last_name) LIKE upper('%#{last}%'))"
}.join(" OR ")
else
"upper(first_name) LIKE upper('%#{user}%') OR upper(last_name) LIKE upper('%#{user}%')"
if user && user != "all_users"
user = if user =~ /@/ # email
User.where(:email => user).first
else # first_name middle_name last_name any_name
name_query = if user.include?(" ")
user.name_permutations.map{ |first, last|
"(upper(first_name) LIKE upper('%#{first}%') AND upper(last_name) LIKE upper('%#{last}%'))"
}.join(" OR ")
else
"upper(first_name) LIKE upper('%#{user}%') OR upper(last_name) LIKE upper('%#{user}%')"
end
User.where(name_query).first
end

User.where(name_query).first
elsif user =~ /@/ # email
User.where(:email => user).first
end
end
user.is_a?(User) ? user.id : nil
end
Expand All @@ -158,4 +157,3 @@ def activity_duration
end

end

38 changes: 37 additions & 1 deletion spec/controllers/home_controller_spec.rb
Expand Up @@ -94,6 +94,42 @@
session[:hello].should == true
end
end

describe "activity_user" do

before(:each) do
@user = mock(User, :id => 1, :is_a? => true)
@cur_user = mock(User)
end

it "should find a user by email" do
@cur_user.stub!(:pref).and_return(:activity_user => 'billy@example.com')
controller.instance_variable_set(:@current_user, @cur_user)
User.should_receive(:where).with(:email => 'billy@example.com').and_return([@user])
controller.send(:activity_user).should == 1
end

it "should find a user by first name or last name" do
@cur_user.stub!(:pref).and_return(:activity_user => 'Billy')
controller.instance_variable_set(:@current_user, @cur_user)
User.should_receive(:where).with("upper(first_name) LIKE upper('%Billy%') OR upper(last_name) LIKE upper('%Billy%')").and_return([@user])
controller.send(:activity_user).should == 1
end

it "should find a user by first name and last name" do
@cur_user.stub!(:pref).and_return(:activity_user => 'Billy Elliot')
controller.instance_variable_set(:@current_user, @cur_user)
User.should_receive(:where).with("(upper(first_name) LIKE upper('%Billy%') AND upper(last_name) LIKE upper('%Elliot%')) OR (upper(first_name) LIKE upper('%Elliot%') AND upper(last_name) LIKE upper('%Billy%'))").and_return([@user])
controller.send(:activity_user).should == 1
end

it "should return nil when 'all_users' is specified" do
@cur_user.stub!(:pref).and_return(:activity_user => 'all_users')
controller.instance_variable_set(:@current_user, @cur_user)
User.should_not_receive(:where)
controller.send(:activity_user).should == nil
end

end

end

0 comments on commit f64d8cb

Please sign in to comment.