Mercurial > p > roundup > code
annotate test/rest_common.py @ 5682:e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sat, 30 Mar 2019 16:13:50 -0400 |
| parents | b8e8b1b3ec77 |
| children | eb51c0d9c9bf |
| 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 |
| 5583 | 5 |
| 6 from roundup.cgi.exceptions import * | |
|
5586
8f2fbc88e155
Fixed code convention
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5585
diff
changeset
|
7 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
|
8 from roundup.rest import RestfulInstance, calculate_etag |
| 5583 | 9 from roundup.backends import list_backends |
|
5586
8f2fbc88e155
Fixed code convention
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5585
diff
changeset
|
10 from roundup.cgi import client |
|
5651
a02ef29b4242
Fix REST tests for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5650
diff
changeset
|
11 from roundup.anypy.strings import b2s, s2b |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
12 import random |
| 5583 | 13 |
| 5602 | 14 from .db_test_base import setupTracker |
| 5583 | 15 |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
16 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
|
17 |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
18 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
|
19 import json |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
20 |
| 5583 | 21 NEEDS_INSTANCE = 1 |
| 22 | |
|
5586
8f2fbc88e155
Fixed code convention
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5585
diff
changeset
|
23 |
|
5601
fcbeff272828
Integrate REST tests into db framework
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5600
diff
changeset
|
24 class TestCase(): |
| 5583 | 25 |
| 26 backend = None | |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
27 url_pfx = 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/' |
| 5583 | 28 |
| 29 def setUp(self): | |
| 30 self.dirname = '_test_rest' | |
| 31 # set up and open a tracker | |
| 5602 | 32 self.instance = setupTracker(self.dirname, self.backend) |
| 5583 | 33 |
| 34 # open the database | |
| 35 self.db = self.instance.open('admin') | |
| 36 | |
| 37 # Get user id (user4 maybe). Used later to get data from db. | |
| 38 self.joeid = self.db.user.create( | |
| 39 username='joe', | |
| 40 password=password.Password('random'), | |
| 41 address='random@home.org', | |
| 42 realname='Joe Random', | |
| 43 roles='User' | |
| 44 ) | |
| 45 | |
| 46 self.db.commit() | |
| 47 self.db.close() | |
| 48 self.db = self.instance.open('joe') | |
| 5604 | 49 # Allow joe to retire |
| 50 p = self.db.security.addPermission(name='Retire', klass='issue') | |
| 51 self.db.security.addPermissionToRole('User', p) | |
| 5583 | 52 |
| 53 self.db.tx_Source = 'web' | |
| 54 | |
| 55 self.db.issue.addprop(tx_Source=hyperdb.String()) | |
| 56 self.db.msg.addprop(tx_Source=hyperdb.String()) | |
| 57 | |
| 58 self.db.post_init() | |
| 59 | |
| 60 thisdir = os.path.dirname(__file__) | |
| 61 vars = {} | |
| 5602 | 62 with open(os.path.join(thisdir, "tx_Source_detector.py")) as f: |
| 63 code = compile(f.read(), "tx_Source_detector.py", "exec") | |
| 64 exec(code, vars) | |
| 5583 | 65 vars['init'](self.db) |
| 66 | |
| 67 env = { | |
| 68 'PATH_INFO': 'http://localhost/rounduptest/rest/', | |
| 69 'HTTP_HOST': 'localhost', | |
| 70 'TRACKER_NAME': 'rounduptest' | |
| 71 } | |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
72 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
|
73 self.dummy_client.request.headers.get = self.get_header |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
74 self.empty_form = cgi.FieldStorage() |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
75 self.terse_form = cgi.FieldStorage() |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
76 self.terse_form.list = [ |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
77 cgi.MiniFieldStorage('@verbose', '0'), |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
78 ] |
| 5583 | 79 |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
80 self.server = RestfulInstance(self.dummy_client, self.db) |
| 5583 | 81 |
| 82 def tearDown(self): | |
| 83 self.db.close() | |
| 84 try: | |
| 85 shutil.rmtree(self.dirname) | |
| 5602 | 86 except OSError as error: |
| 5583 | 87 if error.errno not in (errno.ENOENT, errno.ESRCH): |
| 88 raise | |
| 89 | |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
90 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
|
91 try: |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
92 return self.headers[header.lower()] |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
93 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
|
94 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
|
95 |
| 5583 | 96 def testGet(self): |
| 97 """ | |
| 98 Retrieve all three users | |
| 99 obtain data for 'joe' | |
| 100 """ | |
| 101 # Retrieve all three users. | |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
102 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
|
103 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
|
104 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
|
105 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
|
106 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
|
107 self.assertEqual( |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
108 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
|
109 "3" |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
110 ) |
| 5583 | 111 |
| 112 # Obtain data for 'joe'. | |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
113 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
|
114 results = results['data'] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
115 self.assertEqual(self.dummy_client.response_code, 200) |
| 5583 | 116 self.assertEqual(results['attributes']['username'], 'joe') |
| 117 self.assertEqual(results['attributes']['realname'], 'Joe Random') | |
| 118 | |
| 5678 | 119 # Obtain data for 'joe' via username lookup. |
| 120 results = self.server.get_element('user', 'joe', self.empty_form) | |
| 121 results = results['data'] | |
| 122 self.assertEqual(self.dummy_client.response_code, 200) | |
| 123 self.assertEqual(results['attributes']['username'], 'joe') | |
| 124 self.assertEqual(results['attributes']['realname'], 'Joe Random') | |
| 125 | |
| 126 # Obtain data for 'joe' via username lookup (long form). | |
| 127 key = 'username=joe' | |
| 128 results = self.server.get_element('user', key, self.empty_form) | |
| 129 results = results['data'] | |
| 130 self.assertEqual(self.dummy_client.response_code, 200) | |
| 131 self.assertEqual(results['attributes']['username'], 'joe') | |
| 132 self.assertEqual(results['attributes']['realname'], 'Joe Random') | |
| 133 | |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
134 # Obtain data for 'joe'. |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
135 results = self.server.get_attribute( |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
136 '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
|
137 ) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
138 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
|
139 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
|
140 |
|
5682
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
141 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
|
142 """ 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
|
143 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
144 from roundup.exceptions import UsageError |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
145 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
146 self.maxDiff = 4000 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
147 # create sample data |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
148 try: |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
149 self.db.status.create(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
|
150 except ValueError: |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
151 pass |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
152 try: |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
153 self.db.status.create(name='closed') |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
154 except ValueError: |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
155 pass |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
156 try: |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
157 self.db.priority.create(name='normal') |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
158 except ValueError: |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
159 pass |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
160 try: |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
161 self.db.priority.create(name='critical') |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
162 except ValueError: |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
163 pass |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
164 self.db.issue.create( |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
165 title='foo1', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
166 status=self.db.status.lookup('open'), |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
167 priority=self.db.priority.lookup('normal'), |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
168 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
|
169 ) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
170 issue_open_norm = self.db.issue.create( |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
171 title='foo2', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
172 status=self.db.status.lookup('open'), |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
173 priority=self.db.priority.lookup('normal'), |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
174 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
|
175 ) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
176 issue_open_crit = self.db.issue.create( |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
177 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
|
178 status=self.db.status.lookup('open'), |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
179 priority=self.db.priority.lookup('critical') |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
180 ) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
181 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
|
182 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
183 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
184 # 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
|
185 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
|
186 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
|
187 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
|
188 cgi.MiniFieldStorage('@fields', 'nosy,status'), |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
189 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
|
190 ] |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
191 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
192 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
|
193 {'@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
|
194 'collection': [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
195 {'status': {'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
|
196 '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
|
197 '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
|
198 '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
|
199 'nosy': [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
200 {'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
|
201 '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
|
202 '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
|
203 {'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
|
204 '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
|
205 '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
|
206 ], |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
207 '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
|
208 'title': 'foo1' }, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
209 {'status': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
210 '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
|
211 '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
|
212 '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
|
213 '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
|
214 'nosy': [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
215 {'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
|
216 '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
|
217 '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
|
218 ], |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
219 '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
|
220 'title': 'foo2'}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
221 {'status': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
222 '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
|
223 '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
|
224 '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
|
225 '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
|
226 'nosy': [], |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
227 '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
|
228 '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
|
229 ]}} |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
230 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
231 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
|
232 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
|
233 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
234 # 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
|
235 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
|
236 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
|
237 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
|
238 # 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
|
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 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
241 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
|
242 {'@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
|
243 'collection': [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
244 {'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
|
245 '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
|
246 { '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
|
247 |
|
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/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
|
249 {'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
|
250 '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
|
251 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
252 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
253 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
|
254 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
|
255 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
256 # 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
|
257 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
|
258 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
|
259 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
|
260 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
|
261 ] |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
262 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
263 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
|
264 '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
|
265 "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
|
266 '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
|
267 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
268 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
|
269 # 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
|
270 # 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
|
271 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
|
272 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
|
273 ) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
274 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
275 # 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
|
276 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
|
277 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
|
278 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
|
279 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
|
280 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
|
281 ] |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
282 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
283 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
|
284 '@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
|
285 'collection': [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
286 {'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
|
287 '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
|
288 '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
|
289 '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
|
290 '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
|
291 {'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
|
292 '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
|
293 '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
|
294 '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
|
295 '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
|
296 {'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
|
297 '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
|
298 '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
|
299 'nosy': [], |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
300 '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
|
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 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
|
303 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
|
304 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
|
305 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
306 # 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
|
307 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
|
308 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
|
309 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
|
310 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
|
311 ] |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
312 # 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
|
313 # 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
|
314 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
|
315 {'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
|
316 '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
|
317 '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
|
318 {'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
|
319 '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
|
320 '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
|
321 {'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
|
322 '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
|
323 'queries': [], |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
324 '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
|
325 '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
|
326 '@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
|
327 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
328 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
|
329 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
|
330 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
331 ## 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
|
332 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
|
333 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
|
334 cgi.MiniFieldStorage('@fields', '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
|
335 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
|
336 ] |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
337 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
|
338 '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
|
339 '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
|
340 '@etag': '', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
341 '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
|
342 'attributes': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
343 '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
|
344 'queries': [], |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
345 '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
|
346 } |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
347 }} |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
348 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
349 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
|
350 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
|
351 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
|
352 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
353 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
|
354 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
|
355 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
|
356 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
|
357 ] |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
358 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
|
359 '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
|
360 '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
|
361 'attributes': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
362 'status': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
363 '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
|
364 '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
|
365 'priority': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
366 '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
|
367 '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
|
368 '@etag': '', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
369 '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
|
370 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
371 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
|
372 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
|
373 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
|
374 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
375 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
|
376 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
|
377 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
|
378 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
|
379 ] |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
380 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
|
381 '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
|
382 '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
|
383 'attributes': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
384 '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
|
385 '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
|
386 '@etag': '', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
387 '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
|
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 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
|
390 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
|
391 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
|
392 |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
393 def testFilter(self): |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
394 """ |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
395 Retrieve all three users |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
396 obtain data for 'joe' |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
397 """ |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
398 # create sample data |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
399 try: |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
400 self.db.status.create(name='open') |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
401 except ValueError: |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
402 pass |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
403 try: |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
404 self.db.status.create(name='closed') |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
405 except ValueError: |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
406 pass |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
407 try: |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
408 self.db.priority.create(name='normal') |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
409 except ValueError: |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
410 pass |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
411 try: |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
412 self.db.priority.create(name='critical') |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
413 except ValueError: |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
414 pass |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
415 self.db.issue.create( |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
416 title='foo4', |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
417 status=self.db.status.lookup('closed'), |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
418 priority=self.db.priority.lookup('critical') |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
419 ) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
420 self.db.issue.create( |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
421 title='foo1', |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
422 status=self.db.status.lookup('open'), |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
423 priority=self.db.priority.lookup('normal') |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
424 ) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
425 issue_open_norm = self.db.issue.create( |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
426 title='foo2', |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
427 status=self.db.status.lookup('open'), |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
428 priority=self.db.priority.lookup('normal') |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
429 ) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
430 issue_closed_norm = self.db.issue.create( |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
431 title='foo3', |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
432 status=self.db.status.lookup('closed'), |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
433 priority=self.db.priority.lookup('normal') |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
434 ) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
435 issue_closed_crit = self.db.issue.create( |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
436 title='foo4', |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
437 status=self.db.status.lookup('closed'), |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
438 priority=self.db.priority.lookup('critical') |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
439 ) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
440 issue_open_crit = self.db.issue.create( |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
441 title='foo5', |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
442 status=self.db.status.lookup('open'), |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
443 priority=self.db.priority.lookup('critical') |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
444 ) |
|
5623
1c4adab65faf
use config file setting for creating tracker uri
John Rouillard <rouilj@ieee.org>
parents:
5604
diff
changeset
|
445 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
|
446 |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
447 # Retrieve all issue status=open |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
448 form = cgi.FieldStorage() |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
449 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
450 cgi.MiniFieldStorage('status', 'open') |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
451 ] |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
452 results = self.server.get_collection('issue', form) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
453 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
|
454 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
|
455 results['data']['collection']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
456 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
|
457 results['data']['collection']) |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
458 self.assertNotIn( |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
459 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
|
460 results['data']['collection'] |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
461 ) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
462 |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
463 # Retrieve all issue status=closed and priority=critical |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
464 form = cgi.FieldStorage() |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
465 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
466 cgi.MiniFieldStorage('status', 'closed'), |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
467 cgi.MiniFieldStorage('priority', 'critical') |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
468 ] |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
469 results = self.server.get_collection('issue', form) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
470 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
|
471 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
|
472 results['data']['collection']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
473 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
|
474 results['data']['collection']) |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
475 self.assertNotIn( |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
476 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
|
477 results['data']['collection'] |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
478 ) |
|
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 # 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
|
481 form = cgi.FieldStorage() |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
482 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
483 cgi.MiniFieldStorage('status', 'closed'), |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
484 cgi.MiniFieldStorage('priority', 'normal,critical') |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
485 ] |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
486 results = self.server.get_collection('issue', form) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
487 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
|
488 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
|
489 results['data']['collection']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
490 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
|
491 results['data']['collection']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
492 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
|
493 results['data']['collection']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
494 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
|
495 results['data']['collection']) |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
496 |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
497 def testPagination(self): |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
498 """ |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
499 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
|
500 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
|
501 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
|
502 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
|
503 number of items. |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
504 """ |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
505 # 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
|
506 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
|
507 self.db.issue.create(title='foo' + str(i)) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
508 |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
509 # Retrieving all the issues |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
510 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
|
511 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
|
512 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
|
513 # 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
|
514 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
|
515 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
|
516 self.assertEqual( |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
517 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
|
518 str(total_length) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
519 ) |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
520 |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
521 |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
522 # 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
|
523 # 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
|
524 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
|
525 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
|
526 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
|
527 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
|
528 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
|
529 "bugs/rest/data/issue" |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
530 |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
531 # Retrieve page 1 |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
532 form = cgi.FieldStorage() |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
533 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
534 cgi.MiniFieldStorage('@page_size', page_size), |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
535 cgi.MiniFieldStorage('@page_index', 1) |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
536 ] |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
537 results = self.server.get_collection('issue', form) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
538 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
|
539 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
|
540 page_one_expected) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
541 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
|
542 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
|
543 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
|
544 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
|
545 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
|
546 "%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
|
547 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
|
548 "%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
|
549 |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
550 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
|
551 |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
552 # Retrieve page 2 |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
553 form = cgi.FieldStorage() |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
554 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
555 cgi.MiniFieldStorage('@page_size', page_size), |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
556 cgi.MiniFieldStorage('@page_index', 2) |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
557 ] |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
558 results = self.server.get_collection('issue', form) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
559 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
|
560 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
|
561 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
|
562 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
|
563 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
|
564 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
|
565 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
|
566 "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
|
567 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
|
568 "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
|
569 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
|
570 "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
|
571 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
|
572 'self') |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
573 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
|
574 'next') |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
575 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
|
576 'prev') |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
577 |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
578 # Retrieve page 3 |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
579 form = cgi.FieldStorage() |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
580 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
581 cgi.MiniFieldStorage('@page_size', page_size), |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
582 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
|
583 ] |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
584 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
|
585 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
|
586 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
|
587 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
|
588 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
|
589 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
|
590 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
|
591 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
|
592 "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
|
593 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
|
594 "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
|
595 |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
596 # 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
|
597 # 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
|
598 form = cgi.FieldStorage() |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
599 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
600 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
|
601 ] |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
602 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
|
603 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
|
604 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
|
605 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
|
606 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
|
607 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
|
608 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
|
609 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
|
610 |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
611 # 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
|
612 # is needed to: |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
613 # page_size < 0 |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
614 # 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
|
615 |
|
5668
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
616 def notestEtagGeneration(self): |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
617 ''' 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
|
618 |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
619 FIXME need to mock somehow date.Date() when creating |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
620 the target to be mocked. The differening dates makes |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
621 this test impossible. |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
622 ''' |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
623 newuser = self.db.user.create( |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
624 username='john', |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
625 password=password.Password('random1'), |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
626 address='random1@home.org', |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
627 realname='JohnRandom', |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
628 roles='User,Admin' |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
629 ) |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
630 |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
631 node = self.db.user.getnode(self.joeid) |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
632 etag = calculate_etag(node) |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
633 items = node.items(protected=True) # include every item |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
634 print(repr(items)) |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
635 print(etag) |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
636 self.assertEqual(etag, "6adf97f83acf6453d4a6a4b1070f3754") |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
637 |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
638 etag = calculate_etag(self.db.issue.getnode("1")) |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
639 print(etag) |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
640 self.assertEqual(etag, "6adf97f83acf6453d4a6a4b1070f3754") |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
641 |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
642 def testEtagProcessing(self): |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
643 ''' |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
644 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
|
645 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
|
646 @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
|
647 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
648 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
|
649 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
|
650 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
651 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
|
652 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
|
653 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
|
654 ''' |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
655 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
|
656 'brokenheader', 'brokenetag', 'none'): |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
657 try: |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
658 # 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
|
659 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
|
660 except AttributeError: |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
661 pass |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
662 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
663 form = cgi.FieldStorage() |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
664 etag = calculate_etag(self.db.user.getnode(self.joeid)) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
665 form.list = [ |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
666 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
|
667 ] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
668 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
669 if mode == 'header': |
|
5645
7f4d19867123
Make print into function call for python3 compatibility.
John Rouillard <rouilj@ieee.org>
parents:
5643
diff
changeset
|
670 print("Mode = %s"%mode) |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
671 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
|
672 elif mode == 'etag': |
|
5645
7f4d19867123
Make print into function call for python3 compatibility.
John Rouillard <rouilj@ieee.org>
parents:
5643
diff
changeset
|
673 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
|
674 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
|
675 elif mode == 'both': |
|
5645
7f4d19867123
Make print into function call for python3 compatibility.
John Rouillard <rouilj@ieee.org>
parents:
5643
diff
changeset
|
676 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
|
677 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
|
678 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
|
679 elif mode == 'brokenheader': |
|
5645
7f4d19867123
Make print into function call for python3 compatibility.
John Rouillard <rouilj@ieee.org>
parents:
5643
diff
changeset
|
680 print("Mode = %s"%mode) |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
681 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
|
682 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
|
683 elif mode == 'brokenetag': |
|
5645
7f4d19867123
Make print into function call for python3 compatibility.
John Rouillard <rouilj@ieee.org>
parents:
5643
diff
changeset
|
684 print("Mode = %s"%mode) |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
685 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
|
686 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
|
687 elif mode == 'none': |
|
5645
7f4d19867123
Make print into function call for python3 compatibility.
John Rouillard <rouilj@ieee.org>
parents:
5643
diff
changeset
|
688 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
|
689 else: |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
690 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
|
691 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
692 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
|
693 '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
|
694 ) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
695 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
|
696 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
|
697 else: |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
698 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
|
699 |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
700 def testDispatch(self): |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
701 """ |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
702 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
|
703 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
|
704 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
|
705 process. |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
706 """ |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
707 |
|
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
708 # TEST #1 |
|
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
709 # 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
|
710 # 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
|
711 # use etag in header |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
712 etag = calculate_etag(self.db.user.getnode(self.joeid)) |
|
5651
a02ef29b4242
Fix REST tests for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5650
diff
changeset
|
713 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
|
714 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
|
715 "CONTENT_LENGTH": len(body), |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
716 "REQUEST_METHOD": "PUT" |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
717 } |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
718 headers={"accept": "application/json", |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
719 "content-type": env['CONTENT_TYPE'], |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
720 "content-length": env['CONTENT_LENGTH'], |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
721 "if-match": etag |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
722 } |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
723 self.headers=headers |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
724 # 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
|
725 # 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
|
726 # FieldStorage(None, None, []) |
|
5651
a02ef29b4242
Fix REST tests for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5650
diff
changeset
|
727 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
|
728 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
|
729 headers=headers, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
730 environ=env) |
|
5650
e8ca7072c629
Fix Python 3 issues in REST code.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5647
diff
changeset
|
731 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
|
732 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
|
733 "/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
|
734 form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
735 |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
736 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
|
737 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
|
738 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
|
739 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
|
740 'Joe Doe 1') |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
741 del(self.headers) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
742 |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
743 # TEST #2 |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
744 # 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
|
745 # 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
|
746 # use etag in payload |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
747 etag = calculate_etag(self.db.user.getnode(self.joeid)) |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
748 etagb = etag.strip ('"') |
|
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
749 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
|
750 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
|
751 "CONTENT_LENGTH": len(body), |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
752 "REQUEST_METHOD": "PUT", |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
753 } |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
754 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
|
755 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
|
756 form = client.BinaryFieldStorage(body_file, |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
757 headers=None, |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
758 environ=env) |
|
5650
e8ca7072c629
Fix Python 3 issues in REST code.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5647
diff
changeset
|
759 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
|
760 |
|
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
761 headers={"accept": "application/json", |
|
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
762 "content-type": env['CONTENT_TYPE'], |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
763 "if-match": etag |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
764 } |
|
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
765 self.headers=headers # set for dispatch |
|
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
766 |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
767 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
|
768 "/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
|
769 form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
770 |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
771 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
|
772 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
|
773 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
|
774 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
|
775 'Joe Doe 2') |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
776 del(self.headers) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
777 |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
778 # TEST #3 |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
779 # 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
|
780 # 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
|
781 # FieldStorage(None, None, []) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
782 # use etag from header |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
783 # |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
784 # 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
|
785 # the results from the db. |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
786 etag = calculate_etag(self.db.user.getnode(self.joeid)) |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
787 headers={"if-match": etag, |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
788 "accept": "application/json", |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
789 } |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
790 form = cgi.FieldStorage() |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
791 form.list = [ |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
792 cgi.MiniFieldStorage('data', 'Joe Doe'), |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
793 ] |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
794 self.headers = headers |
|
5650
e8ca7072c629
Fix Python 3 issues in REST code.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5647
diff
changeset
|
795 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
|
796 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
|
797 "/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
|
798 form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
799 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
|
800 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
|
801 "/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
|
802 self.empty_form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
803 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
|
804 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
|
805 |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
806 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
|
807 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
|
808 "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
|
809 "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
|
810 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
|
811 "<type 'str'>")) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
812 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
|
813 del(self.headers) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
814 |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
815 |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
816 # TEST #4 |
|
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
817 # 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
|
818 # 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
|
819 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
|
820 self.empty_form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
821 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
|
822 |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
823 etag = calculate_etag(self.db.user.getnode(self.joeid)) |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
824 etagb = etag.strip ('"') |
|
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
825 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
|
826 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
|
827 "CONTENT_LENGTH": len(body), |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
828 "REQUEST_METHOD": "PATCH" |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
829 } |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
830 headers={"accept": "application/json", |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
831 "content-type": env['CONTENT_TYPE'], |
|
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
832 "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
|
833 } |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
834 self.headers=headers |
|
5651
a02ef29b4242
Fix REST tests for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5650
diff
changeset
|
835 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
|
836 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
|
837 headers=headers, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
838 environ=env) |
|
5650
e8ca7072c629
Fix Python 3 issues in REST code.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5647
diff
changeset
|
839 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
|
840 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
|
841 "/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
|
842 form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
843 |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
844 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
|
845 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
|
846 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
|
847 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
|
848 'demo2@example.com') |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
849 |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
850 # and set it back reusing env and headers from last test |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
851 etag = calculate_etag(self.db.user.getnode(self.joeid)) |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
852 etagb = etag.strip ('"') |
|
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
853 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
|
854 stored_results['data']['attributes']['address'], |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
855 etagb)) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
856 # 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
|
857 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
|
858 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
|
859 headers=headers, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
860 environ=env) |
|
5650
e8ca7072c629
Fix Python 3 issues in REST code.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5647
diff
changeset
|
861 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
|
862 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
|
863 "/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
|
864 form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
865 |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
866 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
|
867 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
|
868 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
|
869 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
|
870 'random@home.org') |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
871 del(self.headers) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
872 |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
873 # TEST #5 |
|
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
874 # POST: create new issue |
|
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
875 # no etag needed |
|
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
876 # FIXME at some point we probably want to implement |
|
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
877 # Post Once Only, so we need to add a Post Once Exactly |
|
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
878 # test and a resubmit as well. |
|
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
879 etag = "not needed" |
|
5651
a02ef29b4242
Fix REST tests for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5650
diff
changeset
|
880 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
|
881 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
|
882 "CONTENT_LENGTH": len(body), |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
883 "REQUEST_METHOD": "POST" |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
884 } |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
885 headers={"accept": "application/json", |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
886 "content-type": env['CONTENT_TYPE'], |
|
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
887 "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
|
888 } |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
889 self.headers=headers |
|
5651
a02ef29b4242
Fix REST tests for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5650
diff
changeset
|
890 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
|
891 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
|
892 headers=headers, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
893 environ=env) |
|
5650
e8ca7072c629
Fix Python 3 issues in REST code.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5647
diff
changeset
|
894 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
|
895 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
|
896 "/rest/data/issue", |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
897 form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
898 |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
899 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
|
900 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
|
901 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
|
902 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
|
903 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
|
904 self.empty_form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
905 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
|
906 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
|
907 'foo bar') |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
908 del(self.headers) |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
909 |
| 5583 | 910 def testPut(self): |
| 911 """ | |
| 912 Change joe's 'realname' | |
| 913 Check if we can't change admin's detail | |
| 914 """ | |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
915 # 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
|
916 # no etag |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
917 form = cgi.FieldStorage() |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
918 form.list = [ |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
919 cgi.MiniFieldStorage('data', 'Joe Doe Doe') |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
920 ] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
921 results = self.server.put_attribute( |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
922 'user', self.joeid, 'realname', form |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
923 ) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
924 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
|
925 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
|
926 '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
|
927 ) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
928 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
|
929 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
|
930 |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
931 # 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
|
932 form = cgi.FieldStorage() |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
933 etag = calculate_etag(self.db.user.getnode(self.joeid)) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
934 form.list = [ |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
935 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
|
936 ] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
937 |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
938 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
|
939 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
|
940 '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
|
941 ) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
942 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
|
943 results = self.server.get_attribute( |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
944 '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
|
945 ) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
946 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
|
947 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
|
948 del(self.headers) |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
949 |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
950 # Reset joe's 'realname'. etag in body |
| 5583 | 951 form = cgi.FieldStorage() |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
952 etag = calculate_etag(self.db.user.getnode(self.joeid)) |
| 5583 | 953 form.list = [ |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
954 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
|
955 cgi.MiniFieldStorage('@etag', etag) |
| 5583 | 956 ] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
957 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
|
958 self.assertEqual(self.dummy_client.response_code, 200) |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
959 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
|
960 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
|
961 self.assertEqual(results['data']['attributes']['realname'], 'Joe Doe') |
| 5583 | 962 |
| 963 # 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
|
964 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
|
965 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
|
966 self.assertEqual(results['error']['status'], 403) |
| 5583 | 967 |
| 968 def testPost(self): | |
| 969 """ | |
| 970 Post a new issue with title: foo | |
| 971 Verify the information of the created issue | |
| 972 """ | |
| 973 form = cgi.FieldStorage() | |
| 974 form.list = [ | |
| 975 cgi.MiniFieldStorage('title', 'foo') | |
| 976 ] | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
977 results = self.server.post_collection('issue', form) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
978 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
|
979 issueid = results['data']['id'] |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
980 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
|
981 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
|
982 self.assertEqual(results['data']['attributes']['title'], 'foo') |
| 5583 | 983 self.assertEqual(self.db.issue.get(issueid, "tx_Source"), 'web') |
| 984 | |
| 985 def testPostFile(self): | |
| 986 """ | |
| 987 Post a new file with content: hello\r\nthere | |
| 988 Verify the information of the created file | |
| 989 """ | |
| 990 form = cgi.FieldStorage() | |
| 991 form.list = [ | |
| 992 cgi.MiniFieldStorage('content', 'hello\r\nthere') | |
| 993 ] | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
994 results = self.server.post_collection('file', form) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
995 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
|
996 fileid = results['data']['id'] |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
997 results = self.server.get_element('file', fileid, self.empty_form) |
|
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
998 results = results['data'] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
999 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
|
1000 self.assertEqual(results['attributes']['content'], |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1001 {'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
|
1002 |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1003 # File content is only shown with verbose=3 |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1004 form = cgi.FieldStorage() |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1005 form.list = [ |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1006 cgi.MiniFieldStorage('@verbose', '3') |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1007 ] |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1008 results = self.server.get_element('file', fileid, form) |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1009 results = results['data'] |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1010 self.assertEqual(self.dummy_client.response_code, 200) |
| 5583 | 1011 self.assertEqual(results['attributes']['content'], 'hello\r\nthere') |
| 1012 | |
| 1013 def testAuthDeniedPut(self): | |
| 1014 """ | |
| 1015 Test unauthorized PUT request | |
| 1016 """ | |
| 1017 # Wrong permissions (caught by roundup security module). | |
| 1018 form = cgi.FieldStorage() | |
| 1019 form.list = [ | |
| 1020 cgi.MiniFieldStorage('realname', 'someone') | |
| 1021 ] | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
1022 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
|
1023 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
|
1024 self.assertEqual(results['error']['status'], 403) |
| 5583 | 1025 |
| 1026 def testAuthDeniedPost(self): | |
| 1027 """ | |
| 1028 Test unauthorized POST request | |
| 1029 """ | |
| 1030 form = cgi.FieldStorage() | |
| 1031 form.list = [ | |
| 1032 cgi.MiniFieldStorage('username', 'blah') | |
| 1033 ] | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
1034 results = self.server.post_collection('user', form) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
1035 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
|
1036 self.assertEqual(results['error']['status'], 403) |
| 5583 | 1037 |
| 1038 def testAuthAllowedPut(self): | |
| 1039 """ | |
| 1040 Test authorized PUT request | |
| 1041 """ | |
| 1042 self.db.setCurrentUser('admin') | |
| 1043 form = cgi.FieldStorage() | |
| 1044 form.list = [ | |
| 1045 cgi.MiniFieldStorage('realname', 'someone') | |
| 1046 ] | |
| 1047 try: | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
1048 self.server.put_element('user', '2', form) |
| 5602 | 1049 except Unauthorised as err: |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
1050 self.fail('raised %s' % err) |
| 5583 | 1051 finally: |
| 1052 self.db.setCurrentUser('joe') | |
| 1053 | |
| 1054 def testAuthAllowedPost(self): | |
| 1055 """ | |
| 1056 Test authorized POST request | |
| 1057 """ | |
| 1058 self.db.setCurrentUser('admin') | |
| 1059 form = cgi.FieldStorage() | |
| 1060 form.list = [ | |
| 1061 cgi.MiniFieldStorage('username', 'blah') | |
| 1062 ] | |
| 1063 try: | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
1064 self.server.post_collection('user', form) |
| 5602 | 1065 except Unauthorised as err: |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
1066 self.fail('raised %s' % err) |
| 5583 | 1067 finally: |
| 1068 self.db.setCurrentUser('joe') | |
| 1069 | |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
1070 def testDeleteAttributeUri(self): |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
1071 """ |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
1072 Test Delete an attribute |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
1073 """ |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
1074 # 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
|
1075 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
|
1076 |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1077 # 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
|
1078 # With no changes |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1079 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
|
1080 '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
|
1081 ) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1082 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
|
1083 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
|
1084 results = results['data'] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1085 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
|
1086 self.assertEqual(len(results['attributes']['nosy']), 1) |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1087 self.assertListEqual(results['attributes']['nosy'], |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1088 [{'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
|
1089 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1090 form = cgi.FieldStorage() |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1091 etag = calculate_etag(self.db.issue.getnode(issue_id)) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1092 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
|
1093 # remove the title and nosy |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
1094 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
|
1095 'issue', issue_id, 'title', form |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
1096 ) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
1097 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
|
1098 |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1099 del(form.list[-1]) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1100 etag = calculate_etag(self.db.issue.getnode(issue_id)) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1101 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
|
1102 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
|
1103 'issue', issue_id, 'nosy', form |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
1104 ) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
1105 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
|
1106 |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
1107 # verify the result |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1108 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
|
1109 results = results['data'] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
1110 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
|
1111 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
|
1112 self.assertListEqual(results['attributes']['nosy'], []) |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
1113 self.assertEqual(results['attributes']['title'], None) |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
1114 |
| 5583 | 1115 def testPatchAdd(self): |
| 1116 """ | |
| 1117 Test Patch op 'Add' | |
| 1118 """ | |
| 1119 # create a new issue with userid 1 in the nosy list | |
| 1120 issue_id = self.db.issue.create(title='foo', nosy=['1']) | |
| 1121 | |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1122 # 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
|
1123 # no etag |
| 5583 | 1124 form = cgi.FieldStorage() |
| 1125 form.list = [ | |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1126 cgi.MiniFieldStorage('@op', 'add'), |
| 5583 | 1127 cgi.MiniFieldStorage('nosy', '2') |
| 1128 ] | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
1129 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
|
1130 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
|
1131 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1132 etag = calculate_etag(self.db.issue.getnode(issue_id)) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1133 form = cgi.FieldStorage() |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1134 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1135 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
|
1136 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
|
1137 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
|
1138 ] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1139 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
|
1140 self.assertEqual(self.dummy_client.response_code, 200) |
| 5583 | 1141 |
| 1142 # verify the result | |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1143 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
|
1144 results = results['data'] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
1145 self.assertEqual(self.dummy_client.response_code, 200) |
| 5583 | 1146 self.assertEqual(len(results['attributes']['nosy']), 2) |
| 1147 self.assertListEqual(results['attributes']['nosy'], ['1', '2']) | |
| 1148 | |
| 1149 def testPatchReplace(self): | |
| 1150 """ | |
| 1151 Test Patch op 'Replace' | |
| 1152 """ | |
| 1153 # create a new issue with userid 1 in the nosy list and status = 1 | |
| 1154 issue_id = self.db.issue.create(title='foo', nosy=['1'], status='1') | |
| 1155 | |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1156 # 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
|
1157 # no etag. |
| 5583 | 1158 form = cgi.FieldStorage() |
| 1159 form.list = [ | |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1160 cgi.MiniFieldStorage('@op', 'replace'), |
| 5583 | 1161 cgi.MiniFieldStorage('nosy', '2'), |
| 1162 cgi.MiniFieldStorage('status', '3') | |
| 1163 ] | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
1164 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
|
1165 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
|
1166 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
|
1167 results = results['data'] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
1168 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
|
1169 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
|
1170 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
|
1171 self.assertListEqual(results['attributes']['nosy'], ['1']) |
| 5583 | 1172 |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1173 # 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
|
1174 etag = calculate_etag(self.db.issue.getnode(issue_id)) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1175 form = cgi.FieldStorage() |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1176 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1177 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
|
1178 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
|
1179 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
|
1180 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
|
1181 ] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1182 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
|
1183 self.assertEqual(self.dummy_client.response_code, 200) |
| 5583 | 1184 # verify the result |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1185 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
|
1186 results = results['data'] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
1187 self.assertEqual(self.dummy_client.response_code, 200) |
| 5583 | 1188 self.assertEqual(results['attributes']['status'], '3') |
| 1189 self.assertEqual(len(results['attributes']['nosy']), 1) | |
| 1190 self.assertListEqual(results['attributes']['nosy'], ['2']) | |
| 1191 | |
| 1192 def testPatchRemoveAll(self): | |
| 1193 """ | |
| 1194 Test Patch Action 'Remove' | |
| 1195 """ | |
|
5595
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
1196 # create a new issue with userid 1 and 2 in the nosy list |
| 5583 | 1197 issue_id = self.db.issue.create(title='foo', nosy=['1', '2']) |
| 1198 | |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1199 # 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
|
1200 # no etag |
| 5583 | 1201 form = cgi.FieldStorage() |
| 1202 form.list = [ | |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1203 cgi.MiniFieldStorage('@op', 'remove'), |
| 5583 | 1204 cgi.MiniFieldStorage('nosy', ''), |
| 1205 cgi.MiniFieldStorage('title', '') | |
| 1206 ] | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
1207 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
|
1208 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
|
1209 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
|
1210 results = results['data'] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1211 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
|
1212 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
|
1213 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
|
1214 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
|
1215 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1216 # 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
|
1217 form = cgi.FieldStorage() |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1218 etag = calculate_etag(self.db.issue.getnode(issue_id)) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1219 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1220 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
|
1221 cgi.MiniFieldStorage('nosy', ''), |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1222 cgi.MiniFieldStorage('title', ''), |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1223 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
|
1224 ] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1225 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
|
1226 self.assertEqual(self.dummy_client.response_code, 200) |
| 5583 | 1227 |
| 1228 # verify the result | |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1229 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
|
1230 results = results['data'] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
1231 self.assertEqual(self.dummy_client.response_code, 200) |
| 5583 | 1232 self.assertEqual(results['attributes']['title'], None) |
| 1233 self.assertEqual(len(results['attributes']['nosy']), 0) | |
| 1234 self.assertEqual(results['attributes']['nosy'], []) | |
| 1235 | |
|
5599
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
1236 def testPatchAction(self): |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
1237 """ |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
1238 Test Patch Action 'Action' |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
1239 """ |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
1240 # 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
|
1241 issue_id = self.db.issue.create(title='foo') |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
1242 |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1243 # 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
|
1244 # no etag |
|
5599
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
1245 form = cgi.FieldStorage() |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
1246 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1247 cgi.MiniFieldStorage('@op', 'action'), |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1248 cgi.MiniFieldStorage('@action_name', 'retire') |
|
5599
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
1249 ] |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
1250 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
|
1251 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
|
1252 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
|
1253 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1254 # execute action retire |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1255 form = cgi.FieldStorage() |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1256 etag = calculate_etag(self.db.issue.getnode(issue_id)) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1257 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1258 cgi.MiniFieldStorage('@op', 'action'), |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1259 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
|
1260 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
|
1261 ] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1262 results = self.server.patch_element('issue', issue_id, form) |
|
5599
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
1263 self.assertEqual(self.dummy_client.response_code, 200) |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
1264 |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
1265 # verify the result |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
1266 self.assertTrue(self.db.issue.is_retired(issue_id)) |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
1267 |
|
5595
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
1268 def testPatchRemove(self): |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
1269 """ |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
1270 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
|
1271 """ |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
1272 # 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
|
1273 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
|
1274 |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1275 # 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
|
1276 # no etag |
|
5595
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
1277 form = cgi.FieldStorage() |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
1278 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1279 cgi.MiniFieldStorage('@op', 'remove'), |
|
5595
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
1280 cgi.MiniFieldStorage('nosy', '1, 2'), |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
1281 ] |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
1282 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
|
1283 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
|
1284 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
|
1285 results = results['data'] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1286 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
|
1287 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
|
1288 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
|
1289 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1290 # 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
|
1291 form = cgi.FieldStorage() |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1292 etag = calculate_etag(self.db.issue.getnode(issue_id)) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1293 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1294 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
|
1295 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
|
1296 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
|
1297 ] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1298 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
|
1299 self.assertEqual(self.dummy_client.response_code, 200) |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
1300 |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
1301 # verify the result |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1302 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
|
1303 results = results['data'] |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
1304 self.assertEqual(self.dummy_client.response_code, 200) |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
1305 self.assertEqual(len(results['attributes']['nosy']), 1) |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
1306 self.assertEqual(results['attributes']['nosy'], ['3']) |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
1307 |
|
5586
8f2fbc88e155
Fixed code convention
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5585
diff
changeset
|
1308 |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
1309 def get_obj(path, id): |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
1310 return { |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
1311 'id': id, |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
1312 'link': path + id |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
1313 } |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
1314 |
| 5583 | 1315 if __name__ == '__main__': |
| 1316 runner = unittest.TextTestRunner() | |
| 1317 unittest.main(testRunner=runner) |
