|
6 | 6 |
|
7 | 7 | import pytest |
8 | 8 |
|
| 9 | +from boxsdk.config import API |
9 | 10 | from boxsdk.object.file import File |
10 | 11 | from boxsdk.object.user import User |
11 | 12 | from boxsdk.object.search import MetadataSearchFilters, MetadataSearchFilter, SearchScope, TrashContent |
@@ -78,6 +79,48 @@ def search_response(): |
78 | 79 | } |
79 | 80 |
|
80 | 81 |
|
| 82 | +@pytest.fixture |
| 83 | +def metadata_query_response(): |
| 84 | + return { |
| 85 | + 'entries': [ |
| 86 | + { |
| 87 | + 'type': 'file', |
| 88 | + 'id': '1244738582', |
| 89 | + 'name': 'Very Important.docx', |
| 90 | + 'metadata': { |
| 91 | + 'enterprise_67890': { |
| 92 | + 'catalogImages': { |
| 93 | + '$parent': 'file_50347290', |
| 94 | + '$version': 2, |
| 95 | + '$template': 'catalogImages', |
| 96 | + '$scope': 'enterprise_67890', |
| 97 | + 'photographer': 'Bob Dylan' |
| 98 | + } |
| 99 | + } |
| 100 | + } |
| 101 | + }, |
| 102 | + { |
| 103 | + 'type': 'folder', |
| 104 | + 'id': '124242482', |
| 105 | + 'name': 'Also Important.docx', |
| 106 | + 'metadata': { |
| 107 | + 'enterprise_67890': { |
| 108 | + 'catalogImages': { |
| 109 | + '$parent': 'file_50427291', |
| 110 | + '$version': 2, |
| 111 | + '$template': 'catalogImages', |
| 112 | + '$scope': 'enterprise_67890', |
| 113 | + 'photographer': 'Bob Dylan' |
| 114 | + } |
| 115 | + } |
| 116 | + } |
| 117 | + } |
| 118 | + ], |
| 119 | + 'limit': 2, |
| 120 | + 'next_marker': '' |
| 121 | + } |
| 122 | + |
| 123 | + |
81 | 124 | class Matcher(object): |
82 | 125 | def __init__(self, compare, some_obj): |
83 | 126 | self.compare = compare |
@@ -257,6 +300,61 @@ def test_query_with_owner_users( |
257 | 300 | ) |
258 | 301 |
|
259 | 302 |
|
| 303 | +def test_metadata_query( |
| 304 | + mock_box_session, |
| 305 | + make_mock_box_request, |
| 306 | + test_search, |
| 307 | + metadata_query_response |
| 308 | +): |
| 309 | + # pylint:disable=redefined-outer-name |
| 310 | + expected_url = '{0}/metadata_queries/execute_read'.format(API.BASE_API_URL) |
| 311 | + from_template = 'enterprise_12345.someTemplate' |
| 312 | + ancestor_folder_id = '5555' |
| 313 | + query = 'amount >= :arg' |
| 314 | + query_params = {'arg': 100} |
| 315 | + use_index = 'amountAsc' |
| 316 | + order_by = [ |
| 317 | + { |
| 318 | + 'field_key': 'amount', |
| 319 | + 'direction': 'asc' |
| 320 | + } |
| 321 | + ] |
| 322 | + fields = ['type', 'id', 'name', 'metadata.enterprise_67890.catalogImages.$parent'] |
| 323 | + limit = 2 |
| 324 | + marker = 'AAAAAmVYB1FWec8GH6yWu2nwmanfMh07IyYInaa7DZDYjgO1H4KoLW29vPlLY173OKs' |
| 325 | + expected_data = { |
| 326 | + 'limit': limit, |
| 327 | + 'from': from_template, |
| 328 | + 'ancestor_folder_id': ancestor_folder_id, |
| 329 | + 'query': query, |
| 330 | + 'query_params': query_params, |
| 331 | + 'use_index': use_index, |
| 332 | + 'order_by': order_by, |
| 333 | + 'marker': marker, |
| 334 | + 'fields': fields |
| 335 | + } |
| 336 | + expected_headers = {b'Content-Type': b'application/json'} |
| 337 | + mock_box_session.post.return_value, _ = make_mock_box_request(response=metadata_query_response) |
| 338 | + items = test_search.metadata_query( |
| 339 | + from_template, |
| 340 | + ancestor_folder_id, |
| 341 | + query, |
| 342 | + query_params, |
| 343 | + use_index, |
| 344 | + order_by, |
| 345 | + marker, |
| 346 | + limit, |
| 347 | + fields |
| 348 | + ) |
| 349 | + item1 = items.next() |
| 350 | + item2 = items.next() |
| 351 | + mock_box_session.post.assert_called_once_with(expected_url, data=json.dumps(expected_data), headers=expected_headers) |
| 352 | + assert item1['type'] == 'file' |
| 353 | + assert item1['metadata']['enterprise_67890']['catalogImages']['$parent'] == 'file_50347290' |
| 354 | + assert item2['type'] == 'folder' |
| 355 | + assert item2['metadata']['enterprise_67890']['catalogImages']['$parent'] == 'file_50427291' |
| 356 | + |
| 357 | + |
260 | 358 | def test_range_filter_without_gt_and_lt_will_fail_validation(): |
261 | 359 | metadata_filter = MetadataSearchFilter(template_key='mytemplate', scope='enterprise') |
262 | 360 | with pytest.raises(ValueError): |
|
0 commit comments