Mercurial > p > roundup > code
annotate test/rest_common.py @ 5865:04deafac71ab
Implement sorting of collections in REST API
| author | Ralf Schlatterbeck <rsc@runtux.com> |
|---|---|
| date | Mon, 26 Aug 2019 09:56:20 +0200 |
| parents | 9c6617857032 |
| children | 1b91e3df3fd0 |
| rev | line source |
|---|---|
|
5586
8f2fbc88e155
Fixed code convention
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5585
diff
changeset
|
1 import unittest |
|
8f2fbc88e155
Fixed code convention
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5585
diff
changeset
|
2 import os |
|
8f2fbc88e155
Fixed code convention
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5585
diff
changeset
|
3 import shutil |
|
8f2fbc88e155
Fixed code convention
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5585
diff
changeset
|
4 import errno |
|
5801
ddb553d5618c
Add import of cgi since import cgi was removed from exceptions
John Rouillard <rouilj@ieee.org>
parents:
5747
diff
changeset
|
5 import cgi |
| 5583 | 6 |
|
5732
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
7 from time import sleep |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
8 from datetime import datetime |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
9 |
| 5583 | 10 from roundup.cgi.exceptions import * |
|
5706
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
11 from roundup.hyperdb import HyperdbValueError |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
12 from roundup.exceptions import * |
|
5586
8f2fbc88e155
Fixed code convention
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5585
diff
changeset
|
13 from roundup import password, hyperdb |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
14 from roundup.rest import RestfulInstance, calculate_etag |
| 5583 | 15 from roundup.backends import list_backends |
|
5586
8f2fbc88e155
Fixed code convention
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5585
diff
changeset
|
16 from roundup.cgi import client |
|
5651
a02ef29b4242
Fix REST tests for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5650
diff
changeset
|
17 from roundup.anypy.strings import b2s, s2b |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
18 import random |
| 5583 | 19 |
|
5733
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
20 from roundup.backends.sessions_dbm import OneTimeKeys |
|
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
21 from roundup.anypy.dbm_ import anydbm, whichdb |
|
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
22 |
| 5602 | 23 from .db_test_base import setupTracker |
| 5583 | 24 |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
25 from .mocknull import MockNull |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
26 |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
27 from io import BytesIO |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
28 import json |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
29 |
| 5583 | 30 NEEDS_INSTANCE = 1 |
| 31 | |
|
5586
8f2fbc88e155
Fixed code convention
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5585
diff
changeset
|
32 |
|
5601
fcbeff272828
Integrate REST tests into db framework
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5600
diff
changeset
|
33 class TestCase(): |
| 5583 | 34 |
| 35 backend = None | |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
36 url_pfx = 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/' |
| 5583 | 37 |
| 38 def setUp(self): | |
| 39 self.dirname = '_test_rest' | |
| 40 # set up and open a tracker | |
| 5602 | 41 self.instance = setupTracker(self.dirname, self.backend) |
| 5583 | 42 |
| 43 # open the database | |
| 44 self.db = self.instance.open('admin') | |
| 45 | |
|
5733
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
46 # Create the Otk db. |
|
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
47 # This allows a test later on to open the existing db and |
|
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
48 # set a class attribute to test the open retry loop |
|
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
49 # just as though this process was using a pre-existing db |
|
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
50 # rather then the new one we create. |
|
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
51 otk = OneTimeKeys(self.db) |
|
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
52 otk.set('key', key="value") |
|
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
53 |
| 5583 | 54 # Get user id (user4 maybe). Used later to get data from db. |
| 55 self.joeid = self.db.user.create( | |
| 56 username='joe', | |
| 57 password=password.Password('random'), | |
| 58 address='random@home.org', | |
| 59 realname='Joe Random', | |
| 60 roles='User' | |
| 61 ) | |
| 62 | |
| 63 self.db.commit() | |
| 64 self.db.close() | |
| 65 self.db = self.instance.open('joe') | |
| 5604 | 66 # Allow joe to retire |
| 67 p = self.db.security.addPermission(name='Retire', klass='issue') | |
| 68 self.db.security.addPermissionToRole('User', p) | |
| 5583 | 69 |
| 70 self.db.tx_Source = 'web' | |
| 71 | |
| 72 self.db.issue.addprop(tx_Source=hyperdb.String()) | |
|
5690
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
73 self.db.issue.addprop(anint=hyperdb.Integer()) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
74 self.db.issue.addprop(afloat=hyperdb.Number()) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
75 self.db.issue.addprop(abool=hyperdb.Boolean()) |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
76 self.db.issue.addprop(requireme=hyperdb.String(required=True)) |
| 5583 | 77 self.db.msg.addprop(tx_Source=hyperdb.String()) |
| 78 | |
| 79 self.db.post_init() | |
| 80 | |
| 81 thisdir = os.path.dirname(__file__) | |
| 82 vars = {} | |
| 5602 | 83 with open(os.path.join(thisdir, "tx_Source_detector.py")) as f: |
| 84 code = compile(f.read(), "tx_Source_detector.py", "exec") | |
| 85 exec(code, vars) | |
| 5583 | 86 vars['init'](self.db) |
| 87 | |
| 88 env = { | |
| 89 'PATH_INFO': 'http://localhost/rounduptest/rest/', | |
| 90 'HTTP_HOST': 'localhost', | |
| 91 'TRACKER_NAME': 'rounduptest' | |
| 92 } | |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
93 self.dummy_client = client.Client(self.instance, MockNull(), env, [], None) |
|
5650
e8ca7072c629
Fix Python 3 issues in REST code.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5647
diff
changeset
|
94 self.dummy_client.request.headers.get = self.get_header |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
95 self.empty_form = cgi.FieldStorage() |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
96 self.terse_form = cgi.FieldStorage() |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
97 self.terse_form.list = [ |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
98 cgi.MiniFieldStorage('@verbose', '0'), |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
99 ] |
| 5583 | 100 |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
101 self.server = RestfulInstance(self.dummy_client, self.db) |
| 5583 | 102 |
|
5710
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
103 self.db.Otk = self.db.getOTKManager() |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
104 |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
105 self.db.config['WEB_SECRET_KEY'] = "XyzzykrnKm45Sd" |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
106 |
| 5583 | 107 def tearDown(self): |
| 108 self.db.close() | |
| 109 try: | |
| 110 shutil.rmtree(self.dirname) | |
| 5602 | 111 except OSError as error: |
| 5583 | 112 if error.errno not in (errno.ENOENT, errno.ESRCH): |
| 113 raise | |
| 114 | |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
115 def get_header (self, header, not_found=None): |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
116 try: |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
117 return self.headers[header.lower()] |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
118 except (AttributeError, KeyError, TypeError): |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
119 return not_found |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
120 |
|
5865
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
121 def create_stati(self): |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
122 try: |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
123 self.db.status.create(name='open', order='9') |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
124 except ValueError: |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
125 pass |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
126 try: |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
127 self.db.status.create(name='closed', order='91') |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
128 except ValueError: |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
129 pass |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
130 try: |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
131 self.db.priority.create(name='normal') |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
132 except ValueError: |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
133 pass |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
134 try: |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
135 self.db.priority.create(name='critical') |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
136 except ValueError: |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
137 pass |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
138 |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
139 def create_sampledata(self): |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
140 """ Create sample data common to some test cases |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
141 """ |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
142 self.create_stati() |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
143 self.db.issue.create( |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
144 title='foo1', |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
145 status=self.db.status.lookup('open'), |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
146 priority=self.db.priority.lookup('normal'), |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
147 nosy = [ "1", "2" ] |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
148 ) |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
149 issue_open_norm = self.db.issue.create( |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
150 title='foo2', |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
151 status=self.db.status.lookup('open'), |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
152 priority=self.db.priority.lookup('normal'), |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
153 assignedto = "3" |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
154 ) |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
155 issue_open_crit = self.db.issue.create( |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
156 title='foo5', |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
157 status=self.db.status.lookup('open'), |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
158 priority=self.db.priority.lookup('critical') |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
159 ) |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
160 |
| 5583 | 161 def testGet(self): |
| 162 """ | |
| 163 Retrieve all three users | |
| 164 obtain data for 'joe' | |
| 165 """ | |
| 166 # Retrieve all three users. | |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
167 results = self.server.get_collection('user', self.empty_form) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
168 self.assertEqual(self.dummy_client.response_code, 200) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
169 self.assertEqual(len(results['data']['collection']), 3) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
170 self.assertEqual(results['data']['@total_size'], 3) |
|
5645
7f4d19867123
Make print into function call for python3 compatibility.
John Rouillard <rouilj@ieee.org>
parents:
5643
diff
changeset
|
171 print(self.dummy_client.additional_headers["X-Count-Total"]) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
172 self.assertEqual( |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
173 self.dummy_client.additional_headers["X-Count-Total"], |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
174 "3" |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
175 ) |
| 5583 | 176 |
| 177 # Obtain data for 'joe'. | |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
178 results = self.server.get_element('user', self.joeid, self.empty_form) |
|
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
179 results = results['data'] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
180 self.assertEqual(self.dummy_client.response_code, 200) |
| 5583 | 181 self.assertEqual(results['attributes']['username'], 'joe') |
| 182 self.assertEqual(results['attributes']['realname'], 'Joe Random') | |
| 183 | |
| 5678 | 184 # Obtain data for 'joe' via username lookup. |
| 185 results = self.server.get_element('user', 'joe', self.empty_form) | |
| 186 results = results['data'] | |
| 187 self.assertEqual(self.dummy_client.response_code, 200) | |
| 188 self.assertEqual(results['attributes']['username'], 'joe') | |
| 189 self.assertEqual(results['attributes']['realname'], 'Joe Random') | |
| 190 | |
| 191 # Obtain data for 'joe' via username lookup (long form). | |
| 192 key = 'username=joe' | |
| 193 results = self.server.get_element('user', key, self.empty_form) | |
| 194 results = results['data'] | |
| 195 self.assertEqual(self.dummy_client.response_code, 200) | |
| 196 self.assertEqual(results['attributes']['username'], 'joe') | |
| 197 self.assertEqual(results['attributes']['realname'], 'Joe Random') | |
| 198 | |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
199 # Obtain data for 'joe'. |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
200 results = self.server.get_attribute( |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
201 'user', self.joeid, 'username', self.empty_form |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
202 ) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
203 self.assertEqual(self.dummy_client.response_code, 200) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
204 self.assertEqual(results['data']['data'], 'joe') |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
205 |
|
5682
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
206 def testOutputFormat(self): |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
207 """ test of @fields and @verbose implementation """ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
208 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
209 self.maxDiff = 4000 |
|
5865
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
210 self.create_sampledata() |
|
5682
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
211 base_path = self.db.config['TRACKER_WEB'] + 'rest/data/issue/' |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
212 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
213 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
214 # Check formating for issues status=open; @fields and verbose tests |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
215 form = cgi.FieldStorage() |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
216 form.list = [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
217 cgi.MiniFieldStorage('status', 'open'), |
|
5825
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
218 cgi.MiniFieldStorage('@fields', 'nosy,status,creator'), |
|
5682
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
219 cgi.MiniFieldStorage('@verbose', '2') |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
220 ] |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
221 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
222 expected={'data': |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
223 {'@total_size': 3, |
|
5825
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
224 'collection': [ { |
|
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
225 'creator': {'id': '3', |
|
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
226 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/3', |
|
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
227 'username': 'joe'}, |
|
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
228 'status': {'id': '9', |
|
5682
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
229 'name': 'open', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
230 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/status/9'}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
231 'id': '1', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
232 'nosy': [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
233 {'username': 'admin', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
234 'id': '1', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
235 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/1'}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
236 {'username': 'anonymous', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
237 'id': '2', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
238 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/2'} |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
239 ], |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
240 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/1', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
241 'title': 'foo1' }, |
|
5825
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
242 { 'creator': {'id': '3', |
|
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
243 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/3', |
|
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
244 'username': 'joe'}, |
|
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
245 'status': { |
|
5682
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
246 'id': '9', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
247 'name': 'open', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
248 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/status/9' }, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
249 'id': '2', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
250 'nosy': [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
251 {'username': 'joe', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
252 'id': '3', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
253 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/3'} |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
254 ], |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
255 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/2', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
256 'title': 'foo2'}, |
|
5825
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
257 {'creator': {'id': '3', |
|
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
258 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/3', |
|
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
259 'username': 'joe'}, |
|
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
260 'status': { |
|
5682
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
261 'id': '9', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
262 'name': 'open', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
263 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/status/9'}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
264 'id': '3', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
265 'nosy': [], |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
266 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/3', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
267 'title': 'foo5'} |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
268 ]}} |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
269 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
270 results = self.server.get_collection('issue', form) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
271 self.assertDictEqual(expected, results) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
272 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
273 # Check formating for issues status=open; @fields and verbose tests |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
274 form = cgi.FieldStorage() |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
275 form.list = [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
276 cgi.MiniFieldStorage('status', 'open') |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
277 # default cgi.MiniFieldStorage('@verbose', '1') |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
278 ] |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
279 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
280 expected={'data': |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
281 {'@total_size': 3, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
282 'collection': [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
283 {'id': '1', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
284 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/1',}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
285 { 'id': '2', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
286 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
287 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/2'}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
288 {'id': '3', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
289 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/3'} ]}} |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
290 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
291 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
292 results = self.server.get_collection('issue', form) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
293 self.assertDictEqual(expected, results) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
294 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
295 # Generate failure case, unknown field. |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
296 form = cgi.FieldStorage() |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
297 form.list = [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
298 cgi.MiniFieldStorage('status', 'open'), |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
299 cgi.MiniFieldStorage('@fields', 'title,foo') |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
300 ] |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
301 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
302 expected={'error': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
303 'msg': UsageError("Failed to find property 'foo' " |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
304 "for class issue.",), |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
305 'status': 400}} |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
306 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
307 results = self.server.get_collection('issue', form) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
308 # I tried assertDictEqual but seems it can't handle |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
309 # the exception value of 'msg'. So I am using repr to check. |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
310 self.assertEqual(repr(sorted(expected['error'])), |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
311 repr(sorted(results['error'])) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
312 ) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
313 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
314 # Check formating for issues status=open; @fields and verbose tests |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
315 form = cgi.FieldStorage() |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
316 form.list = [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
317 cgi.MiniFieldStorage('status', 'open'), |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
318 cgi.MiniFieldStorage('@fields', 'nosy,status,assignedto'), |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
319 cgi.MiniFieldStorage('@verbose', '0') |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
320 ] |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
321 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
322 expected={'data': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
323 '@total_size': 3, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
324 'collection': [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
325 {'assignedto': None, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
326 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/1', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
327 'status': '9', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
328 'nosy': ['1', '2'], |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
329 'id': '1'}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
330 {'assignedto': '3', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
331 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/2', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
332 'status': '9', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
333 'nosy': ['3'], |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
334 'id': '2'}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
335 {'assignedto': None, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
336 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/3', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
337 'status': '9', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
338 'nosy': [], |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
339 'id': '3'}]}} |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
340 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
341 results = self.server.get_collection('issue', form) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
342 print(results) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
343 self.assertDictEqual(expected, results) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
344 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
345 # check users |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
346 form = cgi.FieldStorage() |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
347 form.list = [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
348 cgi.MiniFieldStorage('@fields', 'username,queries,password'), |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
349 cgi.MiniFieldStorage('@verbose', '0') |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
350 ] |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
351 # note this is done as user joe, so we only get queries |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
352 # and password for joe. |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
353 expected = {'data': {'collection': [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
354 {'id': '1', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
355 'username': 'admin', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
356 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/1'}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
357 {'id': '2', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
358 'username': 'anonymous', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
359 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/2'}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
360 {'password': '[password hidden scheme PBKDF2]', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
361 'id': '3', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
362 'queries': [], |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
363 'username': 'joe', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
364 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/3'}], |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
365 '@total_size': 3}} |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
366 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
367 results = self.server.get_collection('user', form) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
368 self.assertDictEqual(expected, results) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
369 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
370 ## Start testing get_element |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
371 form = cgi.FieldStorage() |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
372 form.list = [ |
|
5825
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
373 cgi.MiniFieldStorage('@fields', 'queries,password,creator'), |
|
5682
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
374 cgi.MiniFieldStorage('@verbose', '2') |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
375 ] |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
376 expected = {'data': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
377 'id': '3', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
378 'type': 'user', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
379 '@etag': '', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
380 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/3', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
381 'attributes': { |
|
5825
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
382 'creator': {'id': '1', |
|
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
383 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/1', |
|
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
384 'username': 'admin'}, |
|
5682
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
385 'password': '[password hidden scheme PBKDF2]', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
386 'queries': [], |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
387 'username': 'joe' |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
388 } |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
389 }} |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
390 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
391 results = self.server.get_element('user', self.joeid, form) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
392 results['data']['@etag'] = '' # etag depends on date, set to empty |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
393 self.assertDictEqual(expected,results) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
394 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
395 form = cgi.FieldStorage() |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
396 form.list = [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
397 cgi.MiniFieldStorage('@fields', 'status:priority'), |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
398 cgi.MiniFieldStorage('@verbose', '1') |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
399 ] |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
400 expected = {'data': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
401 'type': 'issue', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
402 'id': '3', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
403 'attributes': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
404 'status': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
405 'id': '9', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
406 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/status/9'}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
407 'priority': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
408 'id': '1', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
409 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/priority/1'}}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
410 '@etag': '', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
411 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/3'}} |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
412 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
413 results = self.server.get_element('issue', "3", form) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
414 results['data']['@etag'] = '' # etag depends on date, set to empty |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
415 self.assertDictEqual(expected,results) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
416 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
417 form = cgi.FieldStorage() |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
418 form.list = [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
419 cgi.MiniFieldStorage('@fields', 'status,priority'), |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
420 cgi.MiniFieldStorage('@verbose', '0') |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
421 ] |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
422 expected = {'data': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
423 'type': 'issue', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
424 'id': '3', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
425 'attributes': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
426 'status': '9', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
427 'priority': '1'}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
428 '@etag': '', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
429 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/3'}} |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
430 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
431 results = self.server.get_element('issue', "3", form) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
432 results['data']['@etag'] = '' # etag depends on date, set to empty |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
433 self.assertDictEqual(expected,results) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
434 |
|
5865
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
435 def testSorting(self): |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
436 self.maxDiff = 4000 |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
437 self.create_sampledata() |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
438 self.db.issue.set('1', status='7') |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
439 self.db.issue.set('2', status='2') |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
440 self.db.issue.set('3', status='2') |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
441 self.db.commit() |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
442 base_path = self.db.config['TRACKER_WEB'] + 'rest/data/issue/' |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
443 # change some data for sorting on later |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
444 form = cgi.FieldStorage() |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
445 form.list = [ |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
446 cgi.MiniFieldStorage('@fields', 'status'), |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
447 cgi.MiniFieldStorage('@sort', 'status,-id'), |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
448 cgi.MiniFieldStorage('@verbose', '0') |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
449 ] |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
450 |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
451 # status is sorted by orderprop (property 'order') |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
452 # which provides the same ordering as the status ID |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
453 expected={'data': { |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
454 '@total_size': 3, |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
455 'collection': [ |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
456 {'link': base_path + '3', 'status': '2', 'id': '3'}, |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
457 {'link': base_path + '2', 'status': '2', 'id': '2'}, |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
458 {'link': base_path + '1', 'status': '7', 'id': '1'}]}} |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
459 |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
460 results = self.server.get_collection('issue', form) |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
461 self.assertDictEqual(expected, results) |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
462 |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
463 def testFilter(self): |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
464 """ |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
465 Retrieve all three users |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
466 obtain data for 'joe' |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
467 """ |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
468 # create sample data |
|
5865
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
469 self.create_stati() |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
470 self.db.issue.create( |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
471 title='foo4', |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
472 status=self.db.status.lookup('closed'), |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
473 priority=self.db.priority.lookup('critical') |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
474 ) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
475 self.db.issue.create( |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
476 title='foo1', |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
477 status=self.db.status.lookup('open'), |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
478 priority=self.db.priority.lookup('normal') |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
479 ) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
480 issue_open_norm = self.db.issue.create( |
|
5842
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
481 title='foo2 normal', |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
482 status=self.db.status.lookup('open'), |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
483 priority=self.db.priority.lookup('normal') |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
484 ) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
485 issue_closed_norm = self.db.issue.create( |
|
5842
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
486 title='foo3 closed normal', |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
487 status=self.db.status.lookup('closed'), |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
488 priority=self.db.priority.lookup('normal') |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
489 ) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
490 issue_closed_crit = self.db.issue.create( |
|
5842
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
491 title='foo4 closed', |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
492 status=self.db.status.lookup('closed'), |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
493 priority=self.db.priority.lookup('critical') |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
494 ) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
495 issue_open_crit = self.db.issue.create( |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
496 title='foo5', |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
497 status=self.db.status.lookup('open'), |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
498 priority=self.db.priority.lookup('critical') |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
499 ) |
|
5623
1c4adab65faf
use config file setting for creating tracker uri
John Rouillard <rouilj@ieee.org>
parents:
5604
diff
changeset
|
500 base_path = self.db.config['TRACKER_WEB'] + 'rest/data/issue/' |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
501 |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
502 # Retrieve all issue status=open |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
503 form = cgi.FieldStorage() |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
504 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
505 cgi.MiniFieldStorage('status', 'open') |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
506 ] |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
507 results = self.server.get_collection('issue', form) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
508 self.assertEqual(self.dummy_client.response_code, 200) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
509 self.assertIn(get_obj(base_path, issue_open_norm), |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
510 results['data']['collection']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
511 self.assertIn(get_obj(base_path, issue_open_crit), |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
512 results['data']['collection']) |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
513 self.assertNotIn( |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
514 get_obj(base_path, issue_closed_norm), |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
515 results['data']['collection'] |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
516 ) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
517 |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
518 # Retrieve all issue status=closed and priority=critical |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
519 form = cgi.FieldStorage() |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
520 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
521 cgi.MiniFieldStorage('status', 'closed'), |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
522 cgi.MiniFieldStorage('priority', 'critical') |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
523 ] |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
524 results = self.server.get_collection('issue', form) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
525 self.assertEqual(self.dummy_client.response_code, 200) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
526 self.assertIn(get_obj(base_path, issue_closed_crit), |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
527 results['data']['collection']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
528 self.assertNotIn(get_obj(base_path, issue_open_crit), |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
529 results['data']['collection']) |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
530 self.assertNotIn( |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
531 get_obj(base_path, issue_closed_norm), |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
532 results['data']['collection'] |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
533 ) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
534 |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
535 # Retrieve all issue status=closed and priority=normal,critical |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
536 form = cgi.FieldStorage() |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
537 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
538 cgi.MiniFieldStorage('status', 'closed'), |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
539 cgi.MiniFieldStorage('priority', 'normal,critical') |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
540 ] |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
541 results = self.server.get_collection('issue', form) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
542 self.assertEqual(self.dummy_client.response_code, 200) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
543 self.assertIn(get_obj(base_path, issue_closed_crit), |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
544 results['data']['collection']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
545 self.assertIn(get_obj(base_path, issue_closed_norm), |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
546 results['data']['collection']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
547 self.assertNotIn(get_obj(base_path, issue_open_crit), |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
548 results['data']['collection']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
549 self.assertNotIn(get_obj(base_path, issue_open_norm), |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
550 results['data']['collection']) |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
551 |
|
5842
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
552 # Retrieve all issue status=closed and priority=normal,critical |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
553 # using duplicate priority key's. |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
554 form = cgi.FieldStorage() |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
555 form.list = [ |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
556 cgi.MiniFieldStorage('status', 'closed'), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
557 cgi.MiniFieldStorage('priority', 'normal'), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
558 cgi.MiniFieldStorage('priority', 'critical') |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
559 ] |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
560 results = self.server.get_collection('issue', form) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
561 self.assertEqual(self.dummy_client.response_code, 200) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
562 self.assertIn(get_obj(base_path, issue_closed_crit), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
563 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
564 self.assertIn(get_obj(base_path, issue_closed_norm), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
565 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
566 self.assertNotIn(get_obj(base_path, issue_open_crit), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
567 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
568 self.assertNotIn(get_obj(base_path, issue_open_norm), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
569 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
570 |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
571 # Retrieve all issues with title containing |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
572 # closed, normal and 3 using duplicate title filterkeys |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
573 form = cgi.FieldStorage() |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
574 form.list = [ |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
575 cgi.MiniFieldStorage('title', 'closed'), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
576 cgi.MiniFieldStorage('title', 'normal'), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
577 cgi.MiniFieldStorage('title', '3') |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
578 ] |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
579 results = self.server.get_collection('issue', form) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
580 self.assertEqual(self.dummy_client.response_code, 200) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
581 self.assertNotIn(get_obj(base_path, issue_closed_crit), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
582 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
583 self.assertIn(get_obj(base_path, issue_closed_norm), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
584 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
585 self.assertNotIn(get_obj(base_path, issue_open_crit), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
586 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
587 self.assertNotIn(get_obj(base_path, issue_open_norm), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
588 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
589 self.assertEqual(len(results['data']['collection']), 1) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
590 |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
591 # Retrieve all issues (no hits) with title containing |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
592 # closed, normal and foo3 in this order using title filter |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
593 form = cgi.FieldStorage() |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
594 form.list = [ |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
595 cgi.MiniFieldStorage('title', 'closed normal foo3') |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
596 ] |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
597 results = self.server.get_collection('issue', form) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
598 self.assertEqual(self.dummy_client.response_code, 200) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
599 self.assertNotIn(get_obj(base_path, issue_closed_crit), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
600 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
601 self.assertNotIn(get_obj(base_path, issue_closed_norm), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
602 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
603 self.assertNotIn(get_obj(base_path, issue_open_crit), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
604 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
605 self.assertNotIn(get_obj(base_path, issue_open_norm), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
606 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
607 self.assertEqual(len(results['data']['collection']), 0) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
608 |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
609 # Retrieve all issues with title containing |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
610 # foo3, closed and normal in this order using title filter |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
611 form = cgi.FieldStorage() |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
612 form.list = [ |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
613 cgi.MiniFieldStorage('title', 'foo3 closed normal') |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
614 ] |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
615 results = self.server.get_collection('issue', form) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
616 self.assertEqual(self.dummy_client.response_code, 200) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
617 self.assertNotIn(get_obj(base_path, issue_closed_crit), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
618 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
619 self.assertIn(get_obj(base_path, issue_closed_norm), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
620 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
621 self.assertNotIn(get_obj(base_path, issue_open_crit), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
622 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
623 self.assertNotIn(get_obj(base_path, issue_open_norm), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
624 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
625 self.assertEqual(len(results['data']['collection']), 1) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
626 |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
627 # Retrieve all issues with word closed in title |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
628 form = cgi.FieldStorage() |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
629 form.list = [ |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
630 cgi.MiniFieldStorage('title', 'closed'), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
631 ] |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
632 results = self.server.get_collection('issue', form) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
633 self.assertEqual(self.dummy_client.response_code, 200) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
634 self.assertIn(get_obj(base_path, issue_closed_crit), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
635 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
636 self.assertIn(get_obj(base_path, issue_closed_norm), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
637 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
638 self.assertNotIn(get_obj(base_path, issue_open_crit), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
639 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
640 self.assertNotIn(get_obj(base_path, issue_open_norm), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
641 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
642 self.assertEqual(len(results['data']['collection']), 2) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
643 |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
644 def testPagination(self): |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
645 """ |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
646 Test pagination. page_size is required and is an integer |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
647 starting at 1. page_index is optional and is an integer |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
648 starting at 1. Verify that pagination links are present |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
649 if paging, @total_size and X-Count-Total header match |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
650 number of items. |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
651 """ |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
652 # create sample data |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
653 for i in range(0, random.randint(8,15)): |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
654 self.db.issue.create(title='foo' + str(i)) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
655 |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
656 # Retrieving all the issues |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
657 results = self.server.get_collection('issue', self.empty_form) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
658 self.assertEqual(self.dummy_client.response_code, 200) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
659 total_length = len(results['data']['collection']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
660 # Verify no pagination links if paging not used |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
661 self.assertFalse('@links' in results['data']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
662 self.assertEqual(results['data']['@total_size'], total_length) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
663 self.assertEqual( |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
664 self.dummy_client.additional_headers["X-Count-Total"], |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
665 str(total_length) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
666 ) |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
667 |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
668 |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
669 # Pagination will be 45% of the total result |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
670 # So 2 full pages and 1 partial page. |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
671 page_size = total_length * 45 // 100 |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
672 page_one_expected = page_size |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
673 page_two_expected = page_size |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
674 page_three_expected = total_length - (2*page_one_expected) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
675 base_url="http://tracker.example/cgi-bin/roundup.cgi/" \ |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
676 "bugs/rest/data/issue" |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
677 |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
678 # Retrieve page 1 |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
679 form = cgi.FieldStorage() |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
680 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
681 cgi.MiniFieldStorage('@page_size', page_size), |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
682 cgi.MiniFieldStorage('@page_index', 1) |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
683 ] |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
684 results = self.server.get_collection('issue', form) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
685 self.assertEqual(self.dummy_client.response_code, 200) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
686 self.assertEqual(len(results['data']['collection']), |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
687 page_one_expected) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
688 self.assertTrue('@links' in results['data']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
689 self.assertTrue('self' in results['data']['@links']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
690 self.assertTrue('next' in results['data']['@links']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
691 self.assertFalse('prev' in results['data']['@links']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
692 self.assertEqual(results['data']['@links']['self'][0]['uri'], |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
693 "%s?@page_index=1&@page_size=%s"%(base_url,page_size)) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
694 self.assertEqual(results['data']['@links']['next'][0]['uri'], |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
695 "%s?@page_index=2&@page_size=%s"%(base_url,page_size)) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
696 |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
697 page_one_results = results # save this for later |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
698 |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
699 # Retrieve page 2 |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
700 form = cgi.FieldStorage() |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
701 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
702 cgi.MiniFieldStorage('@page_size', page_size), |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
703 cgi.MiniFieldStorage('@page_index', 2) |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
704 ] |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
705 results = self.server.get_collection('issue', form) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
706 self.assertEqual(self.dummy_client.response_code, 200) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
707 self.assertEqual(len(results['data']['collection']), page_two_expected) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
708 self.assertTrue('@links' in results['data']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
709 self.assertTrue('self' in results['data']['@links']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
710 self.assertTrue('next' in results['data']['@links']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
711 self.assertTrue('prev' in results['data']['@links']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
712 self.assertEqual(results['data']['@links']['self'][0]['uri'], |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
713 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue?@page_index=2&@page_size=%s"%page_size) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
714 self.assertEqual(results['data']['@links']['next'][0]['uri'], |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
715 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue?@page_index=3&@page_size=%s"%page_size) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
716 self.assertEqual(results['data']['@links']['prev'][0]['uri'], |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
717 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue?@page_index=1&@page_size=%s"%page_size) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
718 self.assertEqual(results['data']['@links']['self'][0]['rel'], |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
719 'self') |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
720 self.assertEqual(results['data']['@links']['next'][0]['rel'], |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
721 'next') |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
722 self.assertEqual(results['data']['@links']['prev'][0]['rel'], |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
723 'prev') |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
724 |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
725 # Retrieve page 3 |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
726 form = cgi.FieldStorage() |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
727 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
728 cgi.MiniFieldStorage('@page_size', page_size), |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
729 cgi.MiniFieldStorage('@page_index', 3) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
730 ] |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
731 results = self.server.get_collection('issue', form) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
732 self.assertEqual(self.dummy_client.response_code, 200) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
733 self.assertEqual(len(results['data']['collection']), page_three_expected) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
734 self.assertTrue('@links' in results['data']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
735 self.assertTrue('self' in results['data']['@links']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
736 self.assertFalse('next' in results['data']['@links']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
737 self.assertTrue('prev' in results['data']['@links']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
738 self.assertEqual(results['data']['@links']['self'][0]['uri'], |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
739 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue?@page_index=3&@page_size=%s"%page_size) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
740 self.assertEqual(results['data']['@links']['prev'][0]['uri'], |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
741 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue?@page_index=2&@page_size=%s"%page_size) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
742 |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
743 # Verify that page_index is optional |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
744 # Should start at page 1 |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
745 form = cgi.FieldStorage() |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
746 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
747 cgi.MiniFieldStorage('@page_size', page_size), |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
748 ] |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
749 results = self.server.get_collection('issue', form) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
750 self.assertEqual(self.dummy_client.response_code, 200) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
751 self.assertEqual(len(results['data']['collection']), page_size) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
752 self.assertTrue('@links' in results['data']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
753 self.assertTrue('self' in results['data']['@links']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
754 self.assertTrue('next' in results['data']['@links']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
755 self.assertFalse('prev' in results['data']['@links']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
756 self.assertEqual(page_one_results, results) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
757 |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
758 # FIXME add tests for out of range once we decide what response |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
759 # is needed to: |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
760 # page_size < 0 |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
761 # page_index < 0 |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
762 |
|
5732
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
763 def testRestRateLimit(self): |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
764 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
765 self.db.config['WEB_API_CALLS_PER_INTERVAL'] = 20 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
766 self.db.config['WEB_API_INTERVAL_IN_SEC'] = 60 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
767 |
|
5733
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
768 # Otk code never passes through the |
|
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
769 # retry loop. Not sure why but I can force it |
|
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
770 # through the loop by setting the internal _db_type |
|
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
771 # setting once the db is created by the previous command. |
|
5734
5cd9ac3daed7
Fixes for mysql and postgresql primary db.
John Rouillard <rouilj@ieee.org>
parents:
5733
diff
changeset
|
772 try: |
|
5cd9ac3daed7
Fixes for mysql and postgresql primary db.
John Rouillard <rouilj@ieee.org>
parents:
5733
diff
changeset
|
773 self.db.Otk._db_type = whichdb("%s/%s"%(self.db.Otk.dir, self.db.Otk.name)) |
|
5cd9ac3daed7
Fixes for mysql and postgresql primary db.
John Rouillard <rouilj@ieee.org>
parents:
5733
diff
changeset
|
774 except AttributeError: |
|
5cd9ac3daed7
Fixes for mysql and postgresql primary db.
John Rouillard <rouilj@ieee.org>
parents:
5733
diff
changeset
|
775 # if dir attribute doesn't exist the primary db is not |
|
5cd9ac3daed7
Fixes for mysql and postgresql primary db.
John Rouillard <rouilj@ieee.org>
parents:
5733
diff
changeset
|
776 # sqlite or anydbm. So don't need to exercise code. |
|
5cd9ac3daed7
Fixes for mysql and postgresql primary db.
John Rouillard <rouilj@ieee.org>
parents:
5733
diff
changeset
|
777 pass |
|
5733
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
778 |
|
5732
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
779 print("Now realtime start:", datetime.utcnow()) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
780 # don't set an accept header; json should be the default |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
781 # use up all our allowed api calls |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
782 for i in range(20): |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
783 # i is 0 ... 19 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
784 self.client_error_message = [] |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
785 results = self.server.dispatch('GET', |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
786 "/rest/data/user/%s/realname"%self.joeid, |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
787 self.empty_form) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
788 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
789 # is successful |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
790 self.assertEqual(self.server.client.response_code, 200) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
791 # does not have Retry-After header as we have |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
792 # suceeded with this query |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
793 self.assertFalse("Retry-After" in |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
794 self.server.client.additional_headers) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
795 # remaining count is correct |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
796 self.assertEqual( |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
797 self.server.client.additional_headers["X-RateLimit-Remaining"], |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
798 self.db.config['WEB_API_CALLS_PER_INTERVAL'] -1 - i |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
799 ) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
800 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
801 # trip limit |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
802 self.server.client.additional_headers.clear() |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
803 results = self.server.dispatch('GET', |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
804 "/rest/data/user/%s/realname"%self.joeid, |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
805 self.empty_form) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
806 print(results) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
807 self.assertEqual(self.server.client.response_code, 429) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
808 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
809 self.assertEqual( |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
810 self.server.client.additional_headers["X-RateLimit-Limit"], |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
811 self.db.config['WEB_API_CALLS_PER_INTERVAL']) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
812 self.assertEqual( |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
813 self.server.client.additional_headers["X-RateLimit-Limit-Period"], |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
814 self.db.config['WEB_API_INTERVAL_IN_SEC']) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
815 self.assertEqual( |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
816 self.server.client.additional_headers["X-RateLimit-Remaining"], |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
817 0) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
818 # value will be almost 60. Allow 1-2 seconds for all 20 rounds. |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
819 self.assertAlmostEqual( |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
820 self.server.client.additional_headers["X-RateLimit-Reset"], |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
821 59, delta=1) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
822 self.assertEqual( |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
823 str(self.server.client.additional_headers["Retry-After"]), |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
824 "3.0") # check as string |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
825 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
826 print("Reset:", self.server.client.additional_headers["X-RateLimit-Reset"]) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
827 print("Now realtime pre-sleep:", datetime.utcnow()) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
828 sleep(3.1) # sleep as requested so we can do another login |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
829 print("Now realtime post-sleep:", datetime.utcnow()) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
830 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
831 # this should succeed |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
832 self.server.client.additional_headers.clear() |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
833 results = self.server.dispatch('GET', |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
834 "/rest/data/user/%s/realname"%self.joeid, |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
835 self.empty_form) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
836 print(results) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
837 print("Reset:", self.server.client.additional_headers["X-RateLimit-Reset-date"]) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
838 print("Now realtime:", datetime.utcnow()) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
839 print("Now ts header:", self.server.client.additional_headers["Now"]) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
840 print("Now date header:", self.server.client.additional_headers["Now-date"]) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
841 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
842 self.assertEqual(self.server.client.response_code, 200) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
843 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
844 self.assertEqual( |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
845 self.server.client.additional_headers["X-RateLimit-Limit"], |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
846 self.db.config['WEB_API_CALLS_PER_INTERVAL']) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
847 self.assertEqual( |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
848 self.server.client.additional_headers["X-RateLimit-Limit-Period"], |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
849 self.db.config['WEB_API_INTERVAL_IN_SEC']) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
850 self.assertEqual( |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
851 self.server.client.additional_headers["X-RateLimit-Remaining"], |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
852 0) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
853 self.assertFalse("Retry-After" in |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
854 self.server.client.additional_headers) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
855 # we still need to wait a minute for everything to clear |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
856 self.assertAlmostEqual( |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
857 self.server.client.additional_headers["X-RateLimit-Reset"], |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
858 59, delta=1) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
859 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
860 # and make sure we need to wait another three seconds |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
861 # as we consumed the last api call |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
862 results = self.server.dispatch('GET', |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
863 "/rest/data/user/%s/realname"%self.joeid, |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
864 self.empty_form) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
865 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
866 self.assertEqual(self.server.client.response_code, 429) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
867 self.assertEqual( |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
868 str(self.server.client.additional_headers["Retry-After"]), |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
869 "3.0") # check as string |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
870 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
871 json_dict = json.loads(b2s(results)) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
872 self.assertEqual(json_dict['error']['msg'], |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
873 "Api rate limits exceeded. Please wait: 3 seconds.") |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
874 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
875 # reset rest params |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
876 self.db.config['WEB_API_CALLS_PER_INTERVAL'] = 0 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
877 self.db.config['WEB_API_INTERVAL_IN_SEC'] = 3600 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
878 |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
879 def testEtagGeneration(self): |
|
5668
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
880 ''' Make sure etag generation is stable |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
881 |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
882 This mocks date.Date() when creating the target to be |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
883 etagged. Differing dates make this test impossible. |
|
5668
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
884 ''' |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
885 from roundup import date |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
886 |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
887 originalDate = date.Date |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
888 |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
889 dummy=date.Date('2000-06-26.00:34:02.0') |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
890 |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
891 # is a closure the best way to return a static Date object?? |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
892 def dummyDate(adate=None): |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
893 def dummyClosure(adate=None, translator=None): |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
894 return dummy |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
895 return dummyClosure |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
896 |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
897 date.Date = dummyDate() |
|
5728
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
898 try: |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
899 newuser = self.db.user.create( |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
900 username='john', |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
901 password=password.Password('random1', scheme='plaintext'), |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
902 address='random1@home.org', |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
903 realname='JohnRandom', |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
904 roles='User,Admin' |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
905 ) |
|
5668
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
906 |
|
5728
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
907 # verify etag matches what we calculated in the past |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
908 node = self.db.user.getnode(newuser) |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
909 etag = calculate_etag(node, self.db.config['WEB_SECRET_KEY']) |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
910 items = node.items(protected=True) # include every item |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
911 print(repr(sorted(items))) |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
912 print(etag) |
|
5729
9ea2ce9d10cf
A few internet references report that etags for the same underlying
John Rouillard <rouilj@ieee.org>
parents:
5728
diff
changeset
|
913 self.assertEqual(etag, '"0433784660a141e8262835171e70fd2f"') |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
914 |
|
5728
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
915 # modify key and verify we have a different etag |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
916 etag = calculate_etag(node, self.db.config['WEB_SECRET_KEY'] + "a") |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
917 items = node.items(protected=True) # include every item |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
918 print(repr(sorted(items))) |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
919 print(etag) |
|
5729
9ea2ce9d10cf
A few internet references report that etags for the same underlying
John Rouillard <rouilj@ieee.org>
parents:
5728
diff
changeset
|
920 self.assertNotEqual(etag, '"0433784660a141e8262835171e70fd2f"') |
|
5668
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
921 |
|
5728
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
922 # change data and verify we have a different etag |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
923 node.username="Paul" |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
924 etag = calculate_etag(node, self.db.config['WEB_SECRET_KEY']) |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
925 items = node.items(protected=True) # include every item |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
926 print(repr(sorted(items))) |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
927 print(etag) |
|
5729
9ea2ce9d10cf
A few internet references report that etags for the same underlying
John Rouillard <rouilj@ieee.org>
parents:
5728
diff
changeset
|
928 self.assertEqual(etag, '"8abeacd284d58655c620d60389e29d4d"') |
|
5728
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
929 finally: |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
930 date.Date = originalDate |
|
5668
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
931 |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
932 def testEtagProcessing(self): |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
933 ''' |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
934 Etags can come from two places: |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
935 If-Match http header |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
936 @etags value posted in the form |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
937 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
938 Both will be checked if availble. If either one |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
939 fails, the etag check will fail. |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
940 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
941 Run over header only, etag in form only, both, |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
942 each one broke and no etag. Use the put command |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
943 to trigger the etag checking code. |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
944 ''' |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
945 for mode in ('header', 'etag', 'both', |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
946 'brokenheader', 'brokenetag', 'none'): |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
947 try: |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
948 # clean up any old header |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
949 del(self.headers) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
950 except AttributeError: |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
951 pass |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
952 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
953 form = cgi.FieldStorage() |
|
5726
e199d0ae4a25
issue2551033: prevent reverse engineering hidden data by using etags
John Rouillard <rouilj@ieee.org>
parents:
5711
diff
changeset
|
954 etag = calculate_etag(self.db.user.getnode(self.joeid), |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
955 self.db.config['WEB_SECRET_KEY']) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
956 form.list = [ |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
957 cgi.MiniFieldStorage('data', 'Joe Doe Doe'), |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
958 ] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
959 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
960 if mode == 'header': |
|
5645
7f4d19867123
Make print into function call for python3 compatibility.
John Rouillard <rouilj@ieee.org>
parents:
5643
diff
changeset
|
961 print("Mode = %s"%mode) |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
962 self.headers = {'if-match': etag} |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
963 elif mode == 'etag': |
|
5645
7f4d19867123
Make print into function call for python3 compatibility.
John Rouillard <rouilj@ieee.org>
parents:
5643
diff
changeset
|
964 print("Mode = %s"%mode) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
965 form.list.append(cgi.MiniFieldStorage('@etag', etag)) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
966 elif mode == 'both': |
|
5645
7f4d19867123
Make print into function call for python3 compatibility.
John Rouillard <rouilj@ieee.org>
parents:
5643
diff
changeset
|
967 print("Mode = %s"%mode) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
968 self.headers = {'etag': etag} |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
969 form.list.append(cgi.MiniFieldStorage('@etag', etag)) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
970 elif mode == 'brokenheader': |
|
5645
7f4d19867123
Make print into function call for python3 compatibility.
John Rouillard <rouilj@ieee.org>
parents:
5643
diff
changeset
|
971 print("Mode = %s"%mode) |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
972 self.headers = {'if-match': 'bad'} |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
973 form.list.append(cgi.MiniFieldStorage('@etag', etag)) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
974 elif mode == 'brokenetag': |
|
5645
7f4d19867123
Make print into function call for python3 compatibility.
John Rouillard <rouilj@ieee.org>
parents:
5643
diff
changeset
|
975 print("Mode = %s"%mode) |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
976 self.headers = {'if-match': etag} |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
977 form.list.append(cgi.MiniFieldStorage('@etag', 'bad')) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
978 elif mode == 'none': |
|
5645
7f4d19867123
Make print into function call for python3 compatibility.
John Rouillard <rouilj@ieee.org>
parents:
5643
diff
changeset
|
979 print( "Mode = %s"%mode) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
980 else: |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
981 self.fail("unknown mode found") |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
982 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
983 results = self.server.put_attribute( |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
984 'user', self.joeid, 'realname', form |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
985 ) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
986 if mode not in ('brokenheader', 'brokenetag', 'none'): |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
987 self.assertEqual(self.dummy_client.response_code, 200) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
988 else: |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
989 self.assertEqual(self.dummy_client.response_code, 412) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
990 |
|
5690
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
991 def testDispatchPost(self): |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
992 """ |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
993 run POST through rest dispatch(). This also tests |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
994 sending json payload through code as dispatch is the |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
995 code that changes json payload into something we can |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
996 process. |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
997 """ |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
998 |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
999 # TEST #0 |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1000 # POST: issue make joe assignee and admin and demo as |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1001 # nosy |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1002 # simulate: /rest/data/issue |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1003 body=b'{ "title": "Joe Doe has problems", \ |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1004 "nosy": [ "1", "3" ], \ |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1005 "assignedto": "2", \ |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1006 "abool": true, \ |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1007 "afloat": 2.3, \ |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1008 "anint": 567890 \ |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1009 }' |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1010 env = { "CONTENT_TYPE": "application/json", |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1011 "CONTENT_LENGTH": len(body), |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1012 "REQUEST_METHOD": "POST" |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1013 } |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1014 headers={"accept": "application/json; version=1", |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1015 "content-type": env['CONTENT_TYPE'], |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1016 "content-length": env['CONTENT_LENGTH'], |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1017 } |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1018 self.headers=headers |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1019 # we need to generate a FieldStorage the looks like |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1020 # FieldStorage(None, None, 'string') rather than |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1021 # FieldStorage(None, None, []) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1022 body_file=BytesIO(body) # FieldStorage needs a file |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1023 form = client.BinaryFieldStorage(body_file, |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1024 headers=headers, |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1025 environ=env) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1026 self.server.client.request.headers.get=self.get_header |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1027 results = self.server.dispatch(env["REQUEST_METHOD"], |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1028 "/rest/data/issue", |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1029 form) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1030 |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1031 print(results) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1032 self.assertEqual(self.server.client.response_code, 201) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1033 json_dict = json.loads(b2s(results)) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1034 self.assertEqual(json_dict['data']['link'], |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1035 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/1") |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1036 self.assertEqual(json_dict['data']['id'], "1") |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1037 results = self.server.dispatch('GET', |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1038 "/rest/data/issue/1", self.empty_form) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1039 print(results) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1040 json_dict = json.loads(b2s(results)) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1041 self.assertEqual(json_dict['data']['link'], |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1042 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/1") |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1043 self.assertEqual(json_dict['data']['attributes']['abool'], True) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1044 self.assertEqual(json_dict['data']['attributes']['afloat'], 2.3) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1045 self.assertEqual(json_dict['data']['attributes']['anint'], 567890) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1046 self.assertEqual(len(json_dict['data']['attributes']['nosy']), 3) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1047 self.assertEqual(json_dict['data']['attributes']\ |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1048 ['assignedto']['link'], |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1049 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/2") |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1050 |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1051 |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1052 def testDispatch(self): |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1053 """ |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1054 run changes through rest dispatch(). This also tests |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1055 sending json payload through code as dispatch is the |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1056 code that changes json payload into something we can |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1057 process. |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1058 """ |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1059 # TEST #1 |
|
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1060 # PUT: joe's 'realname' using json data. |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1061 # simulate: /rest/data/user/<id>/realname |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1062 # use etag in header |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1063 etag = calculate_etag(self.db.user.getnode(self.joeid), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1064 self.db.config['WEB_SECRET_KEY']) |
|
5651
a02ef29b4242
Fix REST tests for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5650
diff
changeset
|
1065 body=b'{ "data": "Joe Doe 1" }' |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1066 env = { "CONTENT_TYPE": "application/json", |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1067 "CONTENT_LENGTH": len(body), |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1068 "REQUEST_METHOD": "PUT" |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1069 } |
|
5686
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1070 headers={"accept": "application/json; version=1", |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1071 "content-type": env['CONTENT_TYPE'], |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1072 "content-length": env['CONTENT_LENGTH'], |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1073 "if-match": etag |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1074 } |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1075 self.headers=headers |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1076 # we need to generate a FieldStorage the looks like |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1077 # FieldStorage(None, None, 'string') rather than |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1078 # FieldStorage(None, None, []) |
|
5651
a02ef29b4242
Fix REST tests for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5650
diff
changeset
|
1079 body_file=BytesIO(body) # FieldStorage needs a file |
|
5656
d26d2590cd8c
Implement different workaround for https://bugs.python.org/issue27777
John Rouillard <rouilj@ieee.org>
parents:
5655
diff
changeset
|
1080 form = client.BinaryFieldStorage(body_file, |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1081 headers=headers, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1082 environ=env) |
|
5650
e8ca7072c629
Fix Python 3 issues in REST code.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5647
diff
changeset
|
1083 self.server.client.request.headers.get=self.get_header |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1084 results = self.server.dispatch('PUT', |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1085 "/rest/data/user/%s/realname"%self.joeid, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1086 form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1087 |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1088 self.assertEqual(self.server.client.response_code, 200) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1089 results = self.server.get_element('user', self.joeid, self.empty_form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1090 self.assertEqual(self.dummy_client.response_code, 200) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1091 self.assertEqual(results['data']['attributes']['realname'], |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1092 'Joe Doe 1') |
|
5686
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1093 |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1094 |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1095 # substitute the version with an unacceptable version |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1096 # and verify it returns 400 code. |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1097 self.headers["accept"] = "application/json; version=1.1" |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1098 body_file=BytesIO(body) # FieldStorage needs a file |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1099 form = client.BinaryFieldStorage(body_file, |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1100 headers=headers, |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1101 environ=env) |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1102 self.server.client.request.headers.get=self.get_header |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1103 results = self.server.dispatch('PUT', |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1104 "/rest/data/user/%s/realname"%self.joeid, |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1105 form) |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1106 self.assertEqual(self.server.client.response_code, 400) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1107 del(self.headers) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1108 |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1109 # TEST #2 |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1110 # Set joe's 'realname' using json data. |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1111 # simulate: /rest/data/user/<id>/realname |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1112 # use etag in payload |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1113 etag = calculate_etag(self.db.user.getnode(self.joeid), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1114 self.db.config['WEB_SECRET_KEY']) |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1115 etagb = etag.strip ('"') |
|
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1116 body=s2b('{ "@etag": "\\"%s\\"", "data": "Joe Doe 2" }'%etagb) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1117 env = { "CONTENT_TYPE": "application/json", |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1118 "CONTENT_LENGTH": len(body), |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1119 "REQUEST_METHOD": "PUT", |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1120 } |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1121 self.headers=None # have FieldStorage get len from env. |
|
5651
a02ef29b4242
Fix REST tests for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5650
diff
changeset
|
1122 body_file=BytesIO(body) # FieldStorage needs a file |
|
5656
d26d2590cd8c
Implement different workaround for https://bugs.python.org/issue27777
John Rouillard <rouilj@ieee.org>
parents:
5655
diff
changeset
|
1123 form = client.BinaryFieldStorage(body_file, |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1124 headers=None, |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1125 environ=env) |
|
5650
e8ca7072c629
Fix Python 3 issues in REST code.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5647
diff
changeset
|
1126 self.server.client.request.headers.get=self.get_header |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1127 |
|
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1128 headers={"accept": "application/json", |
|
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1129 "content-type": env['CONTENT_TYPE'], |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1130 "if-match": etag |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1131 } |
|
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1132 self.headers=headers # set for dispatch |
|
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1133 |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1134 results = self.server.dispatch('PUT', |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1135 "/rest/data/user/%s/realname"%self.joeid, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1136 form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1137 |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1138 self.assertEqual(self.server.client.response_code, 200) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1139 results = self.server.get_element('user', self.joeid, self.empty_form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1140 self.assertEqual(self.dummy_client.response_code, 200) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1141 self.assertEqual(results['data']['attributes']['realname'], |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1142 'Joe Doe 2') |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1143 del(self.headers) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1144 |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1145 # TEST #3 |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1146 # change Joe's realname via a normal web form |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1147 # This generates a FieldStorage that looks like: |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1148 # FieldStorage(None, None, []) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1149 # use etag from header |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1150 # |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1151 # Also use GET on the uri via the dispatch to retrieve |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1152 # the results from the db. |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1153 etag = calculate_etag(self.db.user.getnode(self.joeid), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1154 self.db.config['WEB_SECRET_KEY']) |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1155 headers={"if-match": etag, |
|
5686
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1156 "accept": "application/vnd.json.test-v1+json", |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1157 } |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1158 form = cgi.FieldStorage() |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1159 form.list = [ |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1160 cgi.MiniFieldStorage('data', 'Joe Doe'), |
|
5686
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1161 cgi.MiniFieldStorage('@apiver', '1'), |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1162 ] |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1163 self.headers = headers |
|
5650
e8ca7072c629
Fix Python 3 issues in REST code.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5647
diff
changeset
|
1164 self.server.client.request.headers.get = self.get_header |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1165 results = self.server.dispatch('PUT', |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1166 "/rest/data/user/%s/realname"%self.joeid, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1167 form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1168 self.assertEqual(self.dummy_client.response_code, 200) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1169 results = self.server.dispatch('GET', |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1170 "/rest/data/user/%s/realname"%self.joeid, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1171 self.empty_form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1172 self.assertEqual(self.dummy_client.response_code, 200) |
|
5651
a02ef29b4242
Fix REST tests for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5650
diff
changeset
|
1173 json_dict = json.loads(b2s(results)) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1174 |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1175 self.assertEqual(json_dict['data']['data'], 'Joe Doe') |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1176 self.assertEqual(json_dict['data']['link'], |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1177 "http://tracker.example/cgi-bin/" |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1178 "roundup.cgi/bugs/rest/data/user/3/realname") |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1179 self.assertIn(json_dict['data']['type'], ("<class 'str'>", |
|
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1180 "<type 'str'>")) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1181 self.assertEqual(json_dict['data']["id"], "3") |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1182 del(self.headers) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1183 |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1184 |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1185 # TEST #4 |
|
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1186 # PATCH: joe's email address with json |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1187 # save address so we can use it later |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1188 stored_results = self.server.get_element('user', self.joeid, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1189 self.empty_form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1190 self.assertEqual(self.dummy_client.response_code, 200) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1191 |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1192 etag = calculate_etag(self.db.user.getnode(self.joeid), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1193 self.db.config['WEB_SECRET_KEY']) |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1194 etagb = etag.strip ('"') |
|
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1195 body=s2b('{ "address": "demo2@example.com", "@etag": "\\"%s\\""}'%etagb) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1196 env = { "CONTENT_TYPE": "application/json", |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1197 "CONTENT_LENGTH": len(body), |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1198 "REQUEST_METHOD": "PATCH" |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1199 } |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1200 headers={"accept": "application/json", |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1201 "content-type": env['CONTENT_TYPE'], |
|
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1202 "content-length": len(body) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1203 } |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1204 self.headers=headers |
|
5651
a02ef29b4242
Fix REST tests for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5650
diff
changeset
|
1205 body_file=BytesIO(body) # FieldStorage needs a file |
|
5656
d26d2590cd8c
Implement different workaround for https://bugs.python.org/issue27777
John Rouillard <rouilj@ieee.org>
parents:
5655
diff
changeset
|
1206 form = client.BinaryFieldStorage(body_file, |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1207 headers=headers, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1208 environ=env) |
|
5650
e8ca7072c629
Fix Python 3 issues in REST code.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5647
diff
changeset
|
1209 self.server.client.request.headers.get=self.get_header |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1210 results = self.server.dispatch('PATCH', |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1211 "/rest/data/user/%s"%self.joeid, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1212 form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1213 |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1214 self.assertEqual(self.server.client.response_code, 200) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1215 results = self.server.get_element('user', self.joeid, self.empty_form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1216 self.assertEqual(self.dummy_client.response_code, 200) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1217 self.assertEqual(results['data']['attributes']['address'], |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1218 'demo2@example.com') |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1219 |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1220 # and set it back reusing env and headers from last test |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1221 etag = calculate_etag(self.db.user.getnode(self.joeid), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1222 self.db.config['WEB_SECRET_KEY']) |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1223 etagb = etag.strip ('"') |
|
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1224 body=s2b('{ "address": "%s", "@etag": "\\"%s\\""}'%( |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1225 stored_results['data']['attributes']['address'], |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1226 etagb)) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1227 # reuse env and headers from prior test. |
|
5651
a02ef29b4242
Fix REST tests for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5650
diff
changeset
|
1228 body_file=BytesIO(body) # FieldStorage needs a file |
|
5656
d26d2590cd8c
Implement different workaround for https://bugs.python.org/issue27777
John Rouillard <rouilj@ieee.org>
parents:
5655
diff
changeset
|
1229 form = client.BinaryFieldStorage(body_file, |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1230 headers=headers, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1231 environ=env) |
|
5650
e8ca7072c629
Fix Python 3 issues in REST code.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5647
diff
changeset
|
1232 self.server.client.request.headers.get=self.get_header |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1233 results = self.server.dispatch('PATCH', |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1234 "/rest/data/user/%s"%self.joeid, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1235 form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1236 |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1237 self.assertEqual(self.server.client.response_code, 200) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1238 results = self.server.get_element('user', self.joeid, self.empty_form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1239 self.assertEqual(self.dummy_client.response_code, 200) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1240 self.assertEqual(results['data']['attributes']['address'], |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1241 'random@home.org') |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1242 del(self.headers) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1243 |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1244 # TEST #5 |
|
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1245 # POST: create new issue |
|
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1246 # no etag needed |
|
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1247 etag = "not needed" |
|
5651
a02ef29b4242
Fix REST tests for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5650
diff
changeset
|
1248 body=b'{ "title": "foo bar", "priority": "critical" }' |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1249 env = { "CONTENT_TYPE": "application/json", |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1250 "CONTENT_LENGTH": len(body), |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1251 "REQUEST_METHOD": "POST" |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1252 } |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1253 headers={"accept": "application/json", |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1254 "content-type": env['CONTENT_TYPE'], |
|
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1255 "content-length": len(body) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1256 } |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1257 self.headers=headers |
|
5651
a02ef29b4242
Fix REST tests for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5650
diff
changeset
|
1258 body_file=BytesIO(body) # FieldStorage needs a file |
|
5656
d26d2590cd8c
Implement different workaround for https://bugs.python.org/issue27777
John Rouillard <rouilj@ieee.org>
parents:
5655
diff
changeset
|
1259 form = client.BinaryFieldStorage(body_file, |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1260 headers=headers, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1261 environ=env) |
|
5650
e8ca7072c629
Fix Python 3 issues in REST code.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5647
diff
changeset
|
1262 self.server.client.request.headers.get=self.get_header |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1263 results = self.server.dispatch('POST', |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1264 "/rest/data/issue", |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1265 form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1266 |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1267 self.assertEqual(self.server.client.response_code, 201) |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1268 json_dict = json.loads(b2s(results)) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1269 issue_id=json_dict['data']['id'] |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1270 results = self.server.get_element('issue', |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1271 str(issue_id), # must be a string not unicode |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1272 self.empty_form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1273 self.assertEqual(self.dummy_client.response_code, 200) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1274 self.assertEqual(results['data']['attributes']['title'], |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1275 'foo bar') |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1276 |
|
5711
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1277 # TEST #6 |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1278 # POST: an invalid class |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1279 # no etag needed |
|
5710
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1280 etag = "not needed" |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1281 body=b'{ "title": "foo bar", "priority": "critical" }' |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1282 env = { "CONTENT_TYPE": "application/json", |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1283 "CONTENT_LENGTH": len(body), |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1284 "REQUEST_METHOD": "POST" |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1285 } |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1286 headers={"accept": "application/json", |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1287 "content-type": env['CONTENT_TYPE'], |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1288 "content-length": len(body) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1289 } |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1290 self.headers=headers |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1291 body_file=BytesIO(body) # FieldStorage needs a file |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1292 form = client.BinaryFieldStorage(body_file, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1293 headers=headers, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1294 environ=env) |
|
5711
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1295 self.server.client.request.headers.get=self.get_header |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1296 results = self.server.dispatch('POST', |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1297 "/rest/data/nonissue", |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1298 form) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1299 |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1300 self.assertEqual(self.server.client.response_code, 404) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1301 json_dict = json.loads(b2s(results)) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1302 status=json_dict['error']['status'] |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1303 msg=json_dict['error']['msg'] |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1304 self.assertEqual(status, 404) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1305 self.assertEqual(msg, 'Class nonissue not found') |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1306 |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1307 # TEST #7 |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1308 # POST: status without key field of name |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1309 # also test that version spec in accept header is accepted |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1310 # no etag needed |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1311 etag = "not needed" |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1312 body=b'{ "order": 5 }' |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1313 env = { "CONTENT_TYPE": "application/json", |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1314 "CONTENT_LENGTH": len(body), |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1315 "REQUEST_METHOD": "POST" |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1316 } |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1317 headers={"accept": "application/json; version=1", |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1318 "content-type": env['CONTENT_TYPE'], |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1319 "content-length": len(body) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1320 } |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1321 self.headers=headers |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1322 body_file=BytesIO(body) # FieldStorage needs a file |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1323 form = client.BinaryFieldStorage(body_file, |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1324 headers=headers, |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1325 environ=env) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1326 self.server.client.request.headers.get=self.get_header |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1327 self.db.setCurrentUser('admin') # must be admin to create status |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1328 results = self.server.dispatch('POST', |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1329 "/rest/data/status", |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1330 form) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1331 |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1332 self.assertEqual(self.server.client.response_code, 400) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1333 json_dict = json.loads(b2s(results)) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1334 status=json_dict['error']['status'] |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1335 msg=json_dict['error']['msg'] |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1336 self.assertEqual(status, 400) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1337 self.assertEqual(msg, "Must provide the 'name' property.") |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1338 |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1339 |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1340 # TEST #8 |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1341 # DELETE: delete issue 1 |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1342 etag = calculate_etag(self.db.issue.getnode("1"), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1343 self.db.config['WEB_SECRET_KEY']) |
|
5711
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1344 etagb = etag.strip ('"') |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1345 env = {"CONTENT_TYPE": "application/json", |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1346 "CONTENT_LEN": 0, |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1347 "REQUEST_METHOD": "DELETE" } |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1348 # use text/plain header and request json output by appending |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1349 # .json to the url. |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1350 headers={"accept": "text/plain", |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1351 "content-type": env['CONTENT_TYPE'], |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1352 "if-match": '"%s"'%etagb, |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1353 "content-length": 0, |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1354 } |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1355 self.headers=headers |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1356 body_file=BytesIO(b'') # FieldStorage needs a file |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1357 form = client.BinaryFieldStorage(body_file, |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1358 headers=headers, |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1359 environ=env) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1360 self.server.client.request.headers.get=self.get_header |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1361 self.db.setCurrentUser('admin') # must be admin to delete issue |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1362 results = self.server.dispatch('DELETE', |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1363 "/rest/data/issue/1.json", |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1364 form) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1365 self.assertEqual(self.server.client.response_code, 200) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1366 json_dict = json.loads(b2s(results)) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1367 print(results) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1368 status=json_dict['data']['status'] |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1369 self.assertEqual(status, 'ok') |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1370 |
|
5741
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1371 # TEST #9 |
|
5742
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1372 # GET: test that version can be set with accept: |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1373 # ... ; version=z |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1374 # or |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1375 # application/vnd.x.y-vz+json |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1376 # or |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1377 # @apiver |
|
5741
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1378 # simulate: /rest/data/issue |
|
5742
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1379 form = cgi.FieldStorage() |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1380 form.list = [ |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1381 cgi.MiniFieldStorage('@apiver', 'L'), |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1382 ] |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1383 headers={"accept": "application/json; notversion=z" } |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1384 self.headers=headers |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1385 self.server.client.request.headers.get=self.get_header |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1386 results = self.server.dispatch('GET', |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1387 "/rest/data/issue/1", form) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1388 print(results) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1389 json_dict = json.loads(b2s(results)) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1390 self.assertEqual(json_dict['error']['status'], 400) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1391 self.assertEqual(json_dict['error']['msg'], |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1392 "Unrecognized version: L. See /rest without " |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1393 "specifying version for supported versions.") |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1394 |
|
5741
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1395 headers={"accept": "application/json; version=z" } |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1396 self.headers=headers |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1397 self.server.client.request.headers.get=self.get_header |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1398 results = self.server.dispatch('GET', |
|
5742
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1399 "/rest/data/issue/1", form) |
|
5741
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1400 print(results) |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1401 json_dict = json.loads(b2s(results)) |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1402 self.assertEqual(json_dict['error']['status'], 400) |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1403 self.assertEqual(json_dict['error']['msg'], |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1404 "Unrecognized version: z. See /rest without " |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1405 "specifying version for supported versions.") |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1406 |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1407 headers={"accept": "application/vnd.roundup.test-vz+json" } |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1408 self.headers=headers |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1409 self.server.client.request.headers.get=self.get_header |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1410 results = self.server.dispatch('GET', |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1411 "/rest/data/issue/1", self.empty_form) |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1412 print(results) |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1413 self.assertEqual(self.server.client.response_code, 400) |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1414 json_dict = json.loads(b2s(results)) |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1415 self.assertEqual(json_dict['error']['status'], 400) |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1416 self.assertEqual(json_dict['error']['msg'], |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1417 "Unrecognized version: z. See /rest without " |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1418 "specifying version for supported versions.") |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1419 |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1420 # verify that version priority is correct; should be version=... |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1421 headers={"accept": "application/vnd.roundup.test-vz+json; version=a" |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1422 } |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1423 self.headers=headers |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1424 self.server.client.request.headers.get=self.get_header |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1425 results = self.server.dispatch('GET', |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1426 "/rest/data/issue/1", self.empty_form) |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1427 print(results) |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1428 self.assertEqual(self.server.client.response_code, 400) |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1429 json_dict = json.loads(b2s(results)) |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1430 self.assertEqual(json_dict['error']['status'], 400) |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1431 self.assertEqual(json_dict['error']['msg'], |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1432 "Unrecognized version: a. See /rest without " |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1433 "specifying version for supported versions.") |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
1434 |
|
5742
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1435 # TEST #10 |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1436 # check /rest and /rest/summary and /rest/notthere |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1437 expected_rest = { |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1438 "data": { |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1439 "supported_versions": [ |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1440 1 |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1441 ], |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1442 "default_version": 1, |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1443 "links": [ |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1444 { |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1445 "rel": "summary", |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1446 "uri": "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/summary" |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1447 }, |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1448 { |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1449 "rel": "self", |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1450 "uri": "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest" |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1451 }, |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1452 { |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1453 "rel": "data", |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1454 "uri": "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data" |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1455 } |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1456 ] |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1457 } |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1458 } |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1459 |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1460 self.headers={} |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1461 results = self.server.dispatch('GET', |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1462 "/rest", self.empty_form) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1463 print(results) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1464 self.assertEqual(self.server.client.response_code, 200) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1465 results_dict = json.loads(b2s(results)) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1466 self.assertEqual(results_dict, expected_rest) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1467 |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1468 |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1469 results = self.server.dispatch('GET', |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1470 "/rest/", self.empty_form) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1471 print(results) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1472 self.assertEqual(self.server.client.response_code, 200) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1473 results_dict = json.loads(b2s(results)) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1474 self.assertEqual(results_dict, expected_rest) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1475 |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1476 results = self.server.dispatch('GET', |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1477 "/rest/summary", self.empty_form) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1478 print(results) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1479 self.assertEqual(self.server.client.response_code, 200) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1480 |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1481 results = self.server.dispatch('GET', |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1482 "/rest/summary/", self.empty_form) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1483 print(results) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1484 self.assertEqual(self.server.client.response_code, 200) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1485 |
| 5746 | 1486 expected_data = { |
| 1487 "data": { | |
| 1488 "issue": { | |
| 1489 "link": "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue" | |
| 1490 }, | |
| 1491 "priority": { | |
| 1492 "link": "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/priority" | |
| 1493 }, | |
| 1494 "user": { | |
| 1495 "link": "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user" | |
| 1496 }, | |
| 1497 "query": { | |
| 1498 "link": "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/query" | |
| 1499 }, | |
| 1500 "status": { | |
| 1501 "link": "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/status" | |
| 1502 }, | |
| 1503 "keyword": { | |
| 1504 "link": "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/keyword" | |
| 1505 }, | |
| 1506 "msg": { | |
| 1507 "link": "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/msg" | |
| 1508 }, | |
| 1509 "file": { | |
| 1510 "link": "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/file" | |
| 1511 } | |
| 1512 } | |
| 1513 } | |
| 1514 | |
| 1515 results = self.server.dispatch('GET', | |
| 1516 "/rest/data", self.empty_form) | |
| 1517 print(results) | |
| 1518 self.assertEqual(self.server.client.response_code, 200) | |
| 1519 results_dict = json.loads(b2s(results)) | |
| 1520 self.assertEqual(results_dict, expected_data) | |
| 1521 | |
| 1522 results = self.server.dispatch('GET', | |
| 1523 "/rest/data/", self.empty_form) | |
| 1524 print(results) | |
| 1525 self.assertEqual(self.server.client.response_code, 200) | |
| 1526 results_dict = json.loads(b2s(results)) | |
| 1527 self.assertEqual(results_dict, expected_data) | |
| 1528 | |
|
5742
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1529 results = self.server.dispatch('GET', |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1530 "/rest/notthere", self.empty_form) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1531 self.assertEqual(self.server.client.response_code, 404) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1532 |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1533 results = self.server.dispatch('GET', |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1534 "/rest/notthere/", self.empty_form) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1535 self.assertEqual(self.server.client.response_code, 404) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
1536 |
|
5711
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1537 del(self.headers) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1538 |
|
5744
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1539 def testAcceptHeaderParsing(self): |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1540 # TEST #1 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1541 # json highest priority |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1542 self.server.client.request.headers.get=self.get_header |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1543 headers={"accept": "application/json; version=1," |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1544 "application/xml; q=0.5; version=2," |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1545 "text/plain; q=0.75; version=2" |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1546 } |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1547 self.headers=headers |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1548 results = self.server.dispatch('GET', |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1549 "/rest/data/status/1", |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1550 self.empty_form) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1551 print(results) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1552 self.assertEqual(self.server.client.response_code, 200) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1553 self.assertEqual(self.server.client.additional_headers['Content-Type'], |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1554 "application/json") |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1555 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1556 # TEST #2 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1557 # text highest priority |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1558 headers={"accept": "application/json; q=0.5; version=1," |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1559 "application/xml; q=0.25; version=2," |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1560 "text/plain; q=1.0; version=3" |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1561 } |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1562 self.headers=headers |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1563 results = self.server.dispatch('GET', |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1564 "/rest/data/status/1", |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1565 self.empty_form) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1566 print(results) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1567 self.assertEqual(self.server.client.response_code, 200) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1568 self.assertEqual(self.server.client.additional_headers['Content-Type'], |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1569 "application/json") |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1570 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1571 # TEST #3 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1572 # no acceptable type |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1573 headers={"accept": "text/plain; q=1.0; version=2" |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1574 } |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1575 self.headers=headers |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1576 results = self.server.dispatch('GET', |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1577 "/rest/data/status/1", |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1578 self.empty_form) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1579 print(results) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1580 self.assertEqual(self.server.client.response_code, 406) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1581 self.assertEqual(self.server.client.additional_headers['Content-Type'], |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1582 "application/json") |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1583 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1584 # TEST #4 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1585 # no accept header, should use default json |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1586 headers={} |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1587 self.headers=headers |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1588 results = self.server.dispatch('GET', |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1589 "/rest/data/status/1", |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1590 self.empty_form) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1591 print(results) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1592 self.assertEqual(self.server.client.response_code, 200) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1593 self.assertEqual(self.server.client.additional_headers['Content-Type'], |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1594 "application/json") |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1595 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1596 # TEST #5 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1597 # wildcard accept header, should use default json |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1598 headers={ "accept": "*/*"} |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1599 self.headers=headers |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1600 results = self.server.dispatch('GET', |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1601 "/rest/data/status/1", |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1602 self.empty_form) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1603 print(results) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1604 self.assertEqual(self.server.client.response_code, 200) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1605 self.assertEqual(self.server.client.additional_headers['Content-Type'], |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1606 "application/json") |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1607 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1608 # TEST #6 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1609 # invalid q factor if not ignored/demoted |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1610 # application/json is selected with invalid version |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1611 # and errors. |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1612 # this ends up choosing */* which triggers json. |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1613 self.server.client.request.headers.get=self.get_header |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1614 headers={"accept": "application/json; q=1.5; version=99," |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1615 "*/*; q=0.9; version=1," |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1616 "text/plain; q=3.75; version=2" |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1617 } |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1618 self.headers=headers |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1619 results = self.server.dispatch('GET', |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1620 "/rest/data/status/1", |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1621 self.empty_form) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1622 print(results) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1623 self.assertEqual(self.server.client.response_code, 200) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1624 self.assertEqual(self.server.client.additional_headers['Content-Type'], |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1625 "application/json") |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1626 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1627 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1628 ''' |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1629 # only works if dicttoxml.py is installed. |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1630 # not installed for testing |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1631 # TEST #7 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1632 # xml wins |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1633 headers={"accept": "application/json; q=0.5; version=2," |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1634 "application/xml; q=0.75; version=1," |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1635 "text/plain; q=1.0; version=2" |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1636 } |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1637 self.headers=headers |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1638 results = self.server.dispatch('GET', |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1639 "/rest/data/status/1", |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1640 self.empty_form) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1641 print(results) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1642 self.assertEqual(self.server.client.response_code, 200) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1643 self.assertEqual(self.server.client.additional_headers['Content-Type'], |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1644 "application/xml") |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1645 ''' |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1646 |
|
5743
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1647 def testMethodOverride(self): |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1648 # TEST #1 |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1649 # Use GET, PUT, PATCH to tunnel DELETE expect error |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1650 |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1651 body=b'{ "order": 5 }' |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1652 env = { "CONTENT_TYPE": "application/json", |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1653 "CONTENT_LENGTH": len(body), |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1654 "REQUEST_METHOD": "POST" |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1655 } |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1656 body_file=BytesIO(body) # FieldStorage needs a file |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1657 self.server.client.request.headers.get=self.get_header |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1658 for method in ( "GET", "PUT", "PATCH" ): |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1659 headers={"accept": "application/json; version=1", |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1660 "content-type": env['CONTENT_TYPE'], |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1661 "content-length": len(body), |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1662 "x-http-method-override": "DElETE", |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1663 } |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1664 self.headers=headers |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1665 form = client.BinaryFieldStorage(body_file, |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1666 headers=headers, |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1667 environ=env) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1668 self.db.setCurrentUser('admin') # must be admin to create status |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1669 results = self.server.dispatch(method, |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1670 "/rest/data/status", |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1671 form) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1672 |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1673 self.assertEqual(self.server.client.response_code, 400) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1674 json_dict = json.loads(b2s(results)) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1675 status=json_dict['error']['status'] |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1676 msg=json_dict['error']['msg'] |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1677 self.assertEqual(status, 400) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1678 self.assertEqual(msg, "X-HTTP-Method-Override: DElETE must be " |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1679 "used with POST method not %s."%method) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1680 |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1681 # TEST #2 |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1682 # DELETE: delete issue 1 via post tunnel |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1683 self.assertFalse(self.db.status.is_retired("1")) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1684 etag = calculate_etag(self.db.status.getnode("1"), |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1685 self.db.config['WEB_SECRET_KEY']) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1686 etagb = etag.strip ('"') |
|
5744
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
1687 headers={"accept": "application/json; q=1.0, application/xml; q=0.75", |
|
5743
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1688 "if-match": '"%s"'%etagb, |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1689 "content-length": 0, |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1690 "x-http-method-override": "DElETE" |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1691 } |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1692 self.headers=headers |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1693 body_file=BytesIO(b'') # FieldStorage needs a file |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1694 form = client.BinaryFieldStorage(body_file, |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1695 headers=headers, |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1696 environ=env) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1697 self.server.client.request.headers.get=self.get_header |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1698 self.db.setCurrentUser('admin') # must be admin to delete issue |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1699 results = self.server.dispatch('POST', |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1700 "/rest/data/status/1", |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1701 form) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1702 print(results) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1703 self.assertEqual(self.server.client.response_code, 200) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1704 json_dict = json.loads(b2s(results)) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1705 status=json_dict['data']['status'] |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1706 self.assertEqual(status, 'ok') |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1707 self.assertTrue(self.db.status.is_retired("1")) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1708 |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
1709 |
|
5711
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1710 def testPostPOE(self): |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1711 ''' test post once exactly: get POE url, create issue |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1712 using POE url. Use dispatch entry point. |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1713 ''' |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1714 import time |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1715 # setup environment |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1716 etag = "not needed" |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1717 empty_body=b'' |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1718 env = { "CONTENT_TYPE": "application/json", |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1719 "CONTENT_LENGTH": len(empty_body), |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1720 "REQUEST_METHOD": "POST" |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1721 } |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1722 headers={"accept": "application/json", |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1723 "content-type": env['CONTENT_TYPE'], |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1724 "content-length": len(empty_body) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1725 } |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1726 self.headers=headers |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1727 # use empty_body to test code path for missing/empty json |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1728 body_file=BytesIO(empty_body) # FieldStorage needs a file |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1729 form = client.BinaryFieldStorage(body_file, |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1730 headers=headers, |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1731 environ=env) |
|
5710
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1732 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1733 ## Obtain the POE url. |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1734 self.server.client.request.headers.get=self.get_header |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1735 results = self.server.dispatch('POST', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1736 "/rest/data/issue/@poe", |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1737 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1738 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1739 self.assertEqual(self.server.client.response_code, 200) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1740 json_dict = json.loads(b2s(results)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1741 url=json_dict['data']['link'] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1742 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1743 # strip tracker web prefix leaving leading /. |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1744 url = url[len(self.db.config['TRACKER_WEB'])-1:] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1745 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1746 ## create an issue using poe url. |
|
5711
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1747 body=b'{ "title": "foo bar", "priority": "critical" }' |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1748 env = { "CONTENT_TYPE": "application/json", |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1749 "CONTENT_LENGTH": len(body), |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1750 "REQUEST_METHOD": "POST" |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1751 } |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1752 headers={"accept": "application/json", |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1753 "content-type": env['CONTENT_TYPE'], |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1754 "content-length": len(body) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1755 } |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1756 self.headers=headers |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1757 body_file=BytesIO(body) # FieldStorage needs a file |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1758 form = client.BinaryFieldStorage(body_file, |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1759 headers=headers, |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1760 environ=env) |
|
5710
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1761 self.server.client.request.headers.get=self.get_header |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1762 results = self.server.dispatch('POST', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1763 url, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1764 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1765 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1766 self.assertEqual(self.server.client.response_code, 201) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1767 json_dict = json.loads(b2s(results)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1768 issue_id=json_dict['data']['id'] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1769 results = self.server.get_element('issue', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1770 str(issue_id), # must be a string not unicode |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1771 self.empty_form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1772 self.assertEqual(self.dummy_client.response_code, 200) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1773 self.assertEqual(results['data']['attributes']['title'], |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1774 'foo bar') |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1775 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1776 ## Reuse POE url. It will fail. |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1777 self.server.client.request.headers.get=self.get_header |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1778 results = self.server.dispatch('POST', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1779 url, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1780 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1781 # get the last component stripping the trailing / |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1782 poe=url[url.rindex('/')+1:] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1783 self.assertEqual(self.server.client.response_code, 400) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1784 results = json.loads(b2s(results)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1785 self.assertEqual(results['error']['status'], 400) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1786 self.assertEqual(results['error']['msg'], |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1787 "POE token \'%s\' not valid."%poe) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1788 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1789 ## Try using GET on POE url. Should fail with method not |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1790 ## allowed (405) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1791 self.server.client.request.headers.get=self.get_header |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1792 results = self.server.dispatch('GET', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1793 "/rest/data/issue/@poe", |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1794 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1795 self.assertEqual(self.server.client.response_code, 405) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1796 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1797 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1798 ## Try creating generic POE url. |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1799 body_poe=b'{"generic": "null", "lifetime": "100" }' |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1800 body_file=BytesIO(body_poe) # FieldStorage needs a file |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1801 form = client.BinaryFieldStorage(body_file, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1802 headers=headers, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1803 environ=env) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1804 self.server.client.request.headers.get=self.get_header |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1805 results = self.server.dispatch('POST', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1806 "/rest/data/issue/@poe", |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1807 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1808 json_dict = json.loads(b2s(results)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1809 url=json_dict['data']['link'] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1810 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1811 # strip tracker web prefix leaving leading /. |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1812 url = url[len(self.db.config['TRACKER_WEB'])-1:] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1813 url = url.replace('/issue/', '/keyword/') |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1814 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1815 body_keyword=b'{"name": "keyword"}' |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1816 body_file=BytesIO(body_keyword) # FieldStorage needs a file |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1817 form = client.BinaryFieldStorage(body_file, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1818 headers=headers, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1819 environ=env) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1820 results = self.server.dispatch('POST', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1821 url, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1822 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1823 self.assertEqual(self.server.client.response_code, 201) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1824 json_dict = json.loads(b2s(results)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1825 url=json_dict['data']['link'] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1826 id=json_dict['data']['id'] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1827 self.assertEqual(id, "1") |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1828 self.assertEqual(url, "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/keyword/1") |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1829 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1830 ## Create issue POE url and try to use for keyword. |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1831 ## This should fail. |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1832 body_poe=b'{"lifetime": "100" }' |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1833 body_file=BytesIO(body_poe) # FieldStorage needs a file |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1834 form = client.BinaryFieldStorage(body_file, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1835 headers=headers, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1836 environ=env) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1837 self.server.client.request.headers.get=self.get_header |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1838 results = self.server.dispatch('POST', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1839 "/rest/data/issue/@poe", |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1840 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1841 json_dict = json.loads(b2s(results)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1842 url=json_dict['data']['link'] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1843 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1844 # strip tracker web prefix leaving leading /. |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1845 url = url[len(self.db.config['TRACKER_WEB'])-1:] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1846 url = url.replace('/issue/', '/keyword/') |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1847 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1848 body_keyword=b'{"name": "keyword"}' |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1849 body_file=BytesIO(body_keyword) # FieldStorage needs a file |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1850 form = client.BinaryFieldStorage(body_file, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1851 headers=headers, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1852 environ=env) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1853 results = self.server.dispatch('POST', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1854 url, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1855 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1856 poe=url[url.rindex('/')+1:] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1857 self.assertEqual(self.server.client.response_code, 400) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1858 json_dict = json.loads(b2s(results)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1859 stat=json_dict['error']['status'] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1860 msg=json_dict['error']['msg'] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1861 self.assertEqual(stat, 400) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1862 self.assertEqual(msg, "POE token '%s' not valid for keyword, was generated for class issue"%poe) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1863 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1864 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1865 ## Create POE with 10 minute lifetime and verify |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1866 ## expires is within 10 minutes. |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1867 body_poe=b'{"lifetime": "30" }' |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1868 body_file=BytesIO(body_poe) # FieldStorage needs a file |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1869 form = client.BinaryFieldStorage(body_file, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1870 headers=headers, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1871 environ=env) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1872 self.server.client.request.headers.get=self.get_header |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1873 results = self.server.dispatch('POST', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1874 "/rest/data/issue/@poe", |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1875 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1876 json_dict = json.loads(b2s(results)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1877 expires=int(json_dict['data']['expires']) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1878 # allow up to 3 seconds between time stamp creation |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1879 # done under dispatch and this point. |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1880 expected=int(time.time() + 30) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1881 print("expected=%d, expires=%d"%(expected,expires)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1882 self.assertTrue((expected - expires) < 3 and (expected - expires) >= 0) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1883 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1884 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1885 ## Use a token created above as joe by a different user. |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1886 self.db.setCurrentUser('admin') |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1887 url=json_dict['data']['link'] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1888 # strip tracker web prefix leaving leading /. |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1889 url = url[len(self.db.config['TRACKER_WEB'])-1:] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1890 body_file=BytesIO(body_keyword) # FieldStorage needs a file |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1891 form = client.BinaryFieldStorage(body_file, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1892 headers=headers, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1893 environ=env) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1894 results = self.server.dispatch('POST', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1895 url, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1896 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1897 print(results) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1898 self.assertEqual(self.server.client.response_code, 400) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1899 json_dict = json.loads(b2s(results)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1900 # get the last component stripping the trailing / |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1901 poe=url[url.rindex('/')+1:] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1902 self.assertEqual(json_dict['error']['msg'], |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1903 "POE token '%s' not valid."%poe) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1904 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1905 ## Create POE with bogus lifetime |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1906 body_poe=b'{"lifetime": "10.2" }' |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1907 body_file=BytesIO(body_poe) # FieldStorage needs a file |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1908 form = client.BinaryFieldStorage(body_file, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1909 headers=headers, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1910 environ=env) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1911 self.server.client.request.headers.get=self.get_header |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1912 results = self.server.dispatch('POST', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1913 "/rest/data/issue/@poe", |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1914 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1915 self.assertEqual(self.server.client.response_code, 400) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1916 print(results) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1917 json_dict = json.loads(b2s(results)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1918 self.assertEqual(json_dict['error']['msg'], |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1919 "Value \'lifetime\' must be an integer specify " |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1920 "lifetime in seconds. Got 10.2.") |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1921 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1922 ## Create POE with lifetime > 1 hour |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1923 body_poe=b'{"lifetime": "3700" }' |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1924 body_file=BytesIO(body_poe) # FieldStorage needs a file |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1925 form = client.BinaryFieldStorage(body_file, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1926 headers=headers, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1927 environ=env) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1928 self.server.client.request.headers.get=self.get_header |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1929 results = self.server.dispatch('POST', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1930 "/rest/data/issue/@poe", |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1931 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1932 self.assertEqual(self.server.client.response_code, 400) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1933 print(results) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1934 json_dict = json.loads(b2s(results)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1935 self.assertEqual(json_dict['error']['msg'], |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1936 "Value 'lifetime' must be between 1 second and 1 " |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1937 "hour (3600 seconds). Got 3700.") |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1938 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1939 ## Create POE with lifetime < 1 second |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1940 body_poe=b'{"lifetime": "-1" }' |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1941 body_file=BytesIO(body_poe) # FieldStorage needs a file |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1942 form = client.BinaryFieldStorage(body_file, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1943 headers=headers, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1944 environ=env) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1945 self.server.client.request.headers.get=self.get_header |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1946 results = self.server.dispatch('POST', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1947 "/rest/data/issue/@poe", |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1948 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1949 self.assertEqual(self.server.client.response_code, 400) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1950 print(results) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1951 json_dict = json.loads(b2s(results)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1952 self.assertEqual(json_dict['error']['msg'], |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1953 "Value 'lifetime' must be between 1 second and 1 " |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1954 "hour (3600 seconds). Got -1.") |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1955 del(self.headers) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1956 |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
1957 def testPutElement(self): |
| 5583 | 1958 """ |
| 1959 Change joe's 'realname' | |
| 1960 Check if we can't change admin's detail | |
| 1961 """ | |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1962 # fail to change Joe's realname via attribute uri |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1963 # no etag |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
1964 form = cgi.FieldStorage() |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
1965 form.list = [ |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
1966 cgi.MiniFieldStorage('data', 'Joe Doe Doe') |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
1967 ] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
1968 results = self.server.put_attribute( |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
1969 'user', self.joeid, 'realname', form |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
1970 ) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1971 self.assertEqual(self.dummy_client.response_code, 412) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1972 results = self.server.get_attribute( |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1973 'user', self.joeid, 'realname', self.empty_form |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1974 ) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1975 self.assertEqual(self.dummy_client.response_code, 200) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1976 self.assertEqual(results['data']['data'], 'Joe Random') |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1977 |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1978 # change Joe's realname via attribute uri - etag in header |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1979 form = cgi.FieldStorage() |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1980 etag = calculate_etag(self.db.user.getnode(self.joeid), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1981 self.db.config['WEB_SECRET_KEY']) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1982 form.list = [ |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1983 cgi.MiniFieldStorage('data', 'Joe Doe Doe'), |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1984 ] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1985 |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1986 self.headers = {'if-match': etag } # use etag in header |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1987 results = self.server.put_attribute( |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1988 'user', self.joeid, 'realname', form |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1989 ) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1990 self.assertEqual(self.dummy_client.response_code, 200) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
1991 results = self.server.get_attribute( |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
1992 'user', self.joeid, 'realname', self.empty_form |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
1993 ) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
1994 self.assertEqual(self.dummy_client.response_code, 200) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
1995 self.assertEqual(results['data']['data'], 'Joe Doe Doe') |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1996 del(self.headers) |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
1997 |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1998 # Reset joe's 'realname'. etag in body |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
1999 # Also try to set protected items. The protected items should |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2000 # be ignored on put_element to make it easy to get the item |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2001 # with all fields, change one field and put the result without |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2002 # having to filter out protected items. |
| 5583 | 2003 form = cgi.FieldStorage() |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2004 etag = calculate_etag(self.db.user.getnode(self.joeid), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2005 self.db.config['WEB_SECRET_KEY']) |
| 5583 | 2006 form.list = [ |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2007 cgi.MiniFieldStorage('creator', '3'), |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2008 cgi.MiniFieldStorage('realname', 'Joe Doe'), |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2009 cgi.MiniFieldStorage('@etag', etag) |
| 5583 | 2010 ] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2011 results = self.server.put_element('user', self.joeid, form) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2012 self.assertEqual(self.dummy_client.response_code, 200) |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
2013 results = self.server.get_element('user', self.joeid, self.empty_form) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2014 self.assertEqual(self.dummy_client.response_code, 200) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2015 self.assertEqual(results['data']['attributes']['realname'], 'Joe Doe') |
| 5583 | 2016 |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2017 # We are joe, so check we can't change admin's details |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2018 results = self.server.put_element('user', '1', form) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2019 self.assertEqual(self.dummy_client.response_code, 403) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2020 self.assertEqual(results['error']['status'], 403) |
| 5583 | 2021 |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2022 # Try to reset joe's 'realname' and add a broken prop. |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2023 # This should result in no change to the name and |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2024 # a 400 UsageError stating prop does not exist. |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2025 form = cgi.FieldStorage() |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2026 etag = calculate_etag(self.db.user.getnode(self.joeid), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2027 self.db.config['WEB_SECRET_KEY']) |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2028 form.list = [ |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2029 cgi.MiniFieldStorage('JustKidding', '3'), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2030 cgi.MiniFieldStorage('realname', 'Joe Doe'), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2031 cgi.MiniFieldStorage('@etag', etag) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2032 ] |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2033 results = self.server.put_element('user', self.joeid, form) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2034 expected= {'error': {'status': 400, |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2035 'msg': UsageError('Property JustKidding not ' |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2036 'found in class user')}} |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2037 self.assertEqual(results['error']['status'], |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2038 expected['error']['status']) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2039 self.assertEqual(type(results['error']['msg']), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2040 type(expected['error']['msg'])) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2041 self.assertEqual(self.dummy_client.response_code, 400) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2042 results = self.server.get_element('user', self.joeid, self.empty_form) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2043 self.assertEqual(self.dummy_client.response_code, 200) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2044 self.assertEqual(results['data']['attributes']['realname'], 'Joe Doe') |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2045 |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2046 def testPutAttribute(self): |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2047 # put protected property |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2048 # make sure we don't have permission issues |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2049 self.db.setCurrentUser('admin') |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2050 form = cgi.FieldStorage() |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2051 etag = calculate_etag(self.db.user.getnode(self.joeid), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2052 self.db.config['WEB_SECRET_KEY']) |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2053 form.list = [ |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2054 cgi.MiniFieldStorage('data', '3'), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2055 cgi.MiniFieldStorage('@etag', etag) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2056 ] |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2057 results = self.server.put_attribute( |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2058 'user', self.joeid, 'creator', form |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2059 ) |
|
5707
f9a762678af6
Change some 400 errors to 405 (method not allowed) errors where user is
John Rouillard <rouilj@ieee.org>
parents:
5706
diff
changeset
|
2060 expected= {'error': {'status': 405, 'msg': |
|
f9a762678af6
Change some 400 errors to 405 (method not allowed) errors where user is
John Rouillard <rouilj@ieee.org>
parents:
5706
diff
changeset
|
2061 AttributeError('\'"creator", "actor", "creation" and ' |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2062 '"activity" are reserved\'')}} |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2063 print(results) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2064 self.assertEqual(results['error']['status'], |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2065 expected['error']['status']) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2066 self.assertEqual(type(results['error']['msg']), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2067 type(expected['error']['msg'])) |
|
5707
f9a762678af6
Change some 400 errors to 405 (method not allowed) errors where user is
John Rouillard <rouilj@ieee.org>
parents:
5706
diff
changeset
|
2068 self.assertEqual(self.dummy_client.response_code, 405) |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2069 |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2070 # put invalid property |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2071 # make sure we don't have permission issues |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2072 self.db.setCurrentUser('admin') |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2073 form = cgi.FieldStorage() |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2074 etag = calculate_etag(self.db.user.getnode(self.joeid), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2075 self.db.config['WEB_SECRET_KEY']) |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2076 form.list = [ |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2077 cgi.MiniFieldStorage('data', '3'), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2078 cgi.MiniFieldStorage('@etag', etag) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2079 ] |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2080 results = self.server.put_attribute( |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2081 'user', self.joeid, 'youMustBeKiddingMe', form |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2082 ) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2083 expected= {'error': {'status': 400, |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2084 'msg': UsageError("'youMustBeKiddingMe' " |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2085 "is not a property of user")}} |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2086 print(results) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2087 self.assertEqual(results['error']['status'], |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2088 expected['error']['status']) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2089 self.assertEqual(type(results['error']['msg']), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2090 type(expected['error']['msg'])) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2091 self.assertEqual(self.dummy_client.response_code, 400) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2092 |
| 5583 | 2093 def testPost(self): |
| 2094 """ | |
| 2095 Post a new issue with title: foo | |
| 2096 Verify the information of the created issue | |
| 2097 """ | |
| 2098 form = cgi.FieldStorage() | |
| 2099 form.list = [ | |
| 2100 cgi.MiniFieldStorage('title', 'foo') | |
| 2101 ] | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2102 results = self.server.post_collection('issue', form) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2103 self.assertEqual(self.dummy_client.response_code, 201) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2104 issueid = results['data']['id'] |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
2105 results = self.server.get_element('issue', issueid, self.empty_form) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2106 self.assertEqual(self.dummy_client.response_code, 200) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2107 self.assertEqual(results['data']['attributes']['title'], 'foo') |
| 5583 | 2108 self.assertEqual(self.db.issue.get(issueid, "tx_Source"), 'web') |
| 2109 | |
| 2110 def testPostFile(self): | |
| 2111 """ | |
| 2112 Post a new file with content: hello\r\nthere | |
| 2113 Verify the information of the created file | |
| 2114 """ | |
| 2115 form = cgi.FieldStorage() | |
| 2116 form.list = [ | |
| 2117 cgi.MiniFieldStorage('content', 'hello\r\nthere') | |
| 2118 ] | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2119 results = self.server.post_collection('file', form) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2120 self.assertEqual(self.dummy_client.response_code, 201) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2121 fileid = results['data']['id'] |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
2122 results = self.server.get_element('file', fileid, self.empty_form) |
|
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
2123 results = results['data'] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2124 self.assertEqual(self.dummy_client.response_code, 200) |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2125 self.assertEqual(results['attributes']['content'], |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2126 {'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/file1/'}) |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2127 |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2128 # File content is only shown with verbose=3 |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2129 form = cgi.FieldStorage() |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2130 form.list = [ |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2131 cgi.MiniFieldStorage('@verbose', '3') |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2132 ] |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2133 results = self.server.get_element('file', fileid, form) |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2134 results = results['data'] |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2135 self.assertEqual(self.dummy_client.response_code, 200) |
| 5583 | 2136 self.assertEqual(results['attributes']['content'], 'hello\r\nthere') |
| 2137 | |
| 2138 def testAuthDeniedPut(self): | |
| 2139 """ | |
| 2140 Test unauthorized PUT request | |
| 2141 """ | |
| 2142 # Wrong permissions (caught by roundup security module). | |
| 2143 form = cgi.FieldStorage() | |
| 2144 form.list = [ | |
| 2145 cgi.MiniFieldStorage('realname', 'someone') | |
| 2146 ] | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2147 results = self.server.put_element('user', '1', form) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2148 self.assertEqual(self.dummy_client.response_code, 403) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2149 self.assertEqual(results['error']['status'], 403) |
| 5583 | 2150 |
| 2151 def testAuthDeniedPost(self): | |
| 2152 """ | |
| 2153 Test unauthorized POST request | |
| 2154 """ | |
| 2155 form = cgi.FieldStorage() | |
| 2156 form.list = [ | |
| 2157 cgi.MiniFieldStorage('username', 'blah') | |
| 2158 ] | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2159 results = self.server.post_collection('user', form) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2160 self.assertEqual(self.dummy_client.response_code, 403) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2161 self.assertEqual(results['error']['status'], 403) |
| 5583 | 2162 |
| 2163 def testAuthAllowedPut(self): | |
| 2164 """ | |
| 2165 Test authorized PUT request | |
| 2166 """ | |
| 2167 self.db.setCurrentUser('admin') | |
| 2168 form = cgi.FieldStorage() | |
| 2169 form.list = [ | |
| 2170 cgi.MiniFieldStorage('realname', 'someone') | |
| 2171 ] | |
| 2172 try: | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2173 self.server.put_element('user', '2', form) |
| 5602 | 2174 except Unauthorised as err: |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2175 self.fail('raised %s' % err) |
| 5583 | 2176 finally: |
| 2177 self.db.setCurrentUser('joe') | |
| 2178 | |
| 2179 def testAuthAllowedPost(self): | |
| 2180 """ | |
| 2181 Test authorized POST request | |
| 2182 """ | |
| 2183 self.db.setCurrentUser('admin') | |
| 2184 form = cgi.FieldStorage() | |
| 2185 form.list = [ | |
| 2186 cgi.MiniFieldStorage('username', 'blah') | |
| 2187 ] | |
| 2188 try: | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2189 self.server.post_collection('user', form) |
| 5602 | 2190 except Unauthorised as err: |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2191 self.fail('raised %s' % err) |
| 5583 | 2192 finally: |
| 2193 self.db.setCurrentUser('joe') | |
| 2194 | |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2195 def testDeleteAttributeUri(self): |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2196 """ |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2197 Test Delete an attribute |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2198 """ |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2199 self.maxDiff = 4000 |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2200 # create a new issue with userid 1 in the nosy list |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2201 issue_id = self.db.issue.create(title='foo', nosy=['1']) |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2202 |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2203 # No etag, so this should return 412 - Precondition Failed |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2204 # With no changes |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2205 results = self.server.delete_attribute( |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2206 'issue', issue_id, 'nosy', self.empty_form |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2207 ) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2208 self.assertEqual(self.dummy_client.response_code, 412) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2209 results = self.server.get_element('issue', issue_id, self.empty_form) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2210 results = results['data'] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2211 self.assertEqual(self.dummy_client.response_code, 200) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2212 self.assertEqual(len(results['attributes']['nosy']), 1) |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2213 self.assertListEqual(results['attributes']['nosy'], |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2214 [{'id': '1', 'link': self.url_pfx + 'user/1'}]) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2215 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2216 form = cgi.FieldStorage() |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2217 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2218 self.db.config['WEB_SECRET_KEY']) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2219 form.list.append(cgi.MiniFieldStorage('@etag', etag)) |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2220 # remove the title and nosy |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2221 results = self.server.delete_attribute( |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2222 'issue', issue_id, 'title', form |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2223 ) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2224 self.assertEqual(self.dummy_client.response_code, 200) |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2225 |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2226 del(form.list[-1]) |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2227 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2228 self.db.config['WEB_SECRET_KEY']) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2229 form.list.append(cgi.MiniFieldStorage('@etag', etag)) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2230 results = self.server.delete_attribute( |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2231 'issue', issue_id, 'nosy', form |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2232 ) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2233 self.assertEqual(self.dummy_client.response_code, 200) |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2234 |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2235 # verify the result |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2236 results = self.server.get_element('issue', issue_id, self.terse_form) |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
2237 results = results['data'] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2238 self.assertEqual(self.dummy_client.response_code, 200) |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2239 self.assertEqual(len(results['attributes']['nosy']), 0) |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2240 self.assertListEqual(results['attributes']['nosy'], []) |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2241 self.assertEqual(results['attributes']['title'], None) |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2242 |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2243 # delete protected property |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2244 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2245 self.db.config['WEB_SECRET_KEY']) |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2246 form.list.append(cgi.MiniFieldStorage('@etag', etag)) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2247 results = self.server.delete_attribute( |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2248 'issue', issue_id, 'creator', form |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2249 ) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2250 expected= {'error': { |
|
5707
f9a762678af6
Change some 400 errors to 405 (method not allowed) errors where user is
John Rouillard <rouilj@ieee.org>
parents:
5706
diff
changeset
|
2251 'status': 405, |
|
f9a762678af6
Change some 400 errors to 405 (method not allowed) errors where user is
John Rouillard <rouilj@ieee.org>
parents:
5706
diff
changeset
|
2252 'msg': AttributeError("Attribute 'creator' can not be updated for class issue.") |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2253 }} |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2254 |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2255 self.assertEqual(results['error']['status'], |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2256 expected['error']['status']) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2257 self.assertEqual(type(results['error']['msg']), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2258 type(expected['error']['msg'])) |
|
5707
f9a762678af6
Change some 400 errors to 405 (method not allowed) errors where user is
John Rouillard <rouilj@ieee.org>
parents:
5706
diff
changeset
|
2259 self.assertEqual(self.dummy_client.response_code, 405) |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2260 |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2261 # delete required property |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2262 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2263 self.db.config['WEB_SECRET_KEY']) |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2264 form.list.append(cgi.MiniFieldStorage('@etag', etag)) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2265 results = self.server.delete_attribute( |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2266 'issue', issue_id, 'requireme', form |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2267 ) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2268 expected= {'error': {'status': 400, |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2269 'msg': UsageError("Attribute 'requireme' is " |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2270 "required by class issue and can not be deleted.")}} |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2271 print(results) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2272 self.assertEqual(results['error']['status'], |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2273 expected['error']['status']) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2274 self.assertEqual(type(results['error']['msg']), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2275 type(expected['error']['msg'])) |
|
5706
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2276 self.assertEqual(str(results['error']['msg']), |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2277 str(expected['error']['msg'])) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2278 self.assertEqual(self.dummy_client.response_code, 400) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2279 |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2280 # delete bogus property |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2281 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2282 self.db.config['WEB_SECRET_KEY']) |
|
5706
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2283 form.list.append(cgi.MiniFieldStorage('@etag', etag)) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2284 results = self.server.delete_attribute( |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2285 'issue', issue_id, 'nosuchprop', form |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2286 ) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2287 expected= {'error': {'status': 400, |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2288 'msg': UsageError("Attribute 'nosuchprop' not valid " |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2289 "for class issue.")}} |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2290 print(results) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2291 self.assertEqual(results['error']['status'], |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2292 expected['error']['status']) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2293 self.assertEqual(type(results['error']['msg']), |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2294 type(expected['error']['msg'])) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2295 self.assertEqual(str(results['error']['msg']), |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2296 str(expected['error']['msg'])) |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2297 self.assertEqual(self.dummy_client.response_code, 400) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2298 |
| 5583 | 2299 def testPatchAdd(self): |
| 2300 """ | |
| 2301 Test Patch op 'Add' | |
| 2302 """ | |
| 2303 # create a new issue with userid 1 in the nosy list | |
| 2304 issue_id = self.db.issue.create(title='foo', nosy=['1']) | |
| 2305 | |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2306 # fail to add userid 2 to the nosy list |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2307 # no etag |
| 5583 | 2308 form = cgi.FieldStorage() |
| 2309 form.list = [ | |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2310 cgi.MiniFieldStorage('@op', 'add'), |
| 5583 | 2311 cgi.MiniFieldStorage('nosy', '2') |
| 2312 ] | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2313 results = self.server.patch_element('issue', issue_id, form) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2314 self.assertEqual(self.dummy_client.response_code, 412) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2315 |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2316 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2317 self.db.config['WEB_SECRET_KEY']) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2318 form = cgi.FieldStorage() |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2319 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2320 cgi.MiniFieldStorage('@op', 'add'), |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2321 cgi.MiniFieldStorage('nosy', '2'), |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2322 cgi.MiniFieldStorage('@etag', etag) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2323 ] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2324 results = self.server.patch_element('issue', issue_id, form) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2325 self.assertEqual(self.dummy_client.response_code, 200) |
| 5583 | 2326 |
| 2327 # verify the result | |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2328 results = self.server.get_element('issue', issue_id, self.terse_form) |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
2329 results = results['data'] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2330 self.assertEqual(self.dummy_client.response_code, 200) |
| 5583 | 2331 self.assertEqual(len(results['attributes']['nosy']), 2) |
| 2332 self.assertListEqual(results['attributes']['nosy'], ['1', '2']) | |
| 2333 | |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2334 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2335 self.db.config['WEB_SECRET_KEY']) |
|
5706
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2336 form = cgi.FieldStorage() |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2337 form.list = [ |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2338 cgi.MiniFieldStorage('@op', 'add'), |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2339 cgi.MiniFieldStorage('data', '3'), |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2340 cgi.MiniFieldStorage('@etag', etag) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2341 ] |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2342 results = self.server.patch_attribute('issue', issue_id, 'nosy', form) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2343 self.assertEqual(self.dummy_client.response_code, 200) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2344 |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2345 # verify the result |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2346 results = self.server.get_element('issue', issue_id, self.terse_form) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2347 results = results['data'] |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2348 self.assertEqual(self.dummy_client.response_code, 200) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2349 self.assertEqual(len(results['attributes']['nosy']), 3) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2350 self.assertListEqual(results['attributes']['nosy'], ['1', '2', '3']) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2351 |
|
5747
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2352 # patch with no new_val/data |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2353 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2354 self.db.config['WEB_SECRET_KEY']) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2355 form = cgi.FieldStorage() |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2356 form.list = [ |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2357 cgi.MiniFieldStorage('@op', 'add'), |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2358 cgi.MiniFieldStorage('data', ''), |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2359 cgi.MiniFieldStorage('@etag', etag) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2360 ] |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2361 results = self.server.patch_attribute('issue', issue_id, 'nosy', form) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2362 self.assertEqual(self.dummy_client.response_code, 200) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2363 |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2364 # verify the result |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2365 results = self.server.get_element('issue', issue_id, self.terse_form) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2366 results = results['data'] |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2367 self.assertEqual(self.dummy_client.response_code, 200) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2368 self.assertEqual(len(results['attributes']['nosy']), 3) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2369 self.assertListEqual(results['attributes']['nosy'], ['1', '2', '3']) |
|
5706
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2370 |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2371 # patch invalid property |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2372 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2373 self.db.config['WEB_SECRET_KEY']) |
|
5706
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2374 form = cgi.FieldStorage() |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2375 form.list = [ |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2376 cgi.MiniFieldStorage('@op', 'add'), |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2377 cgi.MiniFieldStorage('data', '3'), |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2378 cgi.MiniFieldStorage('@etag', etag) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2379 ] |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2380 results = self.server.patch_attribute('issue', issue_id, 'notGoingToWork', form) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2381 self.assertEqual(self.dummy_client.response_code, 400) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2382 print(results) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2383 expected={'error': {'status': 400, |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2384 'msg': UsageError( |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2385 HyperdbValueError( |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2386 "'notGoingToWork' is not a property of issue",),)}} |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2387 self.assertEqual(results['error']['status'], |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2388 expected['error']['status']) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2389 self.assertEqual(type(results['error']['msg']), |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2390 type(expected['error']['msg'])) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2391 self.assertEqual(str(results['error']['msg']), |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2392 str(expected['error']['msg'])) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2393 |
| 5583 | 2394 def testPatchReplace(self): |
| 2395 """ | |
| 2396 Test Patch op 'Replace' | |
| 2397 """ | |
| 2398 # create a new issue with userid 1 in the nosy list and status = 1 | |
| 2399 issue_id = self.db.issue.create(title='foo', nosy=['1'], status='1') | |
| 2400 | |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2401 # fail to replace userid 2 to the nosy list and status = 3 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2402 # no etag. |
| 5583 | 2403 form = cgi.FieldStorage() |
| 2404 form.list = [ | |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2405 cgi.MiniFieldStorage('@op', 'replace'), |
| 5583 | 2406 cgi.MiniFieldStorage('nosy', '2'), |
| 2407 cgi.MiniFieldStorage('status', '3') | |
| 2408 ] | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2409 results = self.server.patch_element('issue', issue_id, form) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2410 self.assertEqual(self.dummy_client.response_code, 412) |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2411 results = self.server.get_element('issue', issue_id, self.terse_form) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2412 results = results['data'] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2413 self.assertEqual(self.dummy_client.response_code, 200) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2414 self.assertEqual(results['attributes']['status'], '1') |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2415 self.assertEqual(len(results['attributes']['nosy']), 1) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2416 self.assertListEqual(results['attributes']['nosy'], ['1']) |
| 5583 | 2417 |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2418 # replace userid 2 to the nosy list and status = 3 |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2419 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2420 self.db.config['WEB_SECRET_KEY']) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2421 form = cgi.FieldStorage() |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2422 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2423 cgi.MiniFieldStorage('@op', 'replace'), |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2424 cgi.MiniFieldStorage('nosy', '2'), |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2425 cgi.MiniFieldStorage('status', '3'), |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2426 cgi.MiniFieldStorage('@etag', etag) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2427 ] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2428 results = self.server.patch_element('issue', issue_id, form) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2429 self.assertEqual(self.dummy_client.response_code, 200) |
| 5583 | 2430 # verify the result |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2431 results = self.server.get_element('issue', issue_id, self.terse_form) |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
2432 results = results['data'] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2433 self.assertEqual(self.dummy_client.response_code, 200) |
| 5583 | 2434 self.assertEqual(results['attributes']['status'], '3') |
| 2435 self.assertEqual(len(results['attributes']['nosy']), 1) | |
| 2436 self.assertListEqual(results['attributes']['nosy'], ['2']) | |
| 2437 | |
|
5706
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2438 # replace status = 2 using status attribute |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2439 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2440 self.db.config['WEB_SECRET_KEY']) |
|
5706
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2441 form = cgi.FieldStorage() |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2442 form.list = [ |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2443 cgi.MiniFieldStorage('@op', 'replace'), |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2444 cgi.MiniFieldStorage('data', '2'), |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2445 cgi.MiniFieldStorage('@etag', etag) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2446 ] |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2447 results = self.server.patch_attribute('issue', issue_id, 'status', |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2448 form) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2449 self.assertEqual(self.dummy_client.response_code, 200) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2450 # verify the result |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2451 results = self.server.get_element('issue', issue_id, self.terse_form) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2452 results = results['data'] |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2453 self.assertEqual(self.dummy_client.response_code, 200) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2454 self.assertEqual(results['attributes']['status'], '2') |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
2455 |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2456 # try to set a protected prop. It should fail. |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2457 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2458 self.db.config['WEB_SECRET_KEY']) |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2459 form = cgi.FieldStorage() |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2460 form.list = [ |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2461 cgi.MiniFieldStorage('@op', 'replace'), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2462 cgi.MiniFieldStorage('creator', '2'), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2463 cgi.MiniFieldStorage('@etag', etag) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2464 ] |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2465 results = self.server.patch_element('issue', issue_id, form) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2466 expected= {'error': {'status': 400, |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2467 'msg': KeyError('"creator", "actor", "creation" and "activity" are reserved',)}} |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2468 print(results) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2469 self.assertEqual(results['error']['status'], |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2470 expected['error']['status']) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2471 self.assertEqual(type(results['error']['msg']), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2472 type(expected['error']['msg'])) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2473 self.assertEqual(str(results['error']['msg']), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2474 str(expected['error']['msg'])) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2475 self.assertEqual(self.dummy_client.response_code, 400) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2476 |
|
5708
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
2477 # try to set a protected prop using patch_attribute. It should |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
2478 # fail with a 405 bad/unsupported method. |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2479 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2480 self.db.config['WEB_SECRET_KEY']) |
|
5708
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
2481 form = cgi.FieldStorage() |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
2482 form.list = [ |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
2483 cgi.MiniFieldStorage('@op', 'replace'), |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
2484 cgi.MiniFieldStorage('data', '2'), |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
2485 cgi.MiniFieldStorage('@etag', etag) |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
2486 ] |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
2487 results = self.server.patch_attribute('issue', issue_id, 'creator', |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
2488 form) |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
2489 expected= {'error': {'status': 405, |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
2490 'msg': AttributeError("Attribute 'creator' can not be updated for class issue.",)}} |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
2491 print(results) |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
2492 self.assertEqual(results['error']['status'], |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
2493 expected['error']['status']) |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
2494 self.assertEqual(type(results['error']['msg']), |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
2495 type(expected['error']['msg'])) |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
2496 self.assertEqual(str(results['error']['msg']), |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
2497 str(expected['error']['msg'])) |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
2498 self.assertEqual(self.dummy_client.response_code, 405) |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
2499 |
| 5583 | 2500 def testPatchRemoveAll(self): |
| 2501 """ | |
| 2502 Test Patch Action 'Remove' | |
| 2503 """ | |
|
5595
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
2504 # create a new issue with userid 1 and 2 in the nosy list |
| 5583 | 2505 issue_id = self.db.issue.create(title='foo', nosy=['1', '2']) |
| 2506 | |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2507 # fail to remove the nosy list and the title |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2508 # no etag |
| 5583 | 2509 form = cgi.FieldStorage() |
| 2510 form.list = [ | |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2511 cgi.MiniFieldStorage('@op', 'remove'), |
| 5583 | 2512 cgi.MiniFieldStorage('nosy', ''), |
| 2513 cgi.MiniFieldStorage('title', '') | |
| 2514 ] | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2515 results = self.server.patch_element('issue', issue_id, form) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2516 self.assertEqual(self.dummy_client.response_code, 412) |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2517 results = self.server.get_element('issue', issue_id, self.terse_form) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2518 results = results['data'] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2519 self.assertEqual(self.dummy_client.response_code, 200) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2520 self.assertEqual(results['attributes']['title'], 'foo') |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2521 self.assertEqual(len(results['attributes']['nosy']), 2) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2522 self.assertEqual(results['attributes']['nosy'], ['1', '2']) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2523 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2524 # remove the nosy list and the title |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2525 form = cgi.FieldStorage() |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2526 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2527 self.db.config['WEB_SECRET_KEY']) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2528 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2529 cgi.MiniFieldStorage('@op', 'remove'), |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2530 cgi.MiniFieldStorage('nosy', ''), |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2531 cgi.MiniFieldStorage('title', ''), |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2532 cgi.MiniFieldStorage('@etag', etag) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2533 ] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2534 results = self.server.patch_element('issue', issue_id, form) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2535 self.assertEqual(self.dummy_client.response_code, 200) |
| 5583 | 2536 |
| 2537 # verify the result | |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2538 results = self.server.get_element('issue', issue_id, self.terse_form) |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
2539 results = results['data'] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2540 self.assertEqual(self.dummy_client.response_code, 200) |
| 5583 | 2541 self.assertEqual(results['attributes']['title'], None) |
| 2542 self.assertEqual(len(results['attributes']['nosy']), 0) | |
| 2543 self.assertEqual(results['attributes']['nosy'], []) | |
| 2544 | |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2545 # try to remove a protected prop. It should fail. |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2546 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2547 self.db.config['WEB_SECRET_KEY']) |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2548 form = cgi.FieldStorage() |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2549 form.list = [ |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2550 cgi.MiniFieldStorage('@op', 'remove'), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2551 cgi.MiniFieldStorage('creator', '2'), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2552 cgi.MiniFieldStorage('@etag', etag) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2553 ] |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2554 results = self.server.patch_element('issue', issue_id, form) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2555 expected= {'error': {'status': 400, |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2556 'msg': KeyError('"creator", "actor", "creation" and "activity" are reserved',)}} |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2557 print(results) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2558 self.assertEqual(results['error']['status'], |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2559 expected['error']['status']) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2560 self.assertEqual(type(results['error']['msg']), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2561 type(expected['error']['msg'])) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2562 self.assertEqual(str(results['error']['msg']), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2563 str(expected['error']['msg'])) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2564 self.assertEqual(self.dummy_client.response_code, 400) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2565 |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2566 # try to remove a required prop. it should fail |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2567 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2568 self.db.config['WEB_SECRET_KEY']) |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2569 form.list = [ |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2570 cgi.MiniFieldStorage('@op', 'remove'), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2571 cgi.MiniFieldStorage('requireme', ''), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2572 cgi.MiniFieldStorage('@etag', etag) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2573 ] |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2574 results = self.server.patch_element('issue', issue_id, form) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2575 expected= {'error': {'status': 400, |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2576 'msg': UsageError("Attribute 'requireme' is required by class issue and can not be removed.") |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2577 }} |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2578 print(results) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2579 self.assertEqual(results['error']['status'], |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2580 expected['error']['status']) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2581 self.assertEqual(type(results['error']['msg']), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2582 type(expected['error']['msg'])) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2583 self.assertEqual(str(results['error']['msg']), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2584 str(expected['error']['msg'])) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2585 self.assertEqual(self.dummy_client.response_code, 400) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2586 |
|
5599
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
2587 def testPatchAction(self): |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
2588 """ |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
2589 Test Patch Action 'Action' |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
2590 """ |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
2591 # create a new issue with userid 1 and 2 in the nosy list |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
2592 issue_id = self.db.issue.create(title='foo') |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
2593 |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2594 # fail to execute action retire |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2595 # no etag |
|
5599
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
2596 form = cgi.FieldStorage() |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
2597 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2598 cgi.MiniFieldStorage('@op', 'action'), |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2599 cgi.MiniFieldStorage('@action_name', 'retire') |
|
5599
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
2600 ] |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
2601 results = self.server.patch_element('issue', issue_id, form) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2602 self.assertEqual(self.dummy_client.response_code, 412) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2603 self.assertFalse(self.db.issue.is_retired(issue_id)) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2604 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2605 # execute action retire |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2606 form = cgi.FieldStorage() |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2607 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2608 self.db.config['WEB_SECRET_KEY']) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2609 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2610 cgi.MiniFieldStorage('@op', 'action'), |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2611 cgi.MiniFieldStorage('@action_name', 'retire'), |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2612 cgi.MiniFieldStorage('@etag', etag) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2613 ] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2614 results = self.server.patch_element('issue', issue_id, form) |
|
5599
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
2615 self.assertEqual(self.dummy_client.response_code, 200) |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
2616 |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
2617 # verify the result |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
2618 self.assertTrue(self.db.issue.is_retired(issue_id)) |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
2619 |
|
5747
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2620 # execute action restore |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2621 form = cgi.FieldStorage() |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2622 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2623 self.db.config['WEB_SECRET_KEY']) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2624 form.list = [ |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2625 cgi.MiniFieldStorage('@op', 'action'), |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2626 cgi.MiniFieldStorage('@action_name', 'restore'), |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2627 cgi.MiniFieldStorage('@etag', etag) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2628 ] |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2629 results = self.server.patch_element('issue', issue_id, form) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2630 self.assertEqual(self.dummy_client.response_code, 200) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2631 |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2632 # verify the result |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2633 self.assertTrue(not self.db.issue.is_retired(issue_id)) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2634 |
|
5595
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
2635 def testPatchRemove(self): |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
2636 """ |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
2637 Test Patch Action 'Remove' only some element from a list |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
2638 """ |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
2639 # create a new issue with userid 1, 2, 3 in the nosy list |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
2640 issue_id = self.db.issue.create(title='foo', nosy=['1', '2', '3']) |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
2641 |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2642 # fail to remove the nosy list and the title |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2643 # no etag |
|
5595
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
2644 form = cgi.FieldStorage() |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
2645 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2646 cgi.MiniFieldStorage('@op', 'remove'), |
|
5595
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
2647 cgi.MiniFieldStorage('nosy', '1, 2'), |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
2648 ] |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
2649 results = self.server.patch_element('issue', issue_id, form) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2650 self.assertEqual(self.dummy_client.response_code, 412) |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2651 results = self.server.get_element('issue', issue_id, self.terse_form) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2652 results = results['data'] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2653 self.assertEqual(self.dummy_client.response_code, 200) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2654 self.assertEqual(len(results['attributes']['nosy']), 3) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2655 self.assertEqual(results['attributes']['nosy'], ['1', '2', '3']) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2656 |
|
5747
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2657 # remove 1 and 2 from the nosy list |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2658 form = cgi.FieldStorage() |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2659 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2660 self.db.config['WEB_SECRET_KEY']) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2661 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2662 cgi.MiniFieldStorage('@op', 'remove'), |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2663 cgi.MiniFieldStorage('nosy', '1, 2'), |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2664 cgi.MiniFieldStorage('@etag', etag) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2665 ] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2666 results = self.server.patch_element('issue', issue_id, form) |
|
5595
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
2667 self.assertEqual(self.dummy_client.response_code, 200) |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
2668 |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
2669 # verify the result |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2670 results = self.server.get_element('issue', issue_id, self.terse_form) |
|
5595
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
2671 results = results['data'] |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
2672 self.assertEqual(self.dummy_client.response_code, 200) |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
2673 self.assertEqual(len(results['attributes']['nosy']), 1) |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
2674 self.assertEqual(results['attributes']['nosy'], ['3']) |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
2675 |
|
5747
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2676 # delete last element: 3 |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2677 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2678 self.db.config['WEB_SECRET_KEY']) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2679 form = cgi.FieldStorage() |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2680 form.list = [ |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2681 cgi.MiniFieldStorage('@op', 'remove'), |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2682 cgi.MiniFieldStorage('data', '3'), |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2683 cgi.MiniFieldStorage('@etag', etag) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2684 ] |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2685 results = self.server.patch_attribute('issue', issue_id, 'nosy', form) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2686 self.assertEqual(self.dummy_client.response_code, 200) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2687 |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2688 # verify the result |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2689 results = self.server.get_element('issue', issue_id, self.terse_form) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2690 results = results['data'] |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2691 self.assertEqual(self.dummy_client.response_code, 200) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2692 self.assertEqual(len(results['attributes']['nosy']), 0) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2693 self.assertListEqual(results['attributes']['nosy'], []) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
2694 |
|
5586
8f2fbc88e155
Fixed code convention
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5585
diff
changeset
|
2695 |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
2696 def get_obj(path, id): |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
2697 return { |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
2698 'id': id, |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
2699 'link': path + id |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
2700 } |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
2701 |
| 5583 | 2702 if __name__ == '__main__': |
| 2703 runner = unittest.TextTestRunner() | |
| 2704 unittest.main(testRunner=runner) |
