merged patch from flosch for multiple paginators on one page
[django-pagination.git] / pagination / tests.py
1 """
2 >>> from django.core.paginator import Paginator
3 >>> from 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 >>> p = Paginator(range(19), 2)
29 >>> paginate({'paginator': p, 'page_obj': p.page(1)})['pages']
30 [1, 2, 3, 4, None, 7, 8, 9, 10]
31
32 >>> p = Paginator(range(21), 2)
33 >>> paginate({'paginator': p, 'page_obj': p.page(1)})['pages']
34 [1, 2, 3, 4, None, 8, 9, 10, 11]
35
36 # Testing orphans
37 >>> p = Paginator(range(5), 2, 1)
38 >>> paginate({'paginator': p, 'page_obj': p.page(1)})['pages']
39 [1, 2]
40
41 >>> p = Paginator(range(21), 2, 1)
42 >>> pg = paginate({'paginator': p, 'page_obj': p.page(1)})
43 >>> pg['pages']
44 [1, 2, 3, 4, None, 7, 8, 9, 10]
45 >>> pg['records']['first']
46 1
47 >>> pg['records']['last']
48 2
49
50 >>> p = Paginator(range(21), 2, 1)
51 >>> pg = paginate({'paginator': p, 'page_obj': p.page(10)})
52 >>> pg['pages']
53 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
54 >>> pg['records']['first']
55 19
56 >>> pg['records']['last']
57 21
58
59 >>> p = Paginator(range(21), 2, 1)
60 >>> paginate({'paginator': p, 'page_obj': p.page(1)})['pages']
61 [1, 2, 3, 4, None, 7, 8, 9, 10]
62
63 >>> t = Template("{% load pagination_tags %}{% autopaginate var 2 %}{% paginate %}")
64
65 >>> from django.http import HttpRequest as DjangoHttpRequest
66 >>> class HttpRequest(DjangoHttpRequest):
67 ...     page = lambda self, suffix: 1
68
69 >>> t.render(Context({'var': range(21), 'request': HttpRequest()}))
70 u'\\n\\n<div class="pagination">...
71 >>>
72 >>> t = Template("{% load pagination_tags %}{% autopaginate var %}{% paginate %}")
73 >>> t.render(Context({'var': range(21), 'request': HttpRequest()}))
74 u'\\n\\n<div class="pagination">...
75 >>> t = Template("{% load pagination_tags %}{% autopaginate var 20 %}{% paginate %}")
76 >>> t.render(Context({'var': range(21), 'request': HttpRequest()}))
77 u'\\n\\n<div class="pagination">...
78 >>> t = Template("{% load pagination_tags %}{% autopaginate var by %}{% paginate %}")
79 >>> t.render(Context({'var': range(21), 'by': 20, 'request': HttpRequest()}))
80 u'\\n\\n<div class="pagination">...<a href="?page=2"...
81 >>> t = Template("{% load pagination_tags %}{% autopaginate var by as foo %}{{ foo }}")
82 >>> t.render(Context({'var': range(21), 'by': 20, 'request': HttpRequest()}))
83 u'[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]'
84 >>>
85 >>> t = Template("{% load pagination_tags %}{% autopaginate var2 by as foo2 %}{% paginate %}{% autopaginate var by as foo %}{% paginate %}")
86 >>> t.render(Context({'var': range(21), 'var2': range(50, 121), 'by': 20, 'request': HttpRequest()}))
87 u'\\n\\n<div class="pagination">...<a href="?page_var2=2"...<a href="?page_var=2"...
88 >>>
89
90 # Testing InfinitePaginator
91
92 >>> from paginator import InfinitePaginator
93
94 >>> InfinitePaginator
95 <class 'pagination.paginator.InfinitePaginator'>
96 >>> p = InfinitePaginator(range(20), 2, link_template='/bacon/page/%d')
97 >>> p.validate_number(2)
98 2
99 >>> p.orphans
100 0
101 >>> p3 = p.page(3)
102 >>> p3
103 <Page 3>
104 >>> p3.end_index()
105 6
106 >>> p3.has_next()
107 True
108 >>> p3.has_previous()
109 True
110 >>> p.page(10).has_next()
111 False
112 >>> p.page(1).has_previous()
113 False
114 >>> p3.next_link()
115 '/bacon/page/4'
116 >>> p3.previous_link()
117 '/bacon/page/2'
118
119 # Testing FinitePaginator
120
121 >>> from paginator import FinitePaginator
122
123 >>> FinitePaginator
124 <class 'pagination.paginator.FinitePaginator'>
125 >>> p = FinitePaginator(range(20), 2, offset=10, link_template='/bacon/page/%d')
126 >>> p.validate_number(2)
127 2
128 >>> p.orphans
129 0
130 >>> p3 = p.page(3)
131 >>> p3
132 <Page 3>
133 >>> p3.start_index()
134 10
135 >>> p3.end_index()
136 6
137 >>> p3.has_next()
138 True
139 >>> p3.has_previous()
140 True
141 >>> p3.next_link()
142 '/bacon/page/4'
143 >>> p3.previous_link()
144 '/bacon/page/2'
145
146 >>> p = FinitePaginator(range(20), 20, offset=10, link_template='/bacon/page/%d')
147 >>> p2 = p.page(2)
148 >>> p2
149 <Page 2>
150 >>> p2.has_next()
151 False
152 >>> p3.has_previous()
153 True
154 >>> p2.next_link()
155
156 >>> p2.previous_link()
157 '/bacon/page/1'
158
159 >>> from pagination.middleware import PaginationMiddleware
160 >>> from django.core.handlers.wsgi import WSGIRequest
161 >>> from StringIO import StringIO
162 >>> middleware = PaginationMiddleware()
163 >>> request = WSGIRequest({'REQUEST_METHOD': 'POST', 'CONTENT_TYPE': 'multipart', 'wsgi.input': StringIO()})
164 >>> middleware.process_request(request)
165 >>> request.upload_handlers.append('asdf')
166 """