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

Proposed by Leo Arias
Status: Merged
Merged at revision: 29
Proposed branch: lp:~elopio/cloudspacesclient/expected_state_verification
Merge into: lp:cloudspacesclient
Diff against target: 238 lines (+96/-98)
1 file modified
src/cloudspacesclient/tests/conformance/test_cloudspaces_api.py (+96/-98)
To merge this branch: bzr merge lp:~elopio/cloudspacesclient/expected_state_verification
Reviewer Review Type Date Requested Status
Richard Huddie (community) Approve
Ubuntu One hackers Pending
Review via email: mp+197136@code.launchpad.net

Commit message

Refactor to use expected state verification.

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

Looks great.

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-11-28 11:37:30 +0000
3+++ src/cloudspacesclient/tests/conformance/test_cloudspaces_api.py 2013-11-29 04:32:59 +0000
4@@ -105,96 +105,23 @@
5 validictory.validate(
6 metadata, schemas.GET_FOLDER_METADATA_RESPONSE_SCHEMA)
7
8+ expected = dict(
9+ is_deleted=False, is_folder=True, is_root=True, filename=filename,
10+ node_id=node_id, path=self.test_server.get_root_path())
11+ self._assert_json_object_values(expected, metadata)
12+
13 self._assert_normal_folder_keys_not_in_root(metadata)
14 self._assert_content_path(node_id, metadata.get('content_path'))
15+ self._assert_resource_path(node_id, metadata.get('resource_path'))
16 # TODO Check that the contents are not present because the folder is
17 # empty. --elopio - 2013-11-25
18- self.assertTrue(metadata.get('is_folder'))
19- self.assertFalse(metadata.get('is_deleted'))
20- self.assertTrue(metadata.get('is_root'))
21 # TODO The spec doesn't include it in the filename in the examples.
22 # --elopio - 2013-11-25
23- self.assertEqual(metadata.get('filename'), filename)
24- self.assertEqual(metadata.get('node_id'), node_id)
25 # TODO The spec says the path shouldn't be returned on the root
26 # metadata, but I think it's useful. Should we change the spec?
27 # --elopio - 2013-11-25
28- self.assertEqual(
29- metadata.get('path'), self.test_server.get_root_path())
30- self._assert_resource_path(node_id, metadata.get('resource_path'))
31 # TODO Check the volume_id field. --elopio - 2013-11-25
32
33- def test_create_folder_in_root(self):
34- # get the root node id and root folder name
35- root_node_id, root_name = self._get_root_info()
36- # create the folder
37- folder_name = 'root_folder_1'
38- metadata = self.cloudspaces_api_client.create_folder(
39- folder_name, root_node_id)
40- # validate the folder properties from response
41- validictory.validate(
42- metadata, schemas.GET_FOLDER_METADATA_RESPONSE_SCHEMA)
43- self.assertTrue(metadata.get('is_folder'))
44- self.assertFalse(metadata.get('is_deleted'))
45- self.assertFalse(metadata.get('is_root'))
46- self.assertEqual(metadata.get('path'), root_name)
47- self.assertEqual(metadata.get('filename'), folder_name)
48- self.assertEqual(metadata.get('parent_node_id'), root_node_id)
49- self.assertEqual(metadata.get('version'), 1)
50-
51- def test_create_folder_no_parent_id(self):
52- # get the root node id and root folder name
53- root_node_id, root_name = self._get_root_info()
54- # create the folder without specifying the parent folder id
55- # this should add folder to root level by default
56- folder_name = 'folder_no_parent_id'
57- metadata = self.cloudspaces_api_client.create_folder(folder_name)
58- # validate the folder properties from response
59- validictory.validate(
60- metadata, schemas.GET_FOLDER_METADATA_RESPONSE_SCHEMA)
61- self.assertTrue(metadata.get('is_folder'))
62- self.assertFalse(metadata.get('is_deleted'))
63- self.assertFalse(metadata.get('is_root'))
64- self.assertEqual(metadata.get('path'), root_name)
65- self.assertEqual(metadata.get('filename'), folder_name)
66- self.assertEqual(metadata.get('parent_node_id'), root_node_id)
67- self.assertEqual(metadata.get('version'), 1)
68-
69- def test_create_child_folder(self):
70- # get the root node id and root folder name
71- root_node_id, root_name = self._get_root_info()
72- parent_folder_name = 'parent_folder_1'
73- # create the parent folder
74- metadata = self.cloudspaces_api_client.create_folder(
75- parent_folder_name, root_node_id)
76- # validate the parent folder properties from response
77- validictory.validate(
78- metadata, schemas.GET_FOLDER_METADATA_RESPONSE_SCHEMA)
79- self.assertTrue(metadata.get('is_folder'))
80- self.assertFalse(metadata.get('is_deleted'))
81- self.assertFalse(metadata.get('is_root'))
82- self.assertEqual(metadata.get('path'), root_name)
83- self.assertEqual(metadata.get('filename'), parent_folder_name)
84- self.assertEqual(metadata.get('parent_node_id'), root_node_id)
85- self.assertEqual(metadata.get('version'), 1)
86-
87- # Now create a sub folder under the parent folder
88- child_folder_name = 'child_folder_1'
89- parent_node_id = metadata.get('node_id')
90- metadata = self.cloudspaces_api_client.create_folder(
91- child_folder_name, parent_node_id)
92- # validate the sub-folder properties from response
93- validictory.validate(
94- metadata, schemas.GET_FOLDER_METADATA_RESPONSE_SCHEMA)
95- self.assertTrue(metadata.get('is_folder'))
96- self.assertFalse(metadata.get('is_deleted'))
97- self.assertFalse(metadata.get('is_root'))
98- self.assertEqual(metadata.get('path'), '{0}/{1}'.format(
99- root_name, parent_folder_name))
100- self.assertEqual(metadata.get('filename'), child_folder_name)
101- self.assertEqual(metadata.get('parent_node_id'), parent_node_id)
102- self.assertEqual(metadata.get('version'), 2)
103-
104 def _get_root_info(self):
105 user_rep = self.cloudspaces_api_client.get_user_representation()
106 root_volume = self._get_root_volume(user_rep.get('volumes'))
107@@ -206,6 +133,21 @@
108 # FIXME The first volume returned is not necessarily the root.
109 # --elopio - 2013-11-23
110 return volumes[0]
111+
112+ def _assert_json_object_values(self, expected, actual):
113+ """Assert the values of the returned json object.
114+
115+ It checks that all the items in ``expected`` are in ``actual`` with
116+ the same value. It doesn't check that ``actual`` has no extra values.
117+
118+ """
119+ for key, expected_value in expected.items():
120+ actual_value = actual.get(key)
121+ self.assertEqual(
122+ expected_value, actual_value,
123+ 'Wrong value returned on the field {0}. '
124+ 'Expected: {1}. Received: {2}'.format(
125+ key, expected_value, actual_value))
126
127 def _assert_normal_folder_keys_not_in_root(self, response_json):
128 normal_folder_keys_not_in_root = [
129@@ -222,34 +164,90 @@
130 self.assertEqual(
131 content_path, '{0}content/{1}'.format(path, node_id))
132
133+ def test_create_folder_in_root(self):
134+ # get the root node id and root folder name
135+ root_node_id, root_name = self._get_root_info()
136+ # create the folder
137+ folder_name = 'root_folder_1'
138+
139+ metadata = self.cloudspaces_api_client.create_folder(
140+ folder_name, root_node_id)
141+ # validate the folder properties from response
142+ validictory.validate(
143+ metadata, schemas.GET_FOLDER_METADATA_RESPONSE_SCHEMA)
144+
145+ expected = dict(
146+ is_folder=True, is_deleted=False, is_root=False, path=root_name,
147+ filename=folder_name, parent_node_id=root_node_id, version=1)
148+ self._assert_json_object_values(expected, metadata)
149+
150+ def test_create_folder_no_parent_id(self):
151+ # get the root node id and root folder name
152+ root_node_id, root_name = self._get_root_info()
153+ # create the folder without specifying the parent folder id
154+ # this should add folder to root level by default
155+ folder_name = 'folder_no_parent_id'
156+
157+ metadata = self.cloudspaces_api_client.create_folder(folder_name)
158+ # validate the folder properties from response
159+ validictory.validate(
160+ metadata, schemas.GET_FOLDER_METADATA_RESPONSE_SCHEMA)
161+
162+ expected = dict(
163+ is_folder=True, is_deleted=False, is_root=False, path=root_name,
164+ filename=folder_name, parent_node_id=root_node_id, version=1)
165+ self._assert_json_object_values(expected, metadata)
166+
167+ def test_create_child_folder(self):
168+ # get the root node id and root folder name
169+ root_node_id, root_name = self._get_root_info()
170+ parent_folder_name = 'parent_folder_1'
171+ # create the parent folder
172+ parent_metadata = self.cloudspaces_api_client.create_folder(
173+ parent_folder_name, root_node_id)
174+ # Now create a sub folder under the parent folder
175+ child_folder_name = 'child_folder_1'
176+ parent_node_id = parent_metadata.get('node_id')
177+ child_folder_path = '{0}/{1}'.format(root_name, parent_folder_name)
178+
179+ metadata = self.cloudspaces_api_client.create_folder(
180+ child_folder_name, parent_node_id)
181+ # validate the sub-folder properties from response
182+ validictory.validate(
183+ metadata, schemas.GET_FOLDER_METADATA_RESPONSE_SCHEMA)
184+
185+ expected = dict(
186+ is_folder=True, is_deleted=False, is_root=False,
187+ path=child_folder_path, filename=child_folder_name, version=2)
188+ self._assert_json_object_values(expected, metadata)
189+
190 def test_create_new_file(self):
191- root_node_id, path = self._get_root_info()
192+ root_node_id, root_path = self._get_root_info()
193+ test_file_name = 'test.txt'
194+ test_file_mimetype = 'text/plain'
195
196 metadata = self.cloudspaces_api_client.create_file(
197- 'test.txt', root_node_id)
198+ test_file_name, root_node_id)
199+
200+ validictory.validate(
201+ metadata, schemas.GET_FILE_METADATA_RESPONSE_SCHEMA)
202+
203+ expected = dict(
204+ hash=None, filename=test_file_name, is_deleted=False,
205+ is_folder=False, mimetype=test_file_mimetype,
206+ parent_node_id=root_node_id, path=root_path, size=0, version=1)
207+ self._assert_json_object_values(expected, metadata)
208+
209 file_node_id = metadata.get('node_id')
210-
211- validictory.validate(
212- metadata, schemas.GET_FILE_METADATA_RESPONSE_SCHEMA)
213-
214 self._assert_content_path(file_node_id, metadata.get('content_path'))
215- # TODO update the spec because it says checksum instead of hash.
216- # --elopio - 2013-11-27
217- self.assertEqual(metadata.get('hash'), None)
218- # TODO The spec doesn't include it in the filename in the examples.
219- # --elopio - 2013-11-25
220- self.assertEqual(metadata.get('filename'), 'test.txt')
221- self.assertFalse(metadata.get('is_deleted'))
222- self.assertFalse(metadata.get('is_folder'))
223- self.assertEqual(metadata.get('mimetype'), 'text/plain')
224- self.assertEqual(metadata.get('parent_node_id'), root_node_id)
225- self.assertEqual(metadata.get('path'), path)
226 self._assert_resource_path(file_node_id, metadata.get('resource_path'))
227- self.assertEqual(metadata.get('size'), 0)
228 # Assert that the file has just been created.
229 self._assert_datetime_limits(
230 parser.parse(metadata.get('server_modified')), self.start_datetime,
231 self._get_now_datetime())
232- self.assertEqual(metadata.get('version'), 1)
233+ # TODO update the spec because it says checksum instead of hash.
234+ # --elopio - 2013-11-27
235+ # TODO The spec doesn't include it in the filename in the examples.
236+ # --elopio - 2013-11-25
237 # TODO check the user_id. --elopio - 2013-11-27
238 # TODO Check the volume_id field. --elopio - 2013-11-27

Subscribers

People subscribed via source and target branches

to all changes: