]> git.openstreetmap.org Git - rails.git/blobdiff - vendor/plugins/classic_pagination/test/pagination_test.rb
Backporting the change that I made to the api06 branch to bring the classic_paginatio...
[rails.git] / vendor / plugins / classic_pagination / test / pagination_test.rb
diff --git a/vendor/plugins/classic_pagination/test/pagination_test.rb b/vendor/plugins/classic_pagination/test/pagination_test.rb
new file mode 100644 (file)
index 0000000..16a6f1d
--- /dev/null
@@ -0,0 +1,177 @@
+require File.dirname(__FILE__) + '/helper'
+require File.dirname(__FILE__) + '/../init'
+
+class PaginationTest < ActiveRecordTestCase
+  fixtures :topics, :replies, :developers, :projects, :developers_projects
+  
+  class PaginationController < ActionController::Base
+    if respond_to? :view_paths=
+      self.view_paths = [ "#{File.dirname(__FILE__)}/../fixtures/" ]
+    else
+      self.template_root = [ "#{File.dirname(__FILE__)}/../fixtures/" ]
+    end
+    
+    def simple_paginate
+      @topic_pages, @topics = paginate(:topics)
+      render :nothing => true
+    end
+    
+    def paginate_with_per_page
+      @topic_pages, @topics = paginate(:topics, :per_page => 1)
+      render :nothing => true
+    end
+    
+    def paginate_with_order
+      @topic_pages, @topics = paginate(:topics, :order => 'created_at asc')
+      render :nothing => true
+    end
+    
+    def paginate_with_order_by
+      @topic_pages, @topics = paginate(:topics, :order_by => 'created_at asc')
+      render :nothing => true
+    end
+    
+    def paginate_with_include_and_order
+      @topic_pages, @topics = paginate(:topics, :include => :replies, :order => 'replies.created_at asc, topics.created_at asc')
+      render :nothing => true
+    end
+    
+    def paginate_with_conditions
+      @topic_pages, @topics = paginate(:topics, :conditions => ["created_at > ?", 30.minutes.ago])
+      render :nothing => true
+    end
+    
+    def paginate_with_class_name
+      @developer_pages, @developers = paginate(:developers, :class_name => "DeVeLoPeR")
+      render :nothing => true
+    end
+    
+    def paginate_with_singular_name
+      @developer_pages, @developers = paginate()
+      render :nothing => true
+    end
+    
+    def paginate_with_joins
+      @developer_pages, @developers = paginate(:developers, 
+                                             :joins => 'LEFT JOIN developers_projects ON developers.id = developers_projects.developer_id',
+                                             :conditions => 'project_id=1')        
+      render :nothing => true
+    end
+    
+    def paginate_with_join
+      @developer_pages, @developers = paginate(:developers, 
+                                             :join => 'LEFT JOIN developers_projects ON developers.id = developers_projects.developer_id',
+                                             :conditions => 'project_id=1')        
+      render :nothing => true
+    end
+     
+    def paginate_with_join_and_count
+      @developer_pages, @developers = paginate(:developers, 
+                                             :join => 'd LEFT JOIN developers_projects ON d.id = developers_projects.developer_id',
+                                             :conditions => 'project_id=1',
+                                             :count => "d.id")        
+      render :nothing => true
+    end
+
+    def paginate_with_join_and_group
+      @developer_pages, @developers = paginate(:developers, 
+                                             :join => 'INNER JOIN developers_projects ON developers.id = developers_projects.developer_id',
+                                             :group => 'developers.id')
+      render :nothing => true
+    end
+    
+    def rescue_errors(e) raise e end
+
+    def rescue_action(e) raise end
+    
+  end
+  
+  def setup
+    @controller = PaginationController.new
+    @request    = ActionController::TestRequest.new
+    @response   = ActionController::TestResponse.new
+    super
+  end
+
+  # Single Action Pagination Tests
+
+  def test_simple_paginate
+    get :simple_paginate
+    assert_equal 1, assigns(:topic_pages).page_count
+    assert_equal 3, assigns(:topics).size
+  end
+  
+  def test_paginate_with_per_page
+    get :paginate_with_per_page
+    assert_equal 1, assigns(:topics).size
+    assert_equal 3, assigns(:topic_pages).page_count
+  end
+  
+  def test_paginate_with_order
+    get :paginate_with_order
+    expected = [topics(:futurama),
+               topics(:harvey_birdman),
+               topics(:rails)]
+    assert_equal expected, assigns(:topics)
+    assert_equal 1, assigns(:topic_pages).page_count
+  end
+  
+  def test_paginate_with_order_by
+    get :paginate_with_order
+    expected = assigns(:topics)
+    get :paginate_with_order_by
+    assert_equal expected, assigns(:topics)  
+    assert_equal 1, assigns(:topic_pages).page_count    
+  end
+  
+  def test_paginate_with_conditions
+    get :paginate_with_conditions
+    expected = [topics(:rails)]
+    assert_equal expected, assigns(:topics)
+    assert_equal 1, assigns(:topic_pages).page_count
+  end
+  
+  def test_paginate_with_class_name
+    get :paginate_with_class_name
+    
+    assert assigns(:developers).size > 0
+    assert_equal DeVeLoPeR, assigns(:developers).first.class
+  end
+      
+  def test_paginate_with_joins
+    get :paginate_with_joins
+    assert_equal 2, assigns(:developers).size
+    developer_names = assigns(:developers).map { |d| d.name }
+    assert developer_names.include?('David')
+    assert developer_names.include?('Jamis')
+  end
+  
+  def test_paginate_with_join_and_conditions
+    get :paginate_with_joins
+    expected = assigns(:developers)
+    get :paginate_with_join
+    assert_equal expected, assigns(:developers)
+  end
+  
+  def test_paginate_with_join_and_count
+    get :paginate_with_joins
+    expected = assigns(:developers)
+    get :paginate_with_join_and_count
+    assert_equal expected, assigns(:developers)
+  end
+  
+  def test_paginate_with_include_and_order
+    get :paginate_with_include_and_order
+    expected = Topic.find(:all, :include => 'replies', :order => 'replies.created_at asc, topics.created_at asc', :limit => 10)
+    assert_equal expected, assigns(:topics)
+  end
+
+  def test_paginate_with_join_and_group
+    get :paginate_with_join_and_group
+    assert_equal 2, assigns(:developers).size
+    assert_equal 2, assigns(:developer_pages).item_count
+    developer_names = assigns(:developers).map { |d| d.name }
+    assert developer_names.include?('David')
+    assert developer_names.include?('Jamis')
+  end
+end