File: pagination_test.rb

package info (click to toggle)
ruby-active-model-serializers 0.10.12-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,752 kB
  • sloc: ruby: 13,138; sh: 53; makefile: 6
file content (126 lines) | stat: -rw-r--r-- 6,614 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# frozen_string_literal: true

require 'test_helper'
require 'will_paginate/array'
require 'kaminari'
require 'kaminari/hooks'
::Kaminari::Hooks.init

module ActionController
  module Serialization
    class JsonApi
      class PaginationTest < ActionController::TestCase
        KAMINARI_URI = 'http://test.host/action_controller/serialization/json_api/pagination_test/pagination_test/render_pagination_using_kaminari'.freeze
        WILL_PAGINATE_URI = 'http://test.host/action_controller/serialization/json_api/pagination_test/pagination_test/render_pagination_using_will_paginate'.freeze

        class PaginationTestController < ActionController::Base
          def setup
            @array = [
              Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1'),
              Profile.new(name: 'Name 2', description: 'Description 2', comments: 'Comments 2'),
              Profile.new(name: 'Name 3', description: 'Description 3', comments: 'Comments 3')
            ]
          end

          def using_kaminari
            setup
            Kaminari.paginate_array(@array).page(params[:page][:number]).per(params[:page][:size])
          end

          def using_will_paginate
            setup
            @array.paginate(page: params[:page][:number], per_page: params[:page][:size])
          end

          def render_pagination_using_kaminari
            render json: using_kaminari, adapter: :json_api
          end

          def render_pagination_using_will_paginate
            render json: using_will_paginate, adapter: :json_api
          end

          def render_array_without_pagination_links
            setup
            render json: @array, adapter: :json_api
          end
        end

        tests PaginationTestController

        def test_render_pagination_links_with_will_paginate
          expected_links = { 'self' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=1",
                             'first' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
                             'prev' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
                             'next' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1",
                             'last' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1" }

          get :render_pagination_using_will_paginate, params: { page: { number: 2, size: 1 } }
          response = JSON.parse(@response.body)
          assert_equal expected_links, response['links']
        end

        def test_render_only_first_last_and_next_pagination_links
          expected_links = { 'self' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2",
                             'first' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2",
                             'prev' => nil,
                             'next' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2",
                             'last' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2" }
          get :render_pagination_using_will_paginate, params: { page: { number: 1, size: 2 } }
          response = JSON.parse(@response.body)
          assert_equal expected_links, response['links']
        end

        def test_render_pagination_links_with_kaminari
          expected_links = { 'self' => "#{KAMINARI_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=1",
                             'first' => "#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
                             'prev' => "#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
                             'next' => "#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1",
                             'last' => "#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1" }
          get :render_pagination_using_kaminari, params: { page: { number: 2, size: 1 } }
          response = JSON.parse(@response.body)
          assert_equal expected_links, response['links']
        end

        def test_render_only_prev_first_and_last_pagination_links
          expected_links = { 'self' => "#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1",
                             'first' => "#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
                             'prev' => "#{KAMINARI_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=1",
                             'next' => nil,
                             'last' => "#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1" }
          get :render_pagination_using_kaminari, params: { page: { number: 3, size: 1 } }
          response = JSON.parse(@response.body)
          assert_equal expected_links, response['links']
        end

        def test_render_only_first_last_and_next_pagination_links_with_additional_params
          expected_links = { 'self' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2&teste=additional",
                             'first' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2&teste=additional",
                             'prev' => nil,
                             'next' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2&teste=additional",
                             'last' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2&teste=additional" }
          get :render_pagination_using_will_paginate, params: { page: { number: 1, size: 2 }, teste: 'additional' }
          response = JSON.parse(@response.body)
          assert_equal expected_links, response['links']
        end

        def test_render_only_prev_first_and_last_pagination_links_with_additional_params
          expected_links = { 'self' => "#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1&teste=additional",
                             'first' => "#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1&teste=additional",
                             'prev' => "#{KAMINARI_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=1&teste=additional",
                             'next' => nil,
                             'last' => "#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1&teste=additional" }
          get :render_pagination_using_kaminari, params: { page: { number: 3, size: 1 }, teste: 'additional' }
          response = JSON.parse(@response.body)
          assert_equal expected_links, response['links']
        end

        def test_array_without_pagination_links
          get :render_array_without_pagination_links, params: { page: { number: 2, size: 1 } }
          response = JSON.parse(@response.body)
          refute response.key? 'links'
        end
      end
    end
  end
end