Mercurial > p > roundup > code
annotate test/test_init.py @ 8177:2967f37e73e4
refactor: issue2551289. invalid REST Accept header stops request
Sending a POST, PUT (maybe PATCH) with an accept header that is not
application/json or xml (if enabled) used to complete the request
before throwing a 406 error. This was wrong.
Now it reports an error without dispatching/processing the requested
transaction. This is the first of a series of refactors of the
dispatch method to make it faster and more readable by using return
early pattern and extracting methods from the code.
changes:
The following now return 406 errors not 400 errors
invalid version specified with @apiver in URL.
invalid version specified with @apiver in payload body
invalid version specified in accept headers as
application/vnd.roundup.test-vz+json or version property
Parsing the accept header returns a 400 when presented with a
parameter without an = sign or other parse error. They used to
return a 406 which is wrong since the header is malformed rather
than having a value I can't respond to.
Some error messages were made clearer.
Results in the case of an error are proper json error object rather
than text/plain strings.
New test added for testdetermine_output_formatBadAccept that test the
new method using the same test cases as for
testDispatchBadAccept. I intend to extend the test coverage for
determine_output_format to cover more cases. This should be a faster
unit test than for dispatch.
Removed .lower() calls for accept_mime_type as the input values are
taken from the values in the __accepted_content_type dict which
only has lower case values.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sun, 08 Dec 2024 01:09:34 -0500 |
| parents | 198b6e810c67 |
| children |
| 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 -*- |
|
4816
9b3e09a50d85
init.loadTemplateInfo: Add test
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
2 |
|
9b3e09a50d85
init.loadTemplateInfo: Add test
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
3 import unittest, os, pprint, difflib, textwrap |
|
9b3e09a50d85
init.loadTemplateInfo: Add test
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
4 |
|
9b3e09a50d85
init.loadTemplateInfo: Add test
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
5 from roundup.init import loadTemplateInfo |
|
9b3e09a50d85
init.loadTemplateInfo: Add test
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
6 |
|
9b3e09a50d85
init.loadTemplateInfo: Add test
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
7 |
|
9b3e09a50d85
init.loadTemplateInfo: Add test
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
8 class TemplateInfoTestCase(unittest.TestCase): |
|
9b3e09a50d85
init.loadTemplateInfo: Add test
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
9 def testLoadTemplateInfo(self): |
|
9b3e09a50d85
init.loadTemplateInfo: Add test
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
10 path = os.path.join(os.path.dirname(__file__), |
|
9b3e09a50d85
init.loadTemplateInfo: Add test
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
11 '../share/roundup/templates/classic') |
|
9b3e09a50d85
init.loadTemplateInfo: Add test
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
12 self.maxDiff = None |
|
9b3e09a50d85
init.loadTemplateInfo: Add test
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
13 self.assertEqual( |
|
9b3e09a50d85
init.loadTemplateInfo: Add test
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
14 loadTemplateInfo(path), |
|
9b3e09a50d85
init.loadTemplateInfo: Add test
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
15 { |
|
9b3e09a50d85
init.loadTemplateInfo: Add test
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
16 'description': textwrap.dedent('''\ |
|
9b3e09a50d85
init.loadTemplateInfo: Add test
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
17 This is a generic issue tracker that may be used to track bugs, |
|
4818
edb171528a7d
init.loadTemplateInfo: replace rfc822 with email.parser (Python 3 compatible)
anatoly techtonik <techtonik@gmail.com>
parents:
4816
diff
changeset
|
18 feature requests, project issues or any number of other types |
|
edb171528a7d
init.loadTemplateInfo: replace rfc822 with email.parser (Python 3 compatible)
anatoly techtonik <techtonik@gmail.com>
parents:
4816
diff
changeset
|
19 of issues. Most users of Roundup will find that this template |
|
edb171528a7d
init.loadTemplateInfo: replace rfc822 with email.parser (Python 3 compatible)
anatoly techtonik <techtonik@gmail.com>
parents:
4816
diff
changeset
|
20 suits them, with perhaps a few customisations.'''), |
|
4816
9b3e09a50d85
init.loadTemplateInfo: Add test
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
21 'intended-for': 'All first-time Roundup users', |
|
9b3e09a50d85
init.loadTemplateInfo: Add test
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
22 'name': 'classic', |
|
9b3e09a50d85
init.loadTemplateInfo: Add test
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
23 'path': path |
|
9b3e09a50d85
init.loadTemplateInfo: Add test
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
24 } |
|
9b3e09a50d85
init.loadTemplateInfo: Add test
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
25 ) |
|
9b3e09a50d85
init.loadTemplateInfo: Add test
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
26 |
|
9b3e09a50d85
init.loadTemplateInfo: Add test
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
27 # vim: set et sts=4 sw=4 : |
