e3793183119b7d57e2c5cfbec0845f2dc4553807
[django-pagination.git] / linaro_django_pagination / tests.py
1 """
2 >>> from django.core.paginator import Paginator
3 >>> from linaro_django_pagination.templatetags.pagination_tags import paginate
4 >>> from django.template import Template, Context
5
6 >>> p = Paginator(range(15), 2)
7 >>> pg = paginate({'paginator': p, 'page_obj': p.page(1)})
8 >>> pg['pages']
9 [1, 2, 3, 4, 5, 6, 7, 8]
10 >>> pg['records']['first']
11 1
12 >>> pg['records']['last']
13 2
14
15 >>> p = Paginator(range(15), 2)
16 >>> pg = paginate({'paginator': p, 'page_obj': p.page(8)})
17 >>> pg['pages']
18 [1, 2, 3, 4, 5, 6, 7, 8]
19 >>> pg['records']['first']
20 15
21 >>> pg['records']['last']
22 15
23
24 >>> p = Paginator(range(17), 2)
25 >>> paginate({'paginator': p, 'page_obj': p.page(1)})['pages']
26 [1, 2, 3, 4, 5, 6, 7, 8, 9]
27
28
29 # on start
30 # moving the window from 1 ... to end
31 # window size = 2, margin = 2
32 # [1] 2 3 4 5 ... 15, 16
33 # 1 [2] 3 4 5 ... 15, 16
34 # 1 2 [3] 4 5 ... 15, 16
35 # 1 2 3 [4] 5 6 ... 15, 16
36 # 1 2 3 4 [5] 6 7 ... 15, 16
37 # 1 2 3 4 5 [6] 7 8 ... 15, 16
38 # 1 2 ... 5 6 [7] 8 9 ... 15, 16
39
40 # window = 2 -> show 5 pages
41 >>> p = Paginator(range(31), 2)
42 >>> paginate({'paginator': p, 'page_obj': p.page(1)}, 2, 2)['pages']
43 [1, 2, 3, 4, 5, None, 15, 16]
44
45 >>> p = Paginator(range(31), 2)
46 >>> paginate({'paginator': p, 'page_obj': p.page(2)}, 2, 2)['pages']
47 [1, 2, 3, 4, 5, None, 15, 16]
48
49 >>> p = Paginator(range(31), 2)
50 >>> paginate({'paginator': p, 'page_obj': p.page(3)}, 2, 2)['pages']
51 [1, 2, 3, 4, 5, None, 15, 16]
52
53 >>> p = Paginator(range(31), 2)
54 >>> paginate({'paginator': p, 'page_obj': p.page(4)}, 2, 2)['pages']
55 [1, 2, 3, 4, 5, 6, None, 15, 16]
56
57 >>> p = Paginator(range(31), 2)
58 >>> paginate({'paginator': p, 'page_obj': p.page(5)}, 2, 2)['pages']
59 [1, 2, 3, 4, 5, 6, 7, None, 15, 16]
60
61 # in the middle
62 >>> p = Paginator(range(31), 2)
63 >>> paginate({'paginator': p, 'page_obj': p.page(7)}, 2, 2)['pages']
64 [1, 2, None, 5, 6, 7, 8, 9, None, 15, 16]
65
66 # on end
67 >>> p = Paginator(range(31), 2)
68 >>> paginate({'paginator': p, 'page_obj': p.page(16)}, 2, 2)['pages']
69 [1, 2, None, 12, 13, 14, 15, 16]
70
71 >>> p = Paginator(range(31), 2)
72 >>> paginate({'paginator': p, 'page_obj': p.page(13)}, 2, 2)['pages']
73 [1, 2, None, 11, 12, 13, 14, 15, 16]
74
75
76 >>> p = Paginator(range(0), 2)
77 >>> paginate({'paginator': p, 'page_obj': p.page(1)})['pages']
78 [1]
79
80
81
82 # no margin
83 >>> p = Paginator(range(31), 2)
84 >>> paginate({'paginator': p, 'page_obj': p.page(3)}, 2, 0)['pages']
85 [1, 2, 3, 4, 5, None]
86
87 >>> p = Paginator(range(31), 2)
88 >>> paginate({'paginator': p, 'page_obj': p.page(5)}, 2, 0)['pages']
89 [None, 3, 4, 5, 6, 7, None]
90
91 >>> p = Paginator(range(31), 2)
92 >>> paginate({'paginator': p, 'page_obj': p.page(16)}, 2, 0)['pages']
93 [None, 12, 13, 14, 15, 16]
94
95
96 # special
97 # zero window, zero margin
98 >>> p = Paginator(range(31), 2)
99 >>> paginate({'paginator': p, 'page_obj': p.page(1)}, 0, 0)['pages']
100 [1, None]
101
102 >>> p = Paginator(range(31), 2)
103 >>> paginate({'paginator': p, 'page_obj': p.page(2)}, 0, 0)['pages']
104 [None, 2, None]
105
106 >>> p = Paginator(range(31), 2)
107 >>> paginate({'paginator': p, 'page_obj': p.page(3)}, 0, 0)['pages']
108 [None, 3, None]
109
110 >>> p = Paginator(range(31), 2)
111 >>> paginate({'paginator': p, 'page_obj': p.page(10)}, 0, 0)['pages']
112 [None, 10, None]
113
114 >>> p = Paginator(range(31), 2)
115 >>> paginate({'paginator': p, 'page_obj': p.page(14)}, 0, 0)['pages']
116 [None, 14, None]
117
118 >>> p = Paginator(range(31), 2)
119 >>> paginate({'paginator': p, 'page_obj': p.page(15)}, 0, 0)['pages']
120 [None, 15, None]
121
122 >>> p = Paginator(range(31), 2)
123 >>> paginate({'paginator': p, 'page_obj': p.page(16)}, 0, 0)['pages']
124 [None, 16]
125
126 >>> p = Paginator(range(31), 2)
127 >>> paginate({'paginator': p, 'page_obj': p.page(5)}, 0, 1)['pages']
128 [1, None, 5, None, 16]
129
130 >>> p = Paginator(range(21), 2, 1)
131 >>> paginate({'paginator': p, 'page_obj': p.page(1)}, 0, 4)['pages']
132 [1, 2, 3, 4, None, 7, 8, 9, 10]
133
134 # Testing template rendering
135
136 >>> t = Template("{% load pagination_tags %}{% autopaginate var 2 %}{% paginate %}")
137
138 >>> from django.http import HttpRequest as DjangoHttpRequest
139 >>> class HttpRequest(DjangoHttpRequest):
140 ...     page = lambda self, suffix: 1
141
142 >>> t.render(Context({'var': range(21), 'request': HttpRequest()}))
143 u'\\n\\n<div class="pagination">...
144 >>>
145 >>> t = Template("{% load pagination_tags %}{% autopaginate var %}{% paginate %}")
146 >>> t.render(Context({'var': range(21), 'request': HttpRequest()}))
147 u'\\n\\n<div class="pagination">...
148 >>> t = Template("{% load pagination_tags %}{% autopaginate var 20 %}{% paginate %}")
149 >>> t.render(Context({'var': range(21), 'request': HttpRequest()}))
150 u'\\n\\n<div class="pagination">...
151 >>> t = Template("{% load pagination_tags %}{% autopaginate var by %}{% paginate %}")
152 >>> t.render(Context({'var': range(21), 'by': 20, 'request': HttpRequest()}))
153 u'\\n\\n<div class="pagination">...<a href="?page=2"...
154 >>> t = Template("{% load pagination_tags %}{% autopaginate var by as foo %}{{ foo }}")
155 >>> t.render(Context({'var': range(21), 'by': 20, 'request': HttpRequest()}))
156 u'[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]'
157 >>>
158 >>> t = Template("{% load pagination_tags %}{% autopaginate var2 by as foo2 %}{% paginate %}{% autopaginate var by as foo %}{% paginate %}")
159 >>> t.render(Context({'var': range(21), 'var2': range(50, 121), 'by': 20, 'request': HttpRequest()}))
160 u'\\n\\n<div class="pagination">...<a href="?page_var2=2"...<a href="?page_var=2"...
161 >>>
162
163 # Testing InfinitePaginator
164
165 >>> from paginator import InfinitePaginator
166
167 >>> InfinitePaginator
168 <class 'linaro_django_pagination.paginator.InfinitePaginator'>
169 >>> p = InfinitePaginator(range(20), 2, link_template='/bacon/page/%d')
170 >>> p.validate_number(2)
171 2
172 >>> p.orphans
173 0
174 >>> p3 = p.page(3)
175 >>> p3
176 <Page 3>
177 >>> p3.end_index()
178 6
179 >>> p3.has_next()
180 True
181 >>> p3.has_previous()
182 True
183 >>> p.page(10).has_next()
184 False
185 >>> p.page(1).has_previous()
186 False
187 >>> p3.next_link()
188 '/bacon/page/4'
189 >>> p3.previous_link()
190 '/bacon/page/2'
191
192 # Testing FinitePaginator
193
194 >>> from paginator import FinitePaginator
195
196 >>> FinitePaginator
197 <class 'linaro_django_pagination.paginator.FinitePaginator'>
198 >>> p = FinitePaginator(range(20), 2, offset=10, link_template='/bacon/page/%d')
199 >>> p.validate_number(2)
200 2
201 >>> p.orphans
202 0
203 >>> p3 = p.page(3)
204 >>> p3
205 <Page 3>
206 >>> p3.start_index()
207 10
208 >>> p3.end_index()
209 6
210 >>> p3.has_next()
211 True
212 >>> p3.has_previous()
213 True
214 >>> p3.next_link()
215 '/bacon/page/4'
216 >>> p3.previous_link()
217 '/bacon/page/2'
218
219 >>> p = FinitePaginator(range(20), 20, offset=10, link_template='/bacon/page/%d')
220 >>> p2 = p.page(2)
221 >>> p2
222 <Page 2>
223 >>> p2.has_next()
224 False
225 >>> p3.has_previous()
226 True
227 >>> p2.next_link()
228
229 >>> p2.previous_link()
230 '/bacon/page/1'
231
232 >>> from linaro_django_pagination.middleware import PaginationMiddleware
233 >>> from django.core.handlers.wsgi import WSGIRequest
234 >>> from StringIO import StringIO
235 >>> middleware = PaginationMiddleware()
236 >>> request = WSGIRequest({'REQUEST_METHOD': 'POST', 'CONTENT_TYPE': 'multipart', 'wsgi.input': StringIO()})
237 >>> middleware.process_request(request)
238 >>> request.upload_handlers.append('asdf')
239 """