summaryrefslogtreecommitdiff
path: root/vendor/plugins/will_paginate/test/lib
diff options
context:
space:
mode:
authorhukl <contact@smyck.org>2009-02-17 12:47:49 +0100
committerhukl <contact@smyck.org>2009-02-17 12:47:49 +0100
commit3cdcb5ca02a94b2b342c30903a27d47d35d46e55 (patch)
treeef3e1154fe262561b3955c07edcaee3824a21f47 /vendor/plugins/will_paginate/test/lib
parent7a282f2605f6fb3689940e5c7072b4801653deb2 (diff)
added will_paginate plugin
Diffstat (limited to 'vendor/plugins/will_paginate/test/lib')
-rw-r--r--vendor/plugins/will_paginate/test/lib/activerecord_test_case.rb36
-rw-r--r--vendor/plugins/will_paginate/test/lib/activerecord_test_connector.rb75
-rw-r--r--vendor/plugins/will_paginate/test/lib/load_fixtures.rb11
-rw-r--r--vendor/plugins/will_paginate/test/lib/view_test_process.rb171
4 files changed, 293 insertions, 0 deletions
diff --git a/vendor/plugins/will_paginate/test/lib/activerecord_test_case.rb b/vendor/plugins/will_paginate/test/lib/activerecord_test_case.rb
new file mode 100644
index 0000000..8f66ebe
--- /dev/null
+++ b/vendor/plugins/will_paginate/test/lib/activerecord_test_case.rb
@@ -0,0 +1,36 @@
1require 'lib/activerecord_test_connector'
2
3class ActiveRecordTestCase < Test::Unit::TestCase
4 # Set our fixture path
5 if ActiveRecordTestConnector.able_to_connect
6 self.fixture_path = File.join(File.dirname(__FILE__), '..', 'fixtures')
7 self.use_transactional_fixtures = true
8 end
9
10 def self.fixtures(*args)
11 super if ActiveRecordTestConnector.connected
12 end
13
14 def run(*args)
15 super if ActiveRecordTestConnector.connected
16 end
17
18 # Default so Test::Unit::TestCase doesn't complain
19 def test_truth
20 end
21
22 protected
23
24 def assert_queries(num = 1)
25 $query_count = 0
26 yield
27 ensure
28 assert_equal num, $query_count, "#{$query_count} instead of #{num} queries were executed."
29 end
30
31 def assert_no_queries(&block)
32 assert_queries(0, &block)
33 end
34end
35
36ActiveRecordTestConnector.setup
diff --git a/vendor/plugins/will_paginate/test/lib/activerecord_test_connector.rb b/vendor/plugins/will_paginate/test/lib/activerecord_test_connector.rb
new file mode 100644
index 0000000..1130cf5
--- /dev/null
+++ b/vendor/plugins/will_paginate/test/lib/activerecord_test_connector.rb
@@ -0,0 +1,75 @@
1require 'active_record'
2require 'active_record/version'
3require 'active_record/fixtures'
4
5class ActiveRecordTestConnector
6 cattr_accessor :able_to_connect
7 cattr_accessor :connected
8
9 FIXTURES_PATH = File.join(File.dirname(__FILE__), '..', 'fixtures')
10
11 # Set our defaults
12 self.connected = false
13 self.able_to_connect = true
14
15 def self.setup
16 unless self.connected || !self.able_to_connect
17 setup_connection
18 load_schema
19 add_load_path FIXTURES_PATH
20 self.connected = true
21 end
22 rescue Exception => e # errors from ActiveRecord setup
23 $stderr.puts "\nSkipping ActiveRecord tests: #{e}\n\n"
24 self.able_to_connect = false
25 end
26
27 private
28
29 def self.add_load_path(path)
30 dep = defined?(ActiveSupport::Dependencies) ? ActiveSupport::Dependencies : ::Dependencies
31 dep.load_paths.unshift path
32 end
33
34 def self.setup_connection
35 db = ENV['DB'].blank?? 'sqlite3' : ENV['DB']
36
37 configurations = YAML.load_file(File.join(File.dirname(__FILE__), '..', 'database.yml'))
38 raise "no configuration for '#{db}'" unless configurations.key? db
39 configuration = configurations[db]
40
41 ActiveRecord::Base.logger = Logger.new(STDOUT) if $0 == 'irb'
42 puts "using #{configuration['adapter']} adapter" unless ENV['DB'].blank?
43
44 gem 'sqlite3-ruby' if 'sqlite3' == db
45
46 ActiveRecord::Base.establish_connection(configuration)
47 ActiveRecord::Base.configurations = { db => configuration }
48 prepare ActiveRecord::Base.connection
49
50 unless Object.const_defined?(:QUOTED_TYPE)
51 Object.send :const_set, :QUOTED_TYPE, ActiveRecord::Base.connection.quote_column_name('type')
52 end
53 end
54
55 def self.load_schema
56 ActiveRecord::Base.silence do
57 ActiveRecord::Migration.verbose = false
58 load File.join(FIXTURES_PATH, 'schema.rb')
59 end
60 end
61
62 def self.prepare(conn)
63 class << conn
64 IGNORED_SQL = [/^PRAGMA/, /^SELECT currval/, /^SELECT CAST/, /^SELECT @@IDENTITY/, /^SELECT @@ROWCOUNT/, /^SHOW FIELDS /]
65
66 def execute_with_counting(sql, name = nil, &block)
67 $query_count ||= 0
68 $query_count += 1 unless IGNORED_SQL.any? { |r| sql =~ r }
69 execute_without_counting(sql, name, &block)
70 end
71
72 alias_method_chain :execute, :counting
73 end
74 end
75end
diff --git a/vendor/plugins/will_paginate/test/lib/load_fixtures.rb b/vendor/plugins/will_paginate/test/lib/load_fixtures.rb
new file mode 100644
index 0000000..10d6f42
--- /dev/null
+++ b/vendor/plugins/will_paginate/test/lib/load_fixtures.rb
@@ -0,0 +1,11 @@
1require 'boot'
2require 'lib/activerecord_test_connector'
3
4# setup the connection
5ActiveRecordTestConnector.setup
6
7# load all fixtures
8Fixtures.create_fixtures(ActiveRecordTestConnector::FIXTURES_PATH, ActiveRecord::Base.connection.tables)
9
10require 'will_paginate'
11WillPaginate.enable_activerecord
diff --git a/vendor/plugins/will_paginate/test/lib/view_test_process.rb b/vendor/plugins/will_paginate/test/lib/view_test_process.rb
new file mode 100644
index 0000000..508411e
--- /dev/null
+++ b/vendor/plugins/will_paginate/test/lib/view_test_process.rb
@@ -0,0 +1,171 @@
1require 'action_controller'
2require 'action_controller/test_process'
3
4require 'will_paginate'
5WillPaginate.enable_actionpack
6
7ActionController::Routing::Routes.draw do |map|
8 map.connect 'dummy/page/:page', :controller => 'dummy'
9 map.connect 'dummy/dots/page.:page', :controller => 'dummy', :action => 'dots'
10 map.connect 'ibocorp/:page', :controller => 'ibocorp',
11 :requirements => { :page => /\d+/ },
12 :defaults => { :page => 1 }
13
14 map.connect ':controller/:action/:id'
15end
16
17ActionController::Base.perform_caching = false
18
19class WillPaginate::ViewTestCase < Test::Unit::TestCase
20 def setup
21 super
22 @controller = DummyController.new
23 @request = @controller.request
24 @html_result = nil
25 @template = '<%= will_paginate collection, options %>'
26
27 @view = ActionView::Base.new
28 @view.assigns['controller'] = @controller
29 @view.assigns['_request'] = @request
30 @view.assigns['_params'] = @request.params
31 end
32
33 def test_no_complain; end
34
35 protected
36
37 def paginate(collection = {}, options = {}, &block)
38 if collection.instance_of? Hash
39 page_options = { :page => 1, :total_entries => 11, :per_page => 4 }.merge(collection)
40 collection = [1].paginate(page_options)
41 end
42
43 locals = { :collection => collection, :options => options }
44
45 unless @view.respond_to? :render_template
46 # Rails 2.2
47 @html_result = ActionView::InlineTemplate.new(@template).render(@view, locals)
48 else
49 if defined? ActionView::InlineTemplate
50 # Rails 2.1
51 args = [ ActionView::InlineTemplate.new(@view, @template, locals) ]
52 else
53 # older Rails versions
54 args = [nil, @template, nil, locals]
55 end
56
57 @html_result = @view.render_template(*args)
58 end
59
60 @html_document = HTML::Document.new(@html_result, true, false)
61
62 if block_given?
63 classname = options[:class] || WillPaginate::ViewHelpers.pagination_options[:class]
64 assert_select("div.#{classname}", 1, 'no main DIV', &block)
65 end
66 end
67
68 def response_from_page_or_rjs
69 @html_document.root
70 end
71
72 def validate_page_numbers expected, links, param_name = :page
73 param_pattern = /\W#{CGI.escape(param_name.to_s)}=([^&]*)/
74
75 assert_equal(expected, links.map { |e|
76 e['href'] =~ param_pattern
77 $1 ? $1.to_i : $1
78 })
79 end
80
81 def assert_links_match pattern, links = nil, numbers = nil
82 links ||= assert_select 'div.pagination a[href]' do |elements|
83 elements
84 end
85
86 pages = [] if numbers
87
88 links.each do |el|
89 assert_match pattern, el['href']
90 if numbers
91 el['href'] =~ pattern
92 pages << ($1.nil?? nil : $1.to_i)
93 end
94 end
95
96 assert_equal numbers, pages, "page numbers don't match" if numbers
97 end
98
99 def assert_no_links_match pattern
100 assert_select 'div.pagination a[href]' do |elements|
101 elements.each do |el|
102 assert_no_match pattern, el['href']
103 end
104 end
105 end
106end
107
108class DummyRequest
109 attr_accessor :symbolized_path_parameters
110
111 def initialize
112 @get = true
113 @params = {}
114 @symbolized_path_parameters = { :controller => 'foo', :action => 'bar' }
115 end
116
117 def get?
118 @get
119 end
120
121 def post
122 @get = false
123 end
124
125 def relative_url_root
126 ''
127 end
128
129 def params(more = nil)
130 @params.update(more) if more
131 @params
132 end
133end
134
135class DummyController
136 attr_reader :request
137 attr_accessor :controller_name
138
139 def initialize
140 @request = DummyRequest.new
141 @url = ActionController::UrlRewriter.new(@request, @request.params)
142 end
143
144 def params
145 @request.params
146 end
147
148 def url_for(params)
149 @url.rewrite(params)
150 end
151end
152
153module HTML
154 Node.class_eval do
155 def inner_text
156 children.map(&:inner_text).join('')
157 end
158 end
159
160 Text.class_eval do
161 def inner_text
162 self.to_s
163 end
164 end
165
166 Tag.class_eval do
167 def inner_text
168 childless?? '' : super
169 end
170 end
171end