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
=== modified file 'src/cloudspacesclient/tests/conformance/test_cloudspaces_api.py'
--- src/cloudspacesclient/tests/conformance/test_cloudspaces_api.py 2013-12-06 00:21:49 +0000
+++ src/cloudspacesclient/tests/conformance/test_cloudspaces_api.py 2013-12-06 00:21:49 +0000
@@ -39,13 +39,13 @@
39 return getattr(test_server_module, test_server_adapter[-1])()39 return getattr(test_server_module, test_server_adapter[-1])()
4040
4141
42class CloudspacesAPITestCase(unittest.TestCase):42class BaseCloudspacesAPITestCase(unittest.TestCase):
4343
44 cloudspaces_server_url = config.get(44 cloudspaces_server_url = config.get(
45 'cloudspaces', 'cloudspaces_server_url')45 'cloudspaces', 'cloudspaces_server_url')
4646
47 def setUp(self):47 def setUp(self):
48 super(CloudspacesAPITestCase, self).setUp()48 super(BaseCloudspacesAPITestCase, self).setUp()
49 self.start_datetime = self._get_now_datetime()49 self.start_datetime = self._get_now_datetime()
50 self.test_server = get_test_server_adapter()50 self.test_server = get_test_server_adapter()
51 self.test_user = self.test_server.create_test_user()51 self.test_user = self.test_server.create_test_user()
@@ -64,6 +64,14 @@
64 rfc3339_now = now.isoformat().replace("T ", "T").split(".")[0] + "Z"64 rfc3339_now = now.isoformat().replace("T ", "T").split(".")[0] + "Z"
65 return parser.parse(rfc3339_now)65 return parser.parse(rfc3339_now)
6666
67 def assert_datetime_limits(self, datetime, start_datetime, end_datetime):
68 # The server doesn't return microseconds, so times may be equal.
69 self.assertGreaterEqual(datetime, start_datetime)
70 self.assertLessEqual(datetime, end_datetime)
71
72
73class UserRepresentationTestCase(BaseCloudspacesAPITestCase):
74
67 def test_get_user_representation(self):75 def test_get_user_representation(self):
68 user_rep = self.cloudspaces_api_client.get_user_representation()76 user_rep = self.cloudspaces_api_client.get_user_representation()
6977
@@ -80,23 +88,33 @@
80 end_datetime):88 end_datetime):
81 for volume in volumes:89 for volume in volumes:
82 when_created = parser.parse(volume.get('when_created'))90 when_created = parser.parse(volume.get('when_created'))
83 self._assert_datetime_limits(91 self.assert_datetime_limits(
84 when_created, start_datetime, end_datetime)92 when_created, start_datetime, end_datetime)
8593
86 def _assert_datetime_limits(self, datetime, start_datetime, end_datetime):
87 # The server doesn't return microseconds, so times may be equal.
88 self.assertGreaterEqual(datetime, start_datetime)
89 self.assertLessEqual(datetime, end_datetime)
90
91 def _assert_new_user_volumes_name(self, volumes):94 def _assert_new_user_volumes_name(self, volumes):
92 volume_names = [volume.get('name') for volume in volumes]95 volume_names = [volume.get('name') for volume in volumes]
93 self.assertEqual(96 self.assertEqual(
94 volume_names, self.test_server.get_new_user_volume_names())97 volume_names, self.test_server.get_new_user_volume_names())
9598
99
100class TestCaseWithRootNodeInfo(BaseCloudspacesAPITestCase):
101
102 def setUp(self):
103 super(TestCaseWithRootNodeInfo, self).setUp()
104 self.root_node_id = self._get_root_node_id()
105
106 def _get_root_node_id(self):
107 user_rep = self.cloudspaces_api_client.get_user_representation()
108 root_volume = self._get_root_volume(user_rep.get('volumes'))
109 return root_volume.get('node_id')
110
111 def _get_root_volume(self, volumes):
112 # FIXME The first volume returned is not necessarily the root.
113 # --elopio - 2013-11-23
114 return volumes[0]
115
96 def test_get_root_metadata(self):116 def test_get_root_metadata(self):
97 node_id = self._get_root_node_id()117 metadata = self.cloudspaces_api_client.get_metadata(self.root_node_id)
98
99 metadata = self.cloudspaces_api_client.get_metadata(node_id)
100118
101 validictory.validate(119 validictory.validate(
102 metadata, schemas.GET_FOLDER_METADATA_RESPONSE_SCHEMA)120 metadata, schemas.GET_FOLDER_METADATA_RESPONSE_SCHEMA)
@@ -104,7 +122,7 @@
104 path, filename = os.path.split(self.test_server.get_root_path())122 path, filename = os.path.split(self.test_server.get_root_path())
105 expected = dict(123 expected = dict(
106 is_deleted=False, is_folder=True, is_root=True, filename=filename,124 is_deleted=False, is_folder=True, is_root=True, filename=filename,
107 node_id=node_id, path=path)125 node_id=self.root_node_id, path=path)
108 self._assert_json_object_values(expected, metadata)126 self._assert_json_object_values(expected, metadata)
109127
110 self._assert_normal_folder_keys_not_in_root(metadata)128 self._assert_normal_folder_keys_not_in_root(metadata)
@@ -117,16 +135,6 @@
117 # --elopio - 2013-11-25135 # --elopio - 2013-11-25
118 # TODO Check the volume_id field. --elopio - 2013-11-25136 # TODO Check the volume_id field. --elopio - 2013-11-25
119137
120 def _get_root_node_id(self):
121 user_rep = self.cloudspaces_api_client.get_user_representation()
122 root_volume = self._get_root_volume(user_rep.get('volumes'))
123 return root_volume.get('node_id')
124
125 def _get_root_volume(self, volumes):
126 # FIXME The first volume returned is not necessarily the root.
127 # --elopio - 2013-11-23
128 return volumes[0]
129
130 def _assert_json_object_values(self, expected, actual):138 def _assert_json_object_values(self, expected, actual):
131 """Assert the values of the returned json object.139 """Assert the values of the returned json object.
132140
@@ -163,7 +171,7 @@
163 metadata_log = []171 metadata_log = []
164 # if a node id is not given, then use the root as default172 # if a node id is not given, then use the root as default
165 if not parent_node_id:173 if not parent_node_id:
166 parent_node_id = self._get_root_node_id()174 parent_node_id = self.root_node_id
167 # create the folders in the parent folder175 # create the folders in the parent folder
168 for count in range(folder_count):176 for count in range(folder_count):
169 metadata = self.cloudspaces_api_client.make_folder(177 metadata = self.cloudspaces_api_client.make_folder(
@@ -177,13 +185,11 @@
177 return metadata_log185 return metadata_log
178186
179 def test_create_folder_in_root(self):187 def test_create_folder_in_root(self):
180 # get the root node id and root folder name
181 root_node_id = self._get_root_node_id()
182 # create the folder188 # create the folder
183 folder_name = 'root_folder_1'189 folder_name = 'root_folder_1'
184190
185 metadata = self.cloudspaces_api_client.make_folder(191 metadata = self.cloudspaces_api_client.make_folder(
186 root_node_id, folder_name)192 self.root_node_id, folder_name)
187 # validate the folder properties from response193 # validate the folder properties from response
188 validictory.validate(194 validictory.validate(
189 metadata, schemas.GET_FOLDER_METADATA_RESPONSE_SCHEMA)195 metadata, schemas.GET_FOLDER_METADATA_RESPONSE_SCHEMA)
@@ -191,12 +197,10 @@
191 root_path = self.test_server.get_root_path()197 root_path = self.test_server.get_root_path()
192 expected = dict(198 expected = dict(
193 is_folder=True, is_deleted=False, is_root=False, path=root_path,199 is_folder=True, is_deleted=False, is_root=False, path=root_path,
194 filename=folder_name, parent_node_id=root_node_id, version=1)200 filename=folder_name, parent_node_id=self.root_node_id, version=1)
195 self._assert_json_object_values(expected, metadata)201 self._assert_json_object_values(expected, metadata)
196202
197 def test_create_folder_no_parent_id(self):203 def test_create_folder_no_parent_id(self):
198 # get the root node id and root folder name
199 root_node_id = self._get_root_node_id()
200 # create the folder without specifying the parent folder id204 # create the folder without specifying the parent folder id
201 # this should add folder to root level by default205 # this should add folder to root level by default
202 folder_name = 'folder_no_parent_id'206 folder_name = 'folder_no_parent_id'
@@ -209,16 +213,14 @@
209 root_path = self.test_server.get_root_path()213 root_path = self.test_server.get_root_path()
210 expected = dict(214 expected = dict(
211 is_folder=True, is_deleted=False, is_root=False, path=root_path,215 is_folder=True, is_deleted=False, is_root=False, path=root_path,
212 filename=folder_name, parent_node_id=root_node_id, version=1)216 filename=folder_name, parent_node_id=self.root_node_id, version=1)
213 self._assert_json_object_values(expected, metadata)217 self._assert_json_object_values(expected, metadata)
214218
215 def test_create_child_folder(self):219 def test_create_child_folder(self):
216 # get the root node id and root folder name
217 root_node_id = self._get_root_node_id()
218 parent_folder_name = 'parent_folder_1'220 parent_folder_name = 'parent_folder_1'
219 # create the parent folder221 # create the parent folder
220 parent_metadata = self.cloudspaces_api_client.make_folder(222 parent_metadata = self.cloudspaces_api_client.make_folder(
221 root_node_id, parent_folder_name)223 self.root_node_id, parent_folder_name)
222 # Now create a sub folder under the parent folder224 # Now create a sub folder under the parent folder
223 child_folder_name = 'child_folder_1'225 child_folder_name = 'child_folder_1'
224 parent_node_id = parent_metadata.get('node_id')226 parent_node_id = parent_metadata.get('node_id')
@@ -237,12 +239,11 @@
237 self._assert_json_object_values(expected, metadata)239 self._assert_json_object_values(expected, metadata)
238240
239 def test_create_new_file(self):241 def test_create_new_file(self):
240 root_node_id = self._get_root_node_id()
241 test_file_name = 'test.txt'242 test_file_name = 'test.txt'
242 test_file_mimetype = 'text/plain'243 test_file_mimetype = 'text/plain'
243244
244 metadata = self.cloudspaces_api_client.make_file(245 metadata = self.cloudspaces_api_client.make_file(
245 root_node_id, test_file_name)246 self.root_node_id, test_file_name)
246247
247 validictory.validate(248 validictory.validate(
248 metadata, schemas.GET_FILE_METADATA_RESPONSE_SCHEMA)249 metadata, schemas.GET_FILE_METADATA_RESPONSE_SCHEMA)
@@ -251,11 +252,12 @@
251 expected = dict(252 expected = dict(
252 hash=None, filename=test_file_name, is_deleted=False,253 hash=None, filename=test_file_name, is_deleted=False,
253 is_folder=False, mimetype=test_file_mimetype,254 is_folder=False, mimetype=test_file_mimetype,
254 parent_node_id=root_node_id, path=root_path, size=0, version=1)255 parent_node_id=self.root_node_id, path=root_path, size=0,
256 version=1)
255 self._assert_json_object_values(expected, metadata)257 self._assert_json_object_values(expected, metadata)
256258
257 # Assert that the file has just been created.259 # Assert that the file has just been created.
258 self._assert_datetime_limits(260 self.assert_datetime_limits(
259 parser.parse(metadata.get('server_modified')), self.start_datetime,261 parser.parse(metadata.get('server_modified')), self.start_datetime,
260 self._get_now_datetime())262 self._get_now_datetime())
261 # TODO update the spec because it says checksum instead of hash.263 # TODO update the spec because it says checksum instead of hash.
@@ -267,21 +269,19 @@
267269
268 def test_download_empty_file(self):270 def test_download_empty_file(self):
269 test_file_name = 'test_file_to_download.txt'271 test_file_name = 'test_file_to_download.txt'
270 root_node_id = self._get_root_node_id()
271 create_metadata = self.cloudspaces_api_client.make_file(272 create_metadata = self.cloudspaces_api_client.make_file(
272 root_node_id, test_file_name)273 self.root_node_id, test_file_name)
273 file_node_id = create_metadata.get('node_id')274 file_node_id = create_metadata.get('node_id')
274275
275 contents = list(self.cloudspaces_api_client.get_file(file_node_id))276 contents = list(self.cloudspaces_api_client.get_file(file_node_id))
276 self.assertEqual(contents, [])277 self.assertEqual(contents, [])
277278
278 def test_delete_file(self):279 def test_delete_file(self):
279 root_node_id = self._get_root_node_id()
280 test_file_name = 'test_file_to_delete.txt'280 test_file_name = 'test_file_to_delete.txt'
281 test_file_mimetype = 'text/plain'281 test_file_mimetype = 'text/plain'
282282
283 create_metadata = self.cloudspaces_api_client.make_file(283 create_metadata = self.cloudspaces_api_client.make_file(
284 root_node_id, test_file_name)284 self.root_node_id, test_file_name)
285 file_node_id = create_metadata.get('node_id')285 file_node_id = create_metadata.get('node_id')
286286
287 delete_metadata = self.cloudspaces_api_client.delete(file_node_id)287 delete_metadata = self.cloudspaces_api_client.delete(file_node_id)
@@ -292,11 +292,11 @@
292 expected = dict(292 expected = dict(
293 hash=None, filename=test_file_name, is_deleted=True,293 hash=None, filename=test_file_name, is_deleted=True,
294 is_folder=False, mimetype=test_file_mimetype,294 is_folder=False, mimetype=test_file_mimetype,
295 parent_node_id=root_node_id, path=root_path, size=0)295 parent_node_id=self.root_node_id, path=root_path, size=0)
296 self._assert_json_object_values(expected, delete_metadata)296 self._assert_json_object_values(expected, delete_metadata)
297297
298 # Assert that the file has just been modified.298 # Assert that the file has just been modified.
299 self._assert_datetime_limits(299 self.assert_datetime_limits(
300 parser.parse(delete_metadata.get('server_modified')),300 parser.parse(delete_metadata.get('server_modified')),
301 self.start_datetime,301 self.start_datetime,
302 self._get_now_datetime())302 self._get_now_datetime())
@@ -304,12 +304,10 @@
304 # TODO Check the volume_id field. --elopio - 2013-11-27304 # TODO Check the volume_id field. --elopio - 2013-11-27
305305
306 def test_delete_folder_in_root(self):306 def test_delete_folder_in_root(self):
307 # get the root node id and root folder name
308 root_node_id = self._get_root_node_id()
309 # create the folder to be deleted later307 # create the folder to be deleted later
310 folder_name = 'delete_me_folder_1'308 folder_name = 'delete_me_folder_1'
311 metadata = self.cloudspaces_api_client.make_folder(309 metadata = self.cloudspaces_api_client.make_folder(
312 root_node_id, folder_name)310 self.root_node_id, folder_name)
313 # now delete the folder311 # now delete the folder
314 node_id = metadata.get('node_id')312 node_id = metadata.get('node_id')
315 metadata = self.cloudspaces_api_client.delete(node_id)313 metadata = self.cloudspaces_api_client.delete(node_id)
@@ -329,10 +327,9 @@
329 self.cloudspaces_api_client.delete(node_id)327 self.cloudspaces_api_client.delete(node_id)
330328
331 def test_delete_folder_and_children_in_root(self):329 def test_delete_folder_and_children_in_root(self):
332 root_node_id = self._get_root_node_id()
333 # create a new parent folder to hold the child items330 # create a new parent folder to hold the child items
334 metadata = self.cloudspaces_api_client.make_folder(331 metadata = self.cloudspaces_api_client.make_folder(
335 root_node_id, 'test_delete_folder_and_children_in_root')332 self.root_node_id, 'test_delete_folder_and_children_in_root')
336 parent_node_id = metadata.get('node_id')333 parent_node_id = metadata.get('node_id')
337 # now create sub-files and folders within this folder334 # now create sub-files and folders within this folder
338 # this content should be deleted by the test when top folder is deleted335 # this content should be deleted by the test when top folder is deleted
@@ -355,12 +352,10 @@
355352
356 def test_create_folder_using_parent_file_id(self):353 def test_create_folder_using_parent_file_id(self):
357 # A negative test to create a folder using the node id of a file as354 # A negative test to create a folder using the node id of a file as
358 # the parent node id for the folder
359 root_node_id = self._get_root_node_id()
360 # create a file first355 # create a file first
361 file_name = 'test_file.txt'356 file_name = 'test_file.txt'
362 metadata = self.cloudspaces_api_client.make_file(357 metadata = self.cloudspaces_api_client.make_file(
363 root_node_id, file_name)358 self.root_node_id, file_name)
364 file_node_id = metadata.get('node_id')359 file_node_id = metadata.get('node_id')
365 # now try and create a folder, using file id as parent360 # now try and create a folder, using file id as parent
366 # this should fail gracefully with a suitable error code361 # this should fail gracefully with a suitable error code
@@ -369,11 +364,9 @@
369 self.cloudspaces_api_client.make_folder(file_node_id, folder_name)364 self.cloudspaces_api_client.make_folder(file_node_id, folder_name)
370365
371 def test_folder_child_list_false(self):366 def test_folder_child_list_false(self):
372 # A test to get child objects from parent directory
373 root_node_id = self._get_root_node_id()
374 # create a new parent folder to hold the child items367 # create a new parent folder to hold the child items
375 metadata = self.cloudspaces_api_client.make_folder(368 metadata = self.cloudspaces_api_client.make_folder(
376 root_node_id, 'test_folder_child_list_false')369 self.root_node_id, 'test_folder_child_list_false')
377 parent_node_id = metadata.get('node_id')370 parent_node_id = metadata.get('node_id')
378 # Create a data structure from root folder371 # Create a data structure from root folder
379 file_count = 3372 file_count = 3
@@ -387,11 +380,9 @@
387 self.assertEqual(None, metadata.get('contents'))380 self.assertEqual(None, metadata.get('contents'))
388381
389 def test_folder_child_list_true(self):382 def test_folder_child_list_true(self):
390 # A test to get child objects from parent directory
391 root_node_id = self._get_root_node_id()
392 # create a new parent folder to hold the child items383 # create a new parent folder to hold the child items
393 metadata = self.cloudspaces_api_client.make_folder(384 metadata = self.cloudspaces_api_client.make_folder(
394 root_node_id, 'test_folder_child_list_true')385 self.root_node_id, 'test_folder_child_list_true')
395 parent_node_id = metadata.get('node_id')386 parent_node_id = metadata.get('node_id')
396 # Create a data structure from root folder387 # Create a data structure from root folder
397 file_count = 3388 file_count = 3
@@ -408,17 +399,14 @@
408399
409 def test_folder_depth(self):400 def test_folder_depth(self):
410 # A test to create a hierarchichal directory structure and validate401 # A test to create a hierarchichal directory structure and validate
411 # the folder path is correct for each sub-folder402 parent_node_id = self.root_node_id
412 root_node_id = self._get_root_node_id()403 parent_metadata = self.cloudspaces_api_client.get_metadata(
413 # create a new parent folder to hold the child items404 parent_node_id)
414 parent_metadata = self.cloudspaces_api_client.make_folder(
415 root_node_id, 'test_folder_depth')
416 parent_node_id = parent_metadata.get('node_id')
417 folder_depth = 10
418 # store the path of the top level folder405 # store the path of the top level folder
419 parent_path = os.path.join(406 parent_path = os.path.join(
420 parent_metadata.get('path'), parent_metadata.get('filename'))407 parent_metadata.get('path'), parent_metadata.get('filename'))
421408
409 folder_depth = 10
422 for level in range(folder_depth):410 for level in range(folder_depth):
423 # construct the expected folder path411 # construct the expected folder path
424 folder_name = 'folder_{}'.format(level + 1)412 folder_name = 'folder_{}'.format(level + 1)
@@ -434,33 +422,25 @@
434 parent_node_id = metadata.get('node_id')422 parent_node_id = metadata.get('node_id')
435423
436 def test_create_folder_with_existing_name(self):424 def test_create_folder_with_existing_name(self):
437 # attempt to create 2 folders with the same name in root
438 root_node_id = self._get_root_node_id()
439 # create a new parent folder to hold the child items
440 metadata = self.cloudspaces_api_client.make_folder(
441 root_node_id, 'test_create_folder_with_existing_name')
442 parent_node_id = metadata.get('node_id')
443 folder_name = 'duplicate_folder'425 folder_name = 'duplicate_folder'
444 self.cloudspaces_api_client.make_folder(426 self.cloudspaces_api_client.make_folder(
445 parent_node_id, folder_name)427 self.root_node_id, folder_name)
446 metadata = self.cloudspaces_api_client.make_folder(428 folder_metadata = self.cloudspaces_api_client.make_folder(
447 parent_node_id, folder_name)429 self.root_node_id, folder_name)
448 # now do a check the metadata of the dir listing430 # now do a check the metadata of the dir listing
449 get_metadata = self.cloudspaces_api_client.get_metadata(431 root_metadata = self.cloudspaces_api_client.get_metadata(
450 parent_node_id, list='true')432 self.root_node_id, list='true')
451 child_nodes = get_metadata.get('contents')433 child_nodes = root_metadata.get('contents')
452 # check only 1 folder listed and that the metadata matches434 # check only 1 folder listed and that the metadata matches
453 self.assertEqual(len(child_nodes), 1)435 self.assertEqual(len(child_nodes), 1)
454 self.assertEqual(metadata, child_nodes[0])436 self.assertEqual(folder_metadata, child_nodes[0])
455437
456 def test_new_file_version(self):438 def test_new_file_version(self):
457 # A test to upload new content to a file and check it is updated
458 root_node_id = self._get_root_node_id()
459 test_file_name = 'file_version_test.txt'439 test_file_name = 'file_version_test.txt'
460 content_v1 = 'This is file content version 1'440 content_v1 = 'This is file content version 1'
461 content_v2 = 'This is the next file version, 2'441 content_v2 = 'This is the next file version, 2'
462 metadata = self.cloudspaces_api_client.make_file(442 metadata = self.cloudspaces_api_client.make_file(
463 root_node_id, test_file_name)443 self.root_node_id, test_file_name)
464 file_node_id = metadata.get('node_id')444 file_node_id = metadata.get('node_id')
465 # load version 1 of the file445 # load version 1 of the file
466 metadata = self.cloudspaces_api_client.put_file(446 metadata = self.cloudspaces_api_client.put_file(
@@ -468,7 +448,7 @@
468 # check correct version448 # check correct version
469 self.assertEqual(metadata.get('version'), 2)449 self.assertEqual(metadata.get('version'), 2)
470 # Assert that the file has just been created.450 # Assert that the file has just been created.
471 self._assert_datetime_limits(451 self.assert_datetime_limits(
472 parser.parse(metadata.get('server_modified')), self.start_datetime,452 parser.parse(metadata.get('server_modified')), self.start_datetime,
473 self._get_now_datetime())453 self._get_now_datetime())
474 # load version 2 of the file454 # load version 2 of the file
@@ -477,7 +457,7 @@
477 # check correct version457 # check correct version
478 self.assertEqual(metadata.get('version'), 3)458 self.assertEqual(metadata.get('version'), 3)
479 # Assert that the file has just been updated.459 # Assert that the file has just been updated.
480 self._assert_datetime_limits(460 self.assert_datetime_limits(
481 parser.parse(metadata.get('server_modified')), self.start_datetime,461 parser.parse(metadata.get('server_modified')), self.start_datetime,
482 self._get_now_datetime())462 self._get_now_datetime())
483 # get the latest version and compare with expected content463 # get the latest version and compare with expected content

Subscribers

People subscribed via source and target branches

to all changes: