diff test/unit/principal_test.rb @ 1526:404aa68d4227

Merge from live branch
author Chris Cannam
date Thu, 11 Sep 2014 12:46:20 +0100
parents dffacf8a6908
children
line wrap: on
line diff
--- a/test/unit/principal_test.rb	Mon Mar 17 08:57:04 2014 +0000
+++ b/test/unit/principal_test.rb	Thu Sep 11 12:46:20 2014 +0100
@@ -1,7 +1,7 @@
 # encoding: utf-8
 #
 # Redmine - project management software
-# Copyright (C) 2006-2012  Jean-Philippe Lang
+# Copyright (C) 2006-2014  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -31,8 +31,10 @@
   end
 
   def test_member_of_scope_should_return_the_union_of_all_members
-    projects = Project.find_all_by_id(1, 2)
-    assert_equal projects.map(&:principals).flatten.sort, Principal.member_of(projects).sort
+    projects = Project.find([1])
+    assert_equal [3, 2], Principal.member_of(projects).sort.map(&:id)
+    projects = Project.find([1, 2])
+    assert_equal [3, 2, 8, 11], Principal.member_of(projects).sort.map(&:id)
   end
 
   def test_member_of_scope_should_be_empty_for_no_projects
@@ -40,73 +42,73 @@
   end
 
   def test_not_member_of_scope_should_return_users_that_have_no_memberships
-    projects = Project.find_all_by_id(1, 2)
-    expected = (Principal.all - projects.map(&:memberships).flatten.map(&:principal)).sort
-    assert_equal expected, Principal.not_member_of(projects).sort
+    [[1], [1, 2]].each do |ids|
+      projects = Project.find(ids)
+      assert_equal ids.size, projects.count
+      expected = (Principal.all - projects.map(&:memberships).flatten.map(&:principal)).sort
+      assert_equal expected, Principal.not_member_of(projects).sort
+    end
   end
 
   def test_not_member_of_scope_should_be_empty_for_no_projects
     assert_equal [], Principal.not_member_of([]).sort
   end
 
-  context "#like" do
-    setup do
-      Principal.create!(:login => 'login')
-      Principal.create!(:login => 'login2')
+  def test_sorted_scope_should_sort_users_before_groups
+    scope = Principal.where("type <> ?", 'AnonymousUser')
+    expected_order = scope.all.sort do |a, b|
+      if a.is_a?(User) && b.is_a?(Group)
+        -1
+      elsif a.is_a?(Group) && b.is_a?(User)
+        1
+      else
+        a.name.downcase <=> b.name.downcase
+      end
+    end
+    assert_equal expected_order.map(&:name).map(&:downcase),
+                 scope.sorted.map(&:name).map(&:downcase)
+  end
 
-      Principal.create!(:firstname => 'firstname')
-      Principal.create!(:firstname => 'firstname2')
+  test "like scope should search login" do
+    results = Principal.like('jsmi')
 
-      Principal.create!(:lastname => 'lastname')
-      Principal.create!(:lastname => 'lastname2')
+    assert results.any?
+    assert results.all? {|u| u.login.match(/jsmi/i) }
+  end
 
-      Principal.create!(:mail => 'mail@example.com')
-      Principal.create!(:mail => 'mail2@example.com')
+  test "like scope should search firstname" do
+    results = Principal.like('john')
 
-      @palmer = Principal.create!(:firstname => 'David', :lastname => 'Palmer')
-    end
+    assert results.any?
+    assert results.all? {|u| u.firstname.match(/john/i) }
+  end
 
-    should "search login" do
-      results = Principal.like('login')
+  test "like scope should search lastname" do
+    results = Principal.like('smi')
 
-      assert_equal 2, results.count
-      assert results.all? {|u| u.login.match(/login/) }
-    end
+    assert results.any?
+    assert results.all? {|u| u.lastname.match(/smi/i) }
+  end
 
-    should "search firstname" do
-      results = Principal.like('firstname')
+  test "like scope should search mail" do
+    results = Principal.like('somenet')
 
-      assert_equal 2, results.count
-      assert results.all? {|u| u.firstname.match(/firstname/) }
-    end
+    assert results.any?
+    assert results.all? {|u| u.mail.match(/somenet/i) }
+  end
 
-    should "search lastname" do
-      results = Principal.like('lastname')
+  test "like scope should search firstname and lastname" do
+    results = Principal.like('john smi')
 
-      assert_equal 2, results.count
-      assert results.all? {|u| u.lastname.match(/lastname/) }
-    end
+    assert_equal 1, results.count
+    assert_equal User.find(2), results.first
+  end
 
-    should "search mail" do
-      results = Principal.like('mail')
+  test "like scope should search lastname and firstname" do
+    results = Principal.like('smith joh')
 
-      assert_equal 2, results.count
-      assert results.all? {|u| u.mail.match(/mail/) }
-    end
-
-    should "search firstname and lastname" do
-      results = Principal.like('david palm')
-
-      assert_equal 1, results.count
-      assert_equal @palmer, results.first
-    end
-
-    should "search lastname and firstname" do
-      results = Principal.like('palmer davi')
-
-      assert_equal 1, results.count
-      assert_equal @palmer, results.first
-    end
+    assert_equal 1, results.count
+    assert_equal User.find(2), results.first
   end
 
   def test_like_scope_with_cyrillic_name