annotate test/test_jinja2.py @ 7853:03c1b7ae3a68

issue2551328/issue2551264 unneeded next link and total_count incorrect Fix: issue2551328 - REST results show next link if number of results is a multiple of page size. (Found by members of team 3 in the UMass-Boston CS682 Spring 2024 class.) issue2551264 - REST X-Total-Count header and @total_size count incorrect when paginated These issues arose because we retrieved the exact number of rows from the database as requested by the user using the @page_size parameter. With this changeset, we retrieve up to 10 million + 1 rows from the database. If the total number of rows exceeds 10 million, we set the total_count indicators to -1 as an invalid size. (The max number of requested rows (default 10 million +1) can be modified by the admin through interfaces.py.) By retrieving more data than necessary, we can calculate the total count by adding @page_index*@page_size to the number of rows returned by the query. Furthermore, since we return more than @page_size rows, we can determine the existence of a row at @page_size+1 and use that information to determine if a next link should be provided. Previously, a next link was returned if @page_size rows were retrieved. This change does not guarantee that the user will get @page_size rows returned. Access policy filtering occurs after the rows are returned, and discards rows inaccessible by the user. Using the current @page_index/@page_size it would be difficult to have the roundup code refetch data and make sure that a full @page_size set of rows is returned. E.G. @page_size=100 and 5 of them are dropped due to access restrictions. We then fetch 10 items and add items 1-4 and 6 (5 is inaccessible). There is no way to calculate the new database offset at: @page_index*@page_size + 6 from the URL. We would need to add an @page_offset=6 or something. This could work since the client isn't adding 1 to @page_index to get the next page. Thanks to HATEOAS, the client just uses the 'next' url. But I am not going to cross that bridge without a concrete use case. This can also be handled client side by merging a short response with the next response and re-paginating client side. Also added extra index markers to the docs to highlight use of interfaces.py.
author John Rouillard <rouilj@ieee.org>
date Mon, 01 Apr 2024 09:57:16 -0400
parents d26921b851c3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5037
diff changeset
1 #-*- encoding: utf-8 -*-
4964
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
2 """ Testing the jinja2 templating engine of roundup-tracker.
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
3
5009
3766e0ca8e7a test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents: 4964
diff changeset
4 Copyright: 2016 Intevation GmbH.
3766e0ca8e7a test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents: 4964
diff changeset
5 Author: Bernhard E. Reiter <bernhard@intevation.de>
3766e0ca8e7a test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents: 4964
diff changeset
6
4964
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
7 This module is Free Software under the Roundup licensing of 1.5,
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
8 see the COPYING.txt file coming with Roundup.
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
9
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
10 Just a test file template for now.
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
11 """
5009
3766e0ca8e7a test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents: 4964
diff changeset
12 import shutil # only, needed for tearDown. TODO: Remove when refactored.
4964
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
13 import unittest
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
14
5388
d26921b851c3 Python 3 preparation: make relative imports explicit.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
15 from . import db_test_base
4964
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
16
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
17 TESTSUITE_IDENTIFIER='jinja2'
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
18
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
19 class TestCase_Zero(unittest.TestCase):
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
20 def test_zero(self):
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
21 self.assertEqual(True, True)
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
22
5033
63c79c0992ae Update tests to work with py.test
John Kristensen <john@jerrykan.com>
parents: 5009
diff changeset
23
63c79c0992ae Update tests to work with py.test
John Kristensen <john@jerrykan.com>
parents: 5009
diff changeset
24 class Jinja2Test(object):
5009
3766e0ca8e7a test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents: 4964
diff changeset
25 """Sets up and tears down an instance with database contents.
3766e0ca8e7a test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents: 4964
diff changeset
26
3766e0ca8e7a test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents: 4964
diff changeset
27 Setup and teardown modelled after the use of db_test_base
3766e0ca8e7a test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents: 4964
diff changeset
28 by several modules like test_xmlrpc and test_userauditor.
3766e0ca8e7a test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents: 4964
diff changeset
29
3766e0ca8e7a test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents: 4964
diff changeset
30 TODO: Should probably be moved to a base case in db_test_base.py.
3766e0ca8e7a test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents: 4964
diff changeset
31 """
4964
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
32
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
33 backend = None # can be used to create tests per backend, see test_xmlrpc
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
34
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
35 def setUp(self):
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
36 self.dirname = '_test_' + TESTSUITE_IDENTIFIER
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
37 self.instance = db_test_base.setupTracker(self.dirname, self.backend)
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
38 self.db = self.instance.open('admin')
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
39
5009
3766e0ca8e7a test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents: 4964
diff changeset
40 def tearDown(self):
3766e0ca8e7a test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents: 4964
diff changeset
41 self.db.close()
3766e0ca8e7a test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents: 4964
diff changeset
42 try:
3766e0ca8e7a test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents: 4964
diff changeset
43 shutil.rmtree(self.dirname)
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5037
diff changeset
44 except OSError as error:
5009
3766e0ca8e7a test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents: 4964
diff changeset
45 if error.errno not in (errno.ENOENT, errno.ESRCH): raise
3766e0ca8e7a test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents: 4964
diff changeset
46
4964
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
47 def test_zero(self):
5009
3766e0ca8e7a test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents: 4964
diff changeset
48 """Do nothing just make sure that setup and teardown works."""
4964
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
49 pass
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
50
5009
3766e0ca8e7a test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents: 4964
diff changeset
51
5037
364c54991861 Remove unneeded TestSuite code from tests
John Kristensen <john@jerrykan.com>
parents: 5033
diff changeset
52 # only using one database backend for now, not sure if doing all
364c54991861 Remove unneeded TestSuite code from tests
John Kristensen <john@jerrykan.com>
parents: 5033
diff changeset
53 # backends will keep the test focussed enough to be useful for the used
364c54991861 Remove unneeded TestSuite code from tests
John Kristensen <john@jerrykan.com>
parents: 5033
diff changeset
54 # computing time. Would be okay to change in the future.
5033
63c79c0992ae Update tests to work with py.test
John Kristensen <john@jerrykan.com>
parents: 5009
diff changeset
55 class anydbmJinja2Test(Jinja2Test, unittest.TestCase):
63c79c0992ae Update tests to work with py.test
John Kristensen <john@jerrykan.com>
parents: 5009
diff changeset
56 backend = 'anydbm'
63c79c0992ae Update tests to work with py.test
John Kristensen <john@jerrykan.com>
parents: 5009
diff changeset
57
4964
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
58 # vim: ts=4 et sts=4 sw=4 ai :
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
59
2c3cc4ccd024 Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff changeset
60

Roundup Issue Tracker: http://roundup-tracker.org/