Merge lp:~elopio/cloudspacesclient/refactor into lp:cloudspacesclient

Proposed by Leo Arias
Status: Merged
Merged at revision: 41
Proposed branch: lp:~elopio/cloudspacesclient/refactor
Merge into: lp:cloudspacesclient
Prerequisite: lp:~elopio/cloudspacesclient/update_filename
Diff against target: 375 lines (+62/-82)
1 file modified
src/cloudspacesclient/tests/conformance/test_cloudspaces_api.py (+62/-82)
To merge this branch: bzr merge lp:~elopio/cloudspacesclient/refactor
Reviewer Review Type Date Requested Status
Richard Huddie (community) Approve
Review via email: mp+197976@code.launchpad.net

Commit message

Refactor tests to make them smaller or clearer.

To post a comment you must log in.
Revision history for this message
Richard Huddie (rhuddie) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/cloudspacesclient/tests/conformance/test_cloudspaces_api.py'
2--- src/cloudspacesclient/tests/conformance/test_cloudspaces_api.py 2013-12-06 00:21:49 +0000
3+++ src/cloudspacesclient/tests/conformance/test_cloudspaces_api.py 2013-12-06 00:21:49 +0000
4@@ -39,13 +39,13 @@
5 return getattr(test_server_module, test_server_adapter[-1])()
6
7
8-class CloudspacesAPITestCase(unittest.TestCase):
9+class BaseCloudspacesAPITestCase(unittest.TestCase):
10
11 cloudspaces_server_url = config.get(
12 'cloudspaces', 'cloudspaces_server_url')
13
14 def setUp(self):
15- super(CloudspacesAPITestCase, self).setUp()
16+ super(BaseCloudspacesAPITestCase, self).setUp()
17 self.start_datetime = self._get_now_datetime()
18 self.test_server = get_test_server_adapter()
19 self.test_user = self.test_server.create_test_user()
20@@ -64,6 +64,14 @@
21 rfc3339_now = now.isoformat().replace("T ", "T").split(".")[0] + "Z"
22 return parser.parse(rfc3339_now)
23
24+ def assert_datetime_limits(self, datetime, start_datetime, end_datetime):
25+ # The server doesn't return microseconds, so times may be equal.
26+ self.assertGreaterEqual(datetime, start_datetime)
27+ self.assertLessEqual(datetime, end_datetime)
28+
29+
30+class UserRepresentationTestCase(BaseCloudspacesAPITestCase):
31+
32 def test_get_user_representation(self):
33 user_rep = self.cloudspaces_api_client.get_user_representation()
34
35@@ -80,23 +88,33 @@
36 end_datetime):
37 for volume in volumes:
38 when_created = parser.parse(volume.get('when_created'))
39- self._assert_datetime_limits(
40+ self.assert_datetime_limits(
41 when_created, start_datetime, end_datetime)
42
43- def _assert_datetime_limits(self, datetime, start_datetime, end_datetime):
44- # The server doesn't return microseconds, so times may be equal.
45- self.assertGreaterEqual(datetime, start_datetime)
46- self.assertLessEqual(datetime, end_datetime)
47-
48 def _assert_new_user_volumes_name(self, volumes):
49 volume_names = [volume.get('name') for volume in volumes]
50 self.assertEqual(
51 volume_names, self.test_server.get_new_user_volume_names())
52
53+
54+class TestCaseWithRootNodeInfo(BaseCloudspacesAPITestCase):
55+
56+ def setUp(self):
57+ super(TestCaseWithRootNodeInfo, self).setUp()
58+ self.root_node_id = self._get_root_node_id()
59+
60+ def _get_root_node_id(self):
61+ user_rep = self.cloudspaces_api_client.get_user_representation()
62+ root_volume = self._get_root_volume(user_rep.get('volumes'))
63+ return root_volume.get('node_id')
64+
65+ def _get_root_volume(self, volumes):
66+ # FIXME The first volume returned is not necessarily the root.
67+ # --elopio - 2013-11-23
68+ return volumes[0]
69+
70 def test_get_root_metadata(self):
71- node_id = self._get_root_node_id()
72-
73- metadata = self.cloudspaces_api_client.get_metadata(node_id)
74+ metadata = self.cloudspaces_api_client.get_metadata(self.root_node_id)
75
76 validictory.validate(
77 metadata, schemas.GET_FOLDER_METADATA_RESPONSE_SCHEMA)
78@@ -104,7 +122,7 @@
79 path, filename = os.path.split(self.test_server.get_root_path())
80 expected = dict(
81 is_deleted=False, is_folder=True, is_root=True, filename=filename,
82- node_id=node_id, path=path)
83+ node_id=self.root_node_id, path=path)
84 self._assert_json_object_values(expected, metadata)
85
86 self._assert_normal_folder_keys_not_in_root(metadata)
87@@ -117,16 +135,6 @@
88 # --elopio - 2013-11-25
89 # TODO Check the volume_id field. --elopio - 2013-11-25
90
91- def _get_root_node_id(self):
92- user_rep = self.cloudspaces_api_client.get_user_representation()
93- root_volume = self._get_root_volume(user_rep.get('volumes'))
94- return root_volume.get('node_id')
95-
96- def _get_root_volume(self, volumes):
97- # FIXME The first volume returned is not necessarily the root.
98- # --elopio - 2013-11-23
99- return volumes[0]
100-
101 def _assert_json_object_values(self, expected, actual):
102 """Assert the values of the returned json object.
103
104@@ -163,7 +171,7 @@
105 metadata_log = []
106 # if a node id is not given, then use the root as default
107 if not parent_node_id:
108- parent_node_id = self._get_root_node_id()
109+ parent_node_id = self.root_node_id
110 # create the folders in the parent folder
111 for count in range(folder_count):
112 metadata = self.cloudspaces_api_client.make_folder(
113@@ -177,13 +185,11 @@
114 return metadata_log
115
116 def test_create_folder_in_root(self):
117- # get the root node id and root folder name
118- root_node_id = self._get_root_node_id()
119 # create the folder
120 folder_name = 'root_folder_1'
121
122 metadata = self.cloudspaces_api_client.make_folder(
123- root_node_id, folder_name)
124+ self.root_node_id, folder_name)
125 # validate the folder properties from response
126 validictory.validate(
127 metadata, schemas.GET_FOLDER_METADATA_RESPONSE_SCHEMA)
128@@ -191,12 +197,10 @@
129 root_path = self.test_server.get_root_path()
130 expected = dict(
131 is_folder=True, is_deleted=False, is_root=False, path=root_path,
132- filename=folder_name, parent_node_id=root_node_id, version=1)
133+ filename=folder_name, parent_node_id=self.root_node_id, version=1)
134 self._assert_json_object_values(expected, metadata)
135
136 def test_create_folder_no_parent_id(self):
137- # get the root node id and root folder name
138- root_node_id = self._get_root_node_id()
139 # create the folder without specifying the parent folder id
140 # this should add folder to root level by default
141 folder_name = 'folder_no_parent_id'
142@@ -209,16 +213,14 @@
143 root_path = self.test_server.get_root_path()
144 expected = dict(
145 is_folder=True, is_deleted=False, is_root=False, path=root_path,
146- filename=folder_name, parent_node_id=root_node_id, version=1)
147+ filename=folder_name, parent_node_id=self.root_node_id, version=1)
148 self._assert_json_object_values(expected, metadata)
149
150 def test_create_child_folder(self):
151- # get the root node id and root folder name
152- root_node_id = self._get_root_node_id()
153 parent_folder_name = 'parent_folder_1'
154 # create the parent folder
155 parent_metadata = self.cloudspaces_api_client.make_folder(
156- root_node_id, parent_folder_name)
157+ self.root_node_id, parent_folder_name)
158 # Now create a sub folder under the parent folder
159 child_folder_name = 'child_folder_1'
160 parent_node_id = parent_metadata.get('node_id')
161@@ -237,12 +239,11 @@
162 self._assert_json_object_values(expected, metadata)
163
164 def test_create_new_file(self):
165- root_node_id = self._get_root_node_id()
166 test_file_name = 'test.txt'
167 test_file_mimetype = 'text/plain'
168
169 metadata = self.cloudspaces_api_client.make_file(
170- root_node_id, test_file_name)
171+ self.root_node_id, test_file_name)
172
173 validictory.validate(
174 metadata, schemas.GET_FILE_METADATA_RESPONSE_SCHEMA)
175@@ -251,11 +252,12 @@
176 expected = dict(
177 hash=None, filename=test_file_name, is_deleted=False,
178 is_folder=False, mimetype=test_file_mimetype,
179- parent_node_id=root_node_id, path=root_path, size=0, version=1)
180+ parent_node_id=self.root_node_id, path=root_path, size=0,
181+ version=1)
182 self._assert_json_object_values(expected, metadata)
183
184 # Assert that the file has just been created.
185- self._assert_datetime_limits(
186+ self.assert_datetime_limits(
187 parser.parse(metadata.get('server_modified')), self.start_datetime,
188 self._get_now_datetime())
189 # TODO update the spec because it says checksum instead of hash.
190@@ -267,21 +269,19 @@
191
192 def test_download_empty_file(self):
193 test_file_name = 'test_file_to_download.txt'
194- root_node_id = self._get_root_node_id()
195 create_metadata = self.cloudspaces_api_client.make_file(
196- root_node_id, test_file_name)
197+ self.root_node_id, test_file_name)
198 file_node_id = create_metadata.get('node_id')
199
200 contents = list(self.cloudspaces_api_client.get_file(file_node_id))
201 self.assertEqual(contents, [])
202
203 def test_delete_file(self):
204- root_node_id = self._get_root_node_id()
205 test_file_name = 'test_file_to_delete.txt'
206 test_file_mimetype = 'text/plain'
207
208 create_metadata = self.cloudspaces_api_client.make_file(
209- root_node_id, test_file_name)
210+ self.root_node_id, test_file_name)
211 file_node_id = create_metadata.get('node_id')
212
213 delete_metadata = self.cloudspaces_api_client.delete(file_node_id)
214@@ -292,11 +292,11 @@
215 expected = dict(
216 hash=None, filename=test_file_name, is_deleted=True,
217 is_folder=False, mimetype=test_file_mimetype,
218- parent_node_id=root_node_id, path=root_path, size=0)
219+ parent_node_id=self.root_node_id, path=root_path, size=0)
220 self._assert_json_object_values(expected, delete_metadata)
221
222 # Assert that the file has just been modified.
223- self._assert_datetime_limits(
224+ self.assert_datetime_limits(
225 parser.parse(delete_metadata.get('server_modified')),
226 self.start_datetime,
227 self._get_now_datetime())
228@@ -304,12 +304,10 @@
229 # TODO Check the volume_id field. --elopio - 2013-11-27
230
231 def test_delete_folder_in_root(self):
232- # get the root node id and root folder name
233- root_node_id = self._get_root_node_id()
234 # create the folder to be deleted later
235 folder_name = 'delete_me_folder_1'
236 metadata = self.cloudspaces_api_client.make_folder(
237- root_node_id, folder_name)
238+ self.root_node_id, folder_name)
239 # now delete the folder
240 node_id = metadata.get('node_id')
241 metadata = self.cloudspaces_api_client.delete(node_id)
242@@ -329,10 +327,9 @@
243 self.cloudspaces_api_client.delete(node_id)
244
245 def test_delete_folder_and_children_in_root(self):
246- root_node_id = self._get_root_node_id()
247 # create a new parent folder to hold the child items
248 metadata = self.cloudspaces_api_client.make_folder(
249- root_node_id, 'test_delete_folder_and_children_in_root')
250+ self.root_node_id, 'test_delete_folder_and_children_in_root')
251 parent_node_id = metadata.get('node_id')
252 # now create sub-files and folders within this folder
253 # this content should be deleted by the test when top folder is deleted
254@@ -355,12 +352,10 @@
255
256 def test_create_folder_using_parent_file_id(self):
257 # A negative test to create a folder using the node id of a file as
258- # the parent node id for the folder
259- root_node_id = self._get_root_node_id()
260 # create a file first
261 file_name = 'test_file.txt'
262 metadata = self.cloudspaces_api_client.make_file(
263- root_node_id, file_name)
264+ self.root_node_id, file_name)
265 file_node_id = metadata.get('node_id')
266 # now try and create a folder, using file id as parent
267 # this should fail gracefully with a suitable error code
268@@ -369,11 +364,9 @@
269 self.cloudspaces_api_client.make_folder(file_node_id, folder_name)
270
271 def test_folder_child_list_false(self):
272- # A test to get child objects from parent directory
273- root_node_id = self._get_root_node_id()
274 # create a new parent folder to hold the child items
275 metadata = self.cloudspaces_api_client.make_folder(
276- root_node_id, 'test_folder_child_list_false')
277+ self.root_node_id, 'test_folder_child_list_false')
278 parent_node_id = metadata.get('node_id')
279 # Create a data structure from root folder
280 file_count = 3
281@@ -387,11 +380,9 @@
282 self.assertEqual(None, metadata.get('contents'))
283
284 def test_folder_child_list_true(self):
285- # A test to get child objects from parent directory
286- root_node_id = self._get_root_node_id()
287 # create a new parent folder to hold the child items
288 metadata = self.cloudspaces_api_client.make_folder(
289- root_node_id, 'test_folder_child_list_true')
290+ self.root_node_id, 'test_folder_child_list_true')
291 parent_node_id = metadata.get('node_id')
292 # Create a data structure from root folder
293 file_count = 3
294@@ -408,17 +399,14 @@
295
296 def test_folder_depth(self):
297 # A test to create a hierarchichal directory structure and validate
298- # the folder path is correct for each sub-folder
299- root_node_id = self._get_root_node_id()
300- # create a new parent folder to hold the child items
301- parent_metadata = self.cloudspaces_api_client.make_folder(
302- root_node_id, 'test_folder_depth')
303- parent_node_id = parent_metadata.get('node_id')
304- folder_depth = 10
305+ parent_node_id = self.root_node_id
306+ parent_metadata = self.cloudspaces_api_client.get_metadata(
307+ parent_node_id)
308 # store the path of the top level folder
309 parent_path = os.path.join(
310 parent_metadata.get('path'), parent_metadata.get('filename'))
311
312+ folder_depth = 10
313 for level in range(folder_depth):
314 # construct the expected folder path
315 folder_name = 'folder_{}'.format(level + 1)
316@@ -434,33 +422,25 @@
317 parent_node_id = metadata.get('node_id')
318
319 def test_create_folder_with_existing_name(self):
320- # attempt to create 2 folders with the same name in root
321- root_node_id = self._get_root_node_id()
322- # create a new parent folder to hold the child items
323- metadata = self.cloudspaces_api_client.make_folder(
324- root_node_id, 'test_create_folder_with_existing_name')
325- parent_node_id = metadata.get('node_id')
326 folder_name = 'duplicate_folder'
327 self.cloudspaces_api_client.make_folder(
328- parent_node_id, folder_name)
329- metadata = self.cloudspaces_api_client.make_folder(
330- parent_node_id, folder_name)
331+ self.root_node_id, folder_name)
332+ folder_metadata = self.cloudspaces_api_client.make_folder(
333+ self.root_node_id, folder_name)
334 # now do a check the metadata of the dir listing
335- get_metadata = self.cloudspaces_api_client.get_metadata(
336- parent_node_id, list='true')
337- child_nodes = get_metadata.get('contents')
338+ root_metadata = self.cloudspaces_api_client.get_metadata(
339+ self.root_node_id, list='true')
340+ child_nodes = root_metadata.get('contents')
341 # check only 1 folder listed and that the metadata matches
342 self.assertEqual(len(child_nodes), 1)
343- self.assertEqual(metadata, child_nodes[0])
344+ self.assertEqual(folder_metadata, child_nodes[0])
345
346 def test_new_file_version(self):
347- # A test to upload new content to a file and check it is updated
348- root_node_id = self._get_root_node_id()
349 test_file_name = 'file_version_test.txt'
350 content_v1 = 'This is file content version 1'
351 content_v2 = 'This is the next file version, 2'
352 metadata = self.cloudspaces_api_client.make_file(
353- root_node_id, test_file_name)
354+ self.root_node_id, test_file_name)
355 file_node_id = metadata.get('node_id')
356 # load version 1 of the file
357 metadata = self.cloudspaces_api_client.put_file(
358@@ -468,7 +448,7 @@
359 # check correct version
360 self.assertEqual(metadata.get('version'), 2)
361 # Assert that the file has just been created.
362- self._assert_datetime_limits(
363+ self.assert_datetime_limits(
364 parser.parse(metadata.get('server_modified')), self.start_datetime,
365 self._get_now_datetime())
366 # load version 2 of the file
367@@ -477,7 +457,7 @@
368 # check correct version
369 self.assertEqual(metadata.get('version'), 3)
370 # Assert that the file has just been updated.
371- self._assert_datetime_limits(
372+ self.assert_datetime_limits(
373 parser.parse(metadata.get('server_modified')), self.start_datetime,
374 self._get_now_datetime())
375 # get the latest version and compare with expected content

Subscribers

People subscribed via source and target branches

to all changes: