Пример #1
0
    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)
Пример #2
0
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()
Пример #3
0
    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__)
Пример #4
0
    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()
Пример #5
0
    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()
Пример #6
0
    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)])
Пример #7
0
    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)])
Пример #8
0
 def test_indexed_file_class_getter(self):
     index_cls_1 = BaseESFile._index_cls(False)
     self.assertEqual(index_cls_1, IndexedFile)
Пример #9
0
 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='/')
Пример #10
0
 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', '/')