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