def test_delete_recursive(self, mock_children, mock_delete): wrapped_doc = IndexedFile( **{ 'name': 'folder1', 'system': 'test.system', 'path': '/path/to/folder', 'format': 'folder' }) base = BaseESFile('test_user', system='test.system', wrapped_doc=wrapped_doc) object.__setattr__(base, '_wrapped', wrapped_doc) object.__setattr__(base, 'format', 'folder') object.__setattr__(base, 'path', '/path/to/folder') child_doc = IndexedFile( **{ 'name': 'child1', 'system': 'test.system', 'path': '/path/to/child1', 'format': 'file' }) base_child = BaseESFile('test_user', system='test.system', wrapped_doc=child_doc) object.__setattr__(base_child, '_wrapped', child_doc) object.__setattr__(base_child, 'format', 'file') object.__setattr__(base_child, 'path', '/path/to/child1') mock_children.return_value = iter([base_child]) base.delete() # Assert 2 delete calls: 1 for parent, 1 for child self.assertEqual(mock_delete.call_count, 2)
def index_level(client, path, folders, files, systemId, username, reindex=False, update_pems=True): """ Index a set of folders and files corresponding to the output from one iteration of walk_levels """ from designsafe.libs.elasticsearch.docs.files import BaseESFile for obj in folders + files: obj_dict = obj.to_dict() obj_dict.pop('permissions') obj_dict.pop('trail') obj_dict.pop('_links') doc = BaseESFile(username, reindex=reindex, **obj_dict) saved = doc.save() if update_pems: permissions = client.files.listPermissions(systemId=systemId, filePath=obj.path) for pem in permissions: pem.pop('_links') doc.update(**{'permissions': permissions}) children_paths = [_file.path for _file in folders + files] es_root = BaseESFile(username, systemId, path, reindex=reindex) for doc in es_root.children(): if doc is not None and doc.path not in children_paths: doc.delete()
def test_children_function(self, mock_index): child_doc1 = IndexedFile(**{ 'name': 'child1', 'system': 'test.system', 'path': '/path/to/child1' }) child_doc2 = IndexedFile(**{ 'name': 'child2', 'system': 'test.system', 'path': '/path/to/child2' }) mock_index.return_value.children.side_effect = [([child_doc1], 'KEY1'), ([child_doc2], 'KEY2'), ([], None)] wrapped_doc = IndexedFile(**{ 'name': 'file1', 'system': 'test.system', 'path': '/path/to/file' }) base = BaseESFile('test_user', system='test.system', wrapped_doc=wrapped_doc) # Need to set attrs manually because the custom setter/getter in BaseESResource are mocked object.__setattr__(base, 'username', 'test_user') object.__setattr__(base, '_reindex', False) object.__setattr__(base, 'system', 'test.system') object.__setattr__(base, 'path', '/path/to/file') child_generator = base.children(limit=1) for child in child_generator: continue mock_index().children.assert_has_calls([ call('test_user', 'test.system', '/path/to/file', limit=1), call('test_user', 'test.system', '/path/to/file', limit=1, search_after='KEY1'), call('test_user', 'test.system', '/path/to/file', limit=1, search_after='KEY2'), ]) # Check that iteration ends after all children have been listed. self.assertRaises(StopIteration, child_generator.__next__)
def test_delete_no_dir(self, mock_delete): wrapped_doc = IndexedFile( **{ 'name': 'file1', 'system': 'test.system', 'path': '/path/to/file', 'format': 'file' }) base = BaseESFile('test_user', system='test.system', wrapped_doc=wrapped_doc) object.__setattr__(base, '_wrapped', wrapped_doc) base.delete() mock_delete.assert_called_with()
def test_save(self, mock_save): wrapped_doc = IndexedFile(**{ 'name': 'file1', 'system': 'test.system', 'path': '/path/to/file' }) base = BaseESFile('test_user', system='test.system', wrapped_doc=wrapped_doc) # Need to set attrs manually because the custom setter/getter in BaseESResource are mocked object.__setattr__(base, 'path', '/path/to/file') object.__setattr__(base, '_wrapped', wrapped_doc) base.save() # self.mock_base_update.assert_called_with(**{'basePath': '/path/to'}) mock_save.assert_called_with()
def test_class_init_no_wrap(self, mock_populate): base = BaseESFile('test_user', system='test.system', wrapped_doc=None) self.mock_base_init.assert_called_with(None) mock_populate.assert_called_with('test.system', '/') self.mock_base_setattr.assert_has_calls( [call('username', 'test_user'), call('_reindex', False)])
def test_class_init_with_wrap(self): wd = IndexedFile(**{ 'name': 'file1', 'system': 'test.system', 'path': '/path/to/file' }) base = BaseESFile('test_user', wrapped_doc=wd) self.mock_base_init.assert_called_with(wd) self.mock_base_setattr.assert_has_calls( [call('username', 'test_user'), call('_reindex', False)])
def test_indexed_file_class_getter(self): index_cls_1 = BaseESFile._index_cls(False) self.assertEqual(index_cls_1, IndexedFile)
def test_populate_if_no_doc_exists(self, mock_index): mock_index.return_value.from_path.side_effect = DocumentNotFound base = BaseESFile('test_user', system='test.system', wrapped_doc=None) mock_index().assert_called_with(system='test.system', path='/')
def test_populate_if_doc_exists(self, mock_index): base = BaseESFile('test_user', system='test.system', wrapped_doc=None) mock_index().from_path.assert_called_with('test.system', '/')