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
=== modified file 'src/cloudspacesclient/tests/conformance/test_cloudspaces_api.py'
--- src/cloudspacesclient/tests/conformance/test_cloudspaces_api.py 2013-11-28 11:37:30 +0000
+++ src/cloudspacesclient/tests/conformance/test_cloudspaces_api.py 2013-11-29 04:32:59 +0000
@@ -105,96 +105,23 @@
105 validictory.validate(105 validictory.validate(
106 metadata, schemas.GET_FOLDER_METADATA_RESPONSE_SCHEMA)106 metadata, schemas.GET_FOLDER_METADATA_RESPONSE_SCHEMA)
107107
108 expected = dict(
109 is_deleted=False, is_folder=True, is_root=True, filename=filename,
110 node_id=node_id, path=self.test_server.get_root_path())
111 self._assert_json_object_values(expected, metadata)
112
108 self._assert_normal_folder_keys_not_in_root(metadata)113 self._assert_normal_folder_keys_not_in_root(metadata)
109 self._assert_content_path(node_id, metadata.get('content_path'))114 self._assert_content_path(node_id, metadata.get('content_path'))
115 self._assert_resource_path(node_id, metadata.get('resource_path'))
110 # TODO Check that the contents are not present because the folder is116 # TODO Check that the contents are not present because the folder is
111 # empty. --elopio - 2013-11-25117 # empty. --elopio - 2013-11-25
112 self.assertTrue(metadata.get('is_folder'))
113 self.assertFalse(metadata.get('is_deleted'))
114 self.assertTrue(metadata.get('is_root'))
115 # TODO The spec doesn't include it in the filename in the examples.118 # TODO The spec doesn't include it in the filename in the examples.
116 # --elopio - 2013-11-25119 # --elopio - 2013-11-25
117 self.assertEqual(metadata.get('filename'), filename)
118 self.assertEqual(metadata.get('node_id'), node_id)
119 # TODO The spec says the path shouldn't be returned on the root120 # TODO The spec says the path shouldn't be returned on the root
120 # metadata, but I think it's useful. Should we change the spec?121 # metadata, but I think it's useful. Should we change the spec?
121 # --elopio - 2013-11-25122 # --elopio - 2013-11-25
122 self.assertEqual(
123 metadata.get('path'), self.test_server.get_root_path())
124 self._assert_resource_path(node_id, metadata.get('resource_path'))
125 # TODO Check the volume_id field. --elopio - 2013-11-25123 # TODO Check the volume_id field. --elopio - 2013-11-25
126124
127 def test_create_folder_in_root(self):
128 # get the root node id and root folder name
129 root_node_id, root_name = self._get_root_info()
130 # create the folder
131 folder_name = 'root_folder_1'
132 metadata = self.cloudspaces_api_client.create_folder(
133 folder_name, root_node_id)
134 # validate the folder properties from response
135 validictory.validate(
136 metadata, schemas.GET_FOLDER_METADATA_RESPONSE_SCHEMA)
137 self.assertTrue(metadata.get('is_folder'))
138 self.assertFalse(metadata.get('is_deleted'))
139 self.assertFalse(metadata.get('is_root'))
140 self.assertEqual(metadata.get('path'), root_name)
141 self.assertEqual(metadata.get('filename'), folder_name)
142 self.assertEqual(metadata.get('parent_node_id'), root_node_id)
143 self.assertEqual(metadata.get('version'), 1)
144
145 def test_create_folder_no_parent_id(self):
146 # get the root node id and root folder name
147 root_node_id, root_name = self._get_root_info()
148 # create the folder without specifying the parent folder id
149 # this should add folder to root level by default
150 folder_name = 'folder_no_parent_id'
151 metadata = self.cloudspaces_api_client.create_folder(folder_name)
152 # validate the folder properties from response
153 validictory.validate(
154 metadata, schemas.GET_FOLDER_METADATA_RESPONSE_SCHEMA)
155 self.assertTrue(metadata.get('is_folder'))
156 self.assertFalse(metadata.get('is_deleted'))
157 self.assertFalse(metadata.get('is_root'))
158 self.assertEqual(metadata.get('path'), root_name)
159 self.assertEqual(metadata.get('filename'), folder_name)
160 self.assertEqual(metadata.get('parent_node_id'), root_node_id)
161 self.assertEqual(metadata.get('version'), 1)
162
163 def test_create_child_folder(self):
164 # get the root node id and root folder name
165 root_node_id, root_name = self._get_root_info()
166 parent_folder_name = 'parent_folder_1'
167 # create the parent folder
168 metadata = self.cloudspaces_api_client.create_folder(
169 parent_folder_name, root_node_id)
170 # validate the parent folder properties from response
171 validictory.validate(
172 metadata, schemas.GET_FOLDER_METADATA_RESPONSE_SCHEMA)
173 self.assertTrue(metadata.get('is_folder'))
174 self.assertFalse(metadata.get('is_deleted'))
175 self.assertFalse(metadata.get('is_root'))
176 self.assertEqual(metadata.get('path'), root_name)
177 self.assertEqual(metadata.get('filename'), parent_folder_name)
178 self.assertEqual(metadata.get('parent_node_id'), root_node_id)
179 self.assertEqual(metadata.get('version'), 1)
180
181 # Now create a sub folder under the parent folder
182 child_folder_name = 'child_folder_1'
183 parent_node_id = metadata.get('node_id')
184 metadata = self.cloudspaces_api_client.create_folder(
185 child_folder_name, parent_node_id)
186 # validate the sub-folder properties from response
187 validictory.validate(
188 metadata, schemas.GET_FOLDER_METADATA_RESPONSE_SCHEMA)
189 self.assertTrue(metadata.get('is_folder'))
190 self.assertFalse(metadata.get('is_deleted'))
191 self.assertFalse(metadata.get('is_root'))
192 self.assertEqual(metadata.get('path'), '{0}/{1}'.format(
193 root_name, parent_folder_name))
194 self.assertEqual(metadata.get('filename'), child_folder_name)
195 self.assertEqual(metadata.get('parent_node_id'), parent_node_id)
196 self.assertEqual(metadata.get('version'), 2)
197
198 def _get_root_info(self):125 def _get_root_info(self):
199 user_rep = self.cloudspaces_api_client.get_user_representation()126 user_rep = self.cloudspaces_api_client.get_user_representation()
200 root_volume = self._get_root_volume(user_rep.get('volumes'))127 root_volume = self._get_root_volume(user_rep.get('volumes'))
@@ -206,6 +133,21 @@
206 # FIXME The first volume returned is not necessarily the root.133 # FIXME The first volume returned is not necessarily the root.
207 # --elopio - 2013-11-23134 # --elopio - 2013-11-23
208 return volumes[0]135 return volumes[0]
136
137 def _assert_json_object_values(self, expected, actual):
138 """Assert the values of the returned json object.
139
140 It checks that all the items in ``expected`` are in ``actual`` with
141 the same value. It doesn't check that ``actual`` has no extra values.
142
143 """
144 for key, expected_value in expected.items():
145 actual_value = actual.get(key)
146 self.assertEqual(
147 expected_value, actual_value,
148 'Wrong value returned on the field {0}. '
149 'Expected: {1}. Received: {2}'.format(
150 key, expected_value, actual_value))
209151
210 def _assert_normal_folder_keys_not_in_root(self, response_json):152 def _assert_normal_folder_keys_not_in_root(self, response_json):
211 normal_folder_keys_not_in_root = [153 normal_folder_keys_not_in_root = [
@@ -222,34 +164,90 @@
222 self.assertEqual(164 self.assertEqual(
223 content_path, '{0}content/{1}'.format(path, node_id))165 content_path, '{0}content/{1}'.format(path, node_id))
224166
167 def test_create_folder_in_root(self):
168 # get the root node id and root folder name
169 root_node_id, root_name = self._get_root_info()
170 # create the folder
171 folder_name = 'root_folder_1'
172
173 metadata = self.cloudspaces_api_client.create_folder(
174 folder_name, root_node_id)
175 # validate the folder properties from response
176 validictory.validate(
177 metadata, schemas.GET_FOLDER_METADATA_RESPONSE_SCHEMA)
178
179 expected = dict(
180 is_folder=True, is_deleted=False, is_root=False, path=root_name,
181 filename=folder_name, parent_node_id=root_node_id, version=1)
182 self._assert_json_object_values(expected, metadata)
183
184 def test_create_folder_no_parent_id(self):
185 # get the root node id and root folder name
186 root_node_id, root_name = self._get_root_info()
187 # create the folder without specifying the parent folder id
188 # this should add folder to root level by default
189 folder_name = 'folder_no_parent_id'
190
191 metadata = self.cloudspaces_api_client.create_folder(folder_name)
192 # validate the folder properties from response
193 validictory.validate(
194 metadata, schemas.GET_FOLDER_METADATA_RESPONSE_SCHEMA)
195
196 expected = dict(
197 is_folder=True, is_deleted=False, is_root=False, path=root_name,
198 filename=folder_name, parent_node_id=root_node_id, version=1)
199 self._assert_json_object_values(expected, metadata)
200
201 def test_create_child_folder(self):
202 # get the root node id and root folder name
203 root_node_id, root_name = self._get_root_info()
204 parent_folder_name = 'parent_folder_1'
205 # create the parent folder
206 parent_metadata = self.cloudspaces_api_client.create_folder(
207 parent_folder_name, root_node_id)
208 # Now create a sub folder under the parent folder
209 child_folder_name = 'child_folder_1'
210 parent_node_id = parent_metadata.get('node_id')
211 child_folder_path = '{0}/{1}'.format(root_name, parent_folder_name)
212
213 metadata = self.cloudspaces_api_client.create_folder(
214 child_folder_name, parent_node_id)
215 # validate the sub-folder properties from response
216 validictory.validate(
217 metadata, schemas.GET_FOLDER_METADATA_RESPONSE_SCHEMA)
218
219 expected = dict(
220 is_folder=True, is_deleted=False, is_root=False,
221 path=child_folder_path, filename=child_folder_name, version=2)
222 self._assert_json_object_values(expected, metadata)
223
225 def test_create_new_file(self):224 def test_create_new_file(self):
226 root_node_id, path = self._get_root_info()225 root_node_id, root_path = self._get_root_info()
226 test_file_name = 'test.txt'
227 test_file_mimetype = 'text/plain'
227228
228 metadata = self.cloudspaces_api_client.create_file(229 metadata = self.cloudspaces_api_client.create_file(
229 'test.txt', root_node_id)230 test_file_name, root_node_id)
231
232 validictory.validate(
233 metadata, schemas.GET_FILE_METADATA_RESPONSE_SCHEMA)
234
235 expected = dict(
236 hash=None, filename=test_file_name, is_deleted=False,
237 is_folder=False, mimetype=test_file_mimetype,
238 parent_node_id=root_node_id, path=root_path, size=0, version=1)
239 self._assert_json_object_values(expected, metadata)
240
230 file_node_id = metadata.get('node_id')241 file_node_id = metadata.get('node_id')
231
232 validictory.validate(
233 metadata, schemas.GET_FILE_METADATA_RESPONSE_SCHEMA)
234
235 self._assert_content_path(file_node_id, metadata.get('content_path'))242 self._assert_content_path(file_node_id, metadata.get('content_path'))
236 # TODO update the spec because it says checksum instead of hash.
237 # --elopio - 2013-11-27
238 self.assertEqual(metadata.get('hash'), None)
239 # TODO The spec doesn't include it in the filename in the examples.
240 # --elopio - 2013-11-25
241 self.assertEqual(metadata.get('filename'), 'test.txt')
242 self.assertFalse(metadata.get('is_deleted'))
243 self.assertFalse(metadata.get('is_folder'))
244 self.assertEqual(metadata.get('mimetype'), 'text/plain')
245 self.assertEqual(metadata.get('parent_node_id'), root_node_id)
246 self.assertEqual(metadata.get('path'), path)
247 self._assert_resource_path(file_node_id, metadata.get('resource_path'))243 self._assert_resource_path(file_node_id, metadata.get('resource_path'))
248 self.assertEqual(metadata.get('size'), 0)
249 # Assert that the file has just been created.244 # Assert that the file has just been created.
250 self._assert_datetime_limits(245 self._assert_datetime_limits(
251 parser.parse(metadata.get('server_modified')), self.start_datetime,246 parser.parse(metadata.get('server_modified')), self.start_datetime,
252 self._get_now_datetime())247 self._get_now_datetime())
253 self.assertEqual(metadata.get('version'), 1)248 # TODO update the spec because it says checksum instead of hash.
249 # --elopio - 2013-11-27
250 # TODO The spec doesn't include it in the filename in the examples.
251 # --elopio - 2013-11-25
254 # TODO check the user_id. --elopio - 2013-11-27252 # TODO check the user_id. --elopio - 2013-11-27
255 # TODO Check the volume_id field. --elopio - 2013-11-27253 # TODO Check the volume_id field. --elopio - 2013-11-27

Subscribers

People subscribed via source and target branches

to all changes: