kaminari-rspec 0.14.1 → 0.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +6 -14
- data/.gitignore +3 -1
- data/README.md +15 -8
- data/kaminari-rspec.gemspec +2 -2
- data/lib/kaminari_rspec/test_helpers.rb +38 -14
- data/lib/kaminari_rspec/version.rb +3 -1
- data/spec/lib/kaminari_rspec/flexmock/spec_helper_flexmock.rb +1 -0
- data/spec/lib/kaminari_rspec/rspec/spec_helper_rspec.rb +5 -0
- data/spec/lib/kaminari_rspec/rspec/test_helpers_spec.rb +8 -0
- data/spec/lib/kaminari_rspec/test_helpers_spec.rb +5 -37
- data/spec/spec_helper.rb +6 -2
- metadata +25 -25
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
YzJkYTY0ZmMwNzljNWI1MmQwMzExMTJhYjkzZjZmZmM0NzRlMmEzZGY3MjM0
|
10
|
-
MmFiMDM3M2U5ZGJiNDg0MWUyYjkzMTk0NjNjMzE0NzhjM2ZlNDEyNWI3N2Zj
|
11
|
-
ZDhkYWE0ZTQ4YTNlYjU5MGZkOTE1ODYyNDZmYjZiYzBkZTk3Yjk=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
MTU5YjMwYjJhYzVlOTc4YzA3MTY4YTM4MWRlY2MwNmU4MWU2NWZiYmJhOGM5
|
14
|
-
OTc5MDQ3NWU4YTk4MjY2OTdjMDUxZDZiNTdjM2RjYWYyMmM5Njc2NzNmMDEy
|
15
|
-
MDQzMTRjMzcyYTY1ZTNjNjEwNmI5NzdjMzc0NGJkOWM3ZGRmZTg=
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 56f7deeae8acd80adacd2543b50f4b9678b13946
|
4
|
+
data.tar.gz: 21176d5117f8185275cae357c2a8fd7f3399faeb
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 60d6345a21f3b339f085cd33dadaa7a56c0ab5c2871b8858fc65dcd763163bf1f5714ff0b5243619e1d06d00fbe46876ea26ce223f8ebe31441f07f9ba64ef36
|
7
|
+
data.tar.gz: df7b7a4cdeee8d71258e3699022e761e002236bdf80c012e76b2b1b47e8922fd9c316a30b8b0387c8bb98c7e150fa73adca9b2e5c76144cdb320d0c35502aec3
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
[](https://travis-ci.org/nessche/kaminari-rspec)
|
7
7
|
|
8
8
|
|
9
|
-
`kaminari-rspec` is a ruby gem that aims at simplifying writing the specs for views where Kaminari is used for pagination
|
9
|
+
`kaminari-rspec` is a ruby gem that aims at simplifying writing the specs for views where [Kaminari](https://github.com/amatsuda/kaminari) is used for pagination
|
10
10
|
|
11
11
|
## Installing
|
12
12
|
|
@@ -26,9 +26,9 @@ to fork this repo and update the version and the code as needed.
|
|
26
26
|
## Rendering views with RSpec's render_view
|
27
27
|
|
28
28
|
If you are rendering the views from your controller spec using render_views AND you are mocking
|
29
|
-
the data returned from the db with something along the lines of
|
29
|
+
the data returned from the db with something along the lines of (RSpec syntax)
|
30
30
|
|
31
|
-
Model.
|
31
|
+
allow(Model).to receive_message_chain(:order, :page, :per).and_return(model_mock)
|
32
32
|
|
33
33
|
you may want to also stub the methods needed by the pagination partials, in order to do that, just
|
34
34
|
add the following to your `spec_helper`
|
@@ -37,17 +37,23 @@ add the following to your `spec_helper`
|
|
37
37
|
|
38
38
|
and then modify your controller spec to look like
|
39
39
|
|
40
|
-
Model.
|
40
|
+
allow(Model).to receive_message_chain(:order, :page, :per).and_return(stub_pagination(model_mock))
|
41
41
|
|
42
|
-
the stubs will return the values needed to set the pagination as being on the
|
42
|
+
the stubs will return the values needed to set the pagination as being on the desired page, with the desired
|
43
|
+
total page count (see options below how to set these parameters).
|
43
44
|
|
44
45
|
### Pagination options
|
45
46
|
|
46
|
-
If specific pagination values are needed they can be defined using a hash
|
47
|
+
If specific pagination values are needed they can be defined using a hash passed as the second parameter to method
|
48
|
+
|
49
|
+
stub_pagination(resource, options = {})
|
50
|
+
|
51
|
+
The following values are supported:
|
47
52
|
|
48
53
|
* `:total_count` : the total number of elements to be paginated. It defaults to `resource.length` if resource is a collection,
|
49
54
|
otherwise to 1
|
50
|
-
* `:per_page` : the amount of elements per page, defaults to 25
|
55
|
+
* `:per_page` : the amount of elements per page, defaults to 25. If `resource` does not contain enough elements to fill
|
56
|
+
on page, no padding will occur. If `resource` contains more elements, only the first ones needed to fill the page will be shown
|
51
57
|
* `:current_page` : the current page of the pagination. Defaults to 1. Notice that `current_page` is anyway always
|
52
58
|
set such that it respects the values passed in `total_count` and `per_page`, i.e. if you pass a
|
53
59
|
total count of 95 and a per page value of 10, current page will be capped to 10
|
@@ -57,7 +63,8 @@ As an example
|
|
57
63
|
stub_pagination(resource, :total_count => 50, :current_page => 3, :per_page => 10)
|
58
64
|
|
59
65
|
will create the pagination links for a total count of 50 elements, with 10
|
60
|
-
elements per page and page 3 being the current_page.
|
66
|
+
elements per page and page 3 being the current_page. If `resource` contains more than 10
|
67
|
+
elements, only the first 10 will be shown.
|
61
68
|
|
62
69
|
## Detecting mocking framework
|
63
70
|
|
data/kaminari-rspec.gemspec
CHANGED
@@ -20,8 +20,8 @@ Gem::Specification.new do |s|
|
|
20
20
|
|
21
21
|
|
22
22
|
# specify any dependencies here; for example:
|
23
|
-
s.add_runtime_dependency 'kaminari', '0.
|
24
|
-
s.add_development_dependency 'rspec'
|
23
|
+
s.add_runtime_dependency 'kaminari', '~> 0.16'
|
24
|
+
s.add_development_dependency 'rspec', '~> 3'
|
25
25
|
s.add_development_dependency 'rake'
|
26
26
|
s.add_development_dependency 'yard'
|
27
27
|
s.add_development_dependency 'rr'
|
@@ -1,39 +1,63 @@
|
|
1
|
+
require 'kaminari'
|
2
|
+
require 'kaminari/models/array_extension'
|
3
|
+
|
1
4
|
module KaminariRspec
|
5
|
+
|
6
|
+
|
2
7
|
module TestHelpers
|
3
8
|
|
9
|
+
# Stubs the paginations method on the resource passed.
|
10
|
+
#
|
11
|
+
# @param resource [Object] A single object or a collection of objects
|
12
|
+
# @param options [Hash] The options controlling the stub behaviour
|
13
|
+
# @option options [String] :mock the mocking framework to be used, defaults to automatic detection based on RSpec configuration
|
14
|
+
# @option options [Integer] :current_page the desired current page number. Defaults to 1
|
15
|
+
# @option options [Integer] :per_page the desired amount of elements per page. Defaults to 25
|
16
|
+
# @option options [Integer] :total_count the desired total amount of elements (used to calculate the last page link)
|
4
17
|
def stub_pagination(resource, options={})
|
5
18
|
return nil unless resource
|
19
|
+
options[:current_page] ||= 1
|
20
|
+
options[:per_page] ||= 25
|
6
21
|
mock_framework = options[:mock] || discover_mock_framework
|
7
22
|
values = calculate_values(resource, options)
|
23
|
+
wrapped_resource = wrap_resource(resource, options)
|
8
24
|
case mock_framework
|
9
|
-
when :rspec then stub_pagination_with_rspec(
|
10
|
-
when :rr then stub_pagination_with_rr(
|
11
|
-
when :mocha then stub_pagination_with_mocha(
|
12
|
-
when :flexmock then stub_pagination_with_flexmock(
|
25
|
+
when :rspec then stub_pagination_with_rspec(wrapped_resource, values)
|
26
|
+
when :rr then stub_pagination_with_rr(wrapped_resource, values)
|
27
|
+
when :mocha then stub_pagination_with_mocha(wrapped_resource, values)
|
28
|
+
when :flexmock then stub_pagination_with_flexmock(wrapped_resource, values)
|
13
29
|
when :nothing then resource
|
14
30
|
else
|
15
31
|
raise ArgumentError, "Invalid mock argument #{options[:mock]} / framework not supported"
|
16
32
|
end
|
17
33
|
end
|
18
34
|
|
35
|
+
private
|
36
|
+
|
19
37
|
def discover_mock_framework
|
20
38
|
|
21
39
|
mock_framework = RSpec.configuration.mock_framework
|
22
40
|
return mock_framework.framework_name if mock_framework.respond_to? :framework_name
|
23
41
|
puts('WARNING: Could not detect mocking framework, defaulting to :nothing, use :mock option to override')
|
24
|
-
|
42
|
+
:nothing
|
43
|
+
|
44
|
+
end
|
25
45
|
|
46
|
+
def wrap_resource(resource, options)
|
47
|
+
return resource if resource.respond_to? :total_count
|
48
|
+
wrappable = resource.respond_to?(:length) ? resource : [resource]
|
49
|
+
Kaminari::paginate_array(wrappable).page(1).per([wrappable.length, options[:per_page]].min)
|
26
50
|
end
|
27
51
|
|
28
52
|
|
29
|
-
def calculate_values(resource, options
|
53
|
+
def calculate_values(resource, options)
|
30
54
|
|
31
55
|
values = {}
|
32
56
|
values[:total_count] = options[:total_count] || (resource.respond_to?(:length) ? resource.length : 1)
|
33
|
-
values[:
|
34
|
-
values[:total_pages] = (values[:total_count] / values[:
|
35
|
-
values[:current_page] = [
|
36
|
-
|
57
|
+
values[:limit] = options[:per_page]
|
58
|
+
values[:total_pages] = (values[:total_count] / values[:limit]) + ((values[:total_count] % values[:limit]) == 0 ? 0 : 1)
|
59
|
+
values[:current_page] = [options[:current_page], values[:total_pages]].min
|
60
|
+
values
|
37
61
|
end
|
38
62
|
|
39
63
|
def stub_pagination_with_rspec(resource, values)
|
@@ -42,7 +66,7 @@ module KaminariRspec
|
|
42
66
|
allow(resource).to receive(key).and_return(value)
|
43
67
|
end
|
44
68
|
|
45
|
-
|
69
|
+
resource
|
46
70
|
|
47
71
|
end
|
48
72
|
|
@@ -52,7 +76,7 @@ module KaminariRspec
|
|
52
76
|
eval "stub(resource).#{key} { #{value} }"
|
53
77
|
end
|
54
78
|
|
55
|
-
|
79
|
+
resource
|
56
80
|
|
57
81
|
end
|
58
82
|
|
@@ -62,7 +86,7 @@ module KaminariRspec
|
|
62
86
|
resource.stubs(key).returns(value)
|
63
87
|
end
|
64
88
|
|
65
|
-
|
89
|
+
resource
|
66
90
|
|
67
91
|
end
|
68
92
|
|
@@ -74,7 +98,7 @@ module KaminariRspec
|
|
74
98
|
mock.should_receive(key).zero_or_more_times.and_return(value)
|
75
99
|
end
|
76
100
|
|
77
|
-
|
101
|
+
mock
|
78
102
|
|
79
103
|
end
|
80
104
|
|
@@ -40,6 +40,14 @@ describe 'KaminariRspec::TestHelpers::' do
|
|
40
40
|
discover_mock_framework.should == :rspec
|
41
41
|
end
|
42
42
|
|
43
|
+
it 'should correctly mock the pagination' do
|
44
|
+
resource = [Object.new, Object.new]
|
45
|
+
stubbed_resource = stub_pagination(resource, total_count: 45, current_page: 3, per_page: 10)
|
46
|
+
expect(stubbed_resource.total_count).to eq(45)
|
47
|
+
expect(stubbed_resource.current_page).to eq(3)
|
48
|
+
|
49
|
+
end
|
50
|
+
|
43
51
|
end
|
44
52
|
|
45
53
|
end
|
@@ -13,7 +13,7 @@ describe 'KaminariRspec::TestHelpers' do
|
|
13
13
|
|
14
14
|
it 'sets total_count to 1' do
|
15
15
|
|
16
|
-
values = calculate_values(Object.new)
|
16
|
+
values = calculate_values(Object.new, current_page: 1, per_page: 25)
|
17
17
|
values[:total_count].should == 1
|
18
18
|
|
19
19
|
end
|
@@ -24,7 +24,7 @@ describe 'KaminariRspec::TestHelpers' do
|
|
24
24
|
|
25
25
|
it 'sets total_count to the length of the object' do
|
26
26
|
|
27
|
-
values = calculate_values([ Object.new, Object.new])
|
27
|
+
values = calculate_values([ Object.new, Object.new], current_page: 1, per_page: 25)
|
28
28
|
values[:total_count].should == 2
|
29
29
|
|
30
30
|
end
|
@@ -38,51 +38,18 @@ describe 'KaminariRspec::TestHelpers' do
|
|
38
38
|
|
39
39
|
it 'sets the total_count to the specified value' do
|
40
40
|
|
41
|
-
values = calculate_values(Object.new, :total_count
|
41
|
+
values = calculate_values(Object.new, current_page: 1, total_count: 13, per_page: 25)
|
42
42
|
values[:total_count].should == 13
|
43
43
|
|
44
44
|
end
|
45
45
|
|
46
46
|
end
|
47
47
|
|
48
|
-
context 'when per_page is not specified' do
|
49
|
-
|
50
|
-
it 'set per_page to the default of 25' do
|
51
|
-
|
52
|
-
values = calculate_values(Object.new)
|
53
|
-
values[:limit_value].should == 25
|
54
|
-
|
55
|
-
end
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
context 'when per_page is specified' do
|
60
|
-
|
61
|
-
it 'sets limit_value to the specified value' do
|
62
|
-
|
63
|
-
values = calculate_values(Object.new, :per_page => 17)
|
64
|
-
values[:limit_value].should == 17
|
65
|
-
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|
69
|
-
|
70
48
|
it 'sets total_pages based on total_count and per_page' do
|
71
|
-
values = calculate_values(Object.new, :total_count => 50, :per_page => 25)
|
49
|
+
values = calculate_values(Object.new, current_page: 1, :total_count => 50, :per_page => 25)
|
72
50
|
values[:total_pages].should == 2
|
73
51
|
end
|
74
52
|
|
75
|
-
context 'when current_page is not specified' do
|
76
|
-
|
77
|
-
it 'set current_page to the default of 1' do
|
78
|
-
|
79
|
-
values = calculate_values(Object.new)
|
80
|
-
values[:current_page].should == 1
|
81
|
-
|
82
|
-
end
|
83
|
-
|
84
|
-
end
|
85
|
-
|
86
53
|
context 'when current_page is specified' do
|
87
54
|
|
88
55
|
context 'and the current_page value is <= num_pages'do
|
@@ -108,6 +75,7 @@ describe 'KaminariRspec::TestHelpers' do
|
|
108
75
|
end
|
109
76
|
|
110
77
|
end
|
78
|
+
|
111
79
|
end
|
112
80
|
|
113
81
|
|
data/spec/spec_helper.rb
CHANGED
@@ -6,6 +6,10 @@ require 'rspec'
|
|
6
6
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
7
7
|
|
8
8
|
RSpec.configure do |config|
|
9
|
-
config.
|
10
|
-
config.formatter
|
9
|
+
config.color = true
|
10
|
+
config.formatter = 'documentation'
|
11
|
+
|
12
|
+
config.expect_with :rspec do |c|
|
13
|
+
c.syntax = [:should, :expect]
|
14
|
+
end
|
11
15
|
end
|
metadata
CHANGED
@@ -1,111 +1,111 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kaminari-rspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.16.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marco Sandrini
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-12-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: kaminari
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: '0.16'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: '0.16'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rspec
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '3'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '3'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: yard
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rr
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: mocha
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: flexmock
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
description: A Rspec Helper library for the Kaminari gem
|
@@ -115,8 +115,8 @@ executables: []
|
|
115
115
|
extensions: []
|
116
116
|
extra_rdoc_files: []
|
117
117
|
files:
|
118
|
-
- .gitignore
|
119
|
-
- .travis.yml
|
118
|
+
- ".gitignore"
|
119
|
+
- ".travis.yml"
|
120
120
|
- Gemfile
|
121
121
|
- License.txt
|
122
122
|
- README.md
|
@@ -145,17 +145,17 @@ require_paths:
|
|
145
145
|
- lib
|
146
146
|
required_ruby_version: !ruby/object:Gem::Requirement
|
147
147
|
requirements:
|
148
|
-
- -
|
148
|
+
- - ">="
|
149
149
|
- !ruby/object:Gem::Version
|
150
150
|
version: '0'
|
151
151
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
152
152
|
requirements:
|
153
|
-
- -
|
153
|
+
- - ">="
|
154
154
|
- !ruby/object:Gem::Version
|
155
155
|
version: '0'
|
156
156
|
requirements: []
|
157
157
|
rubyforge_project:
|
158
|
-
rubygems_version: 2.
|
158
|
+
rubygems_version: 2.2.2
|
159
159
|
signing_key:
|
160
160
|
specification_version: 4
|
161
161
|
summary: A Rspec Helper library for the Kaminari gem
|