예제 #1
0
    async def test_revalidate_path_subfile(self, root_provider,
                                           root_provider_fixtures):
        root_id = 'root'
        parent_id = root_provider_fixtures['folder_id']
        subfile_id = root_provider_fixtures['subfile_id']

        parent_name = 'teeth'
        subfile_name = 'bicuspid.txt'

        parent_path = OneDrivePath('/{}/'.format(parent_name),
                                   _ids=[root_id, parent_id])
        expected_path = OneDrivePath('/{}/{}'.format(parent_name,
                                                     subfile_name),
                                     _ids=[root_id, parent_id, subfile_id])

        parent_url = root_provider._build_drive_url(
            *parent_path.api_identifier, expand='children')
        aiohttpretty.register_json_uri(
            'GET',
            parent_url,
            body=root_provider_fixtures['folder_metadata'],
            status=200)

        actual_path = await root_provider.revalidate_path(
            parent_path, subfile_name, False)
        assert actual_path == expected_path

        with pytest.raises(exceptions.NotFoundError) as exc:
            await root_provider.revalidate_path(parent_path, subfile_name,
                                                True)
예제 #2
0
    async def test_download_standard_file_range(self, provider,
                                                download_fixtures):
        file_id = download_fixtures['file_id']
        path = OneDrivePath('/toes.txt',
                            _ids=[download_fixtures['root_id'], file_id])

        metadata_response = download_fixtures['file_metadata']
        metadata_url = provider._build_drive_url('items', file_id)
        aiohttpretty.register_json_uri('GET',
                                       metadata_url,
                                       body=metadata_response)

        download_url = download_fixtures['file_download_url']
        aiohttpretty.register_uri('GET',
                                  download_url,
                                  status=206,
                                  body=download_fixtures['file_content'][0:2])

        response = await provider.download(path, range=(0, 1))
        assert response.partial
        content = await response.read()
        assert content == b'te'
        assert aiohttpretty.has_call(method='GET',
                                     uri=download_url,
                                     headers={
                                         'Range': 'bytes=0-1',
                                         'Authorization':
                                         'bearer wrote harry potter',
                                         'accept-encoding': ''
                                     })
예제 #3
0
    async def test_download_unexportable_file(self, provider,
                                              download_fixtures):
        onenote_id = download_fixtures['onenote_id']
        path = OneDrivePath('/onenote',
                            _ids=[download_fixtures['root_id'], onenote_id])

        metadata_response = download_fixtures['onenote_metadata']
        metadata_url = provider._build_drive_url('items', onenote_id)
        aiohttpretty.register_json_uri('GET',
                                       metadata_url,
                                       body=metadata_response)

        with pytest.raises(exceptions.UnexportableFileTypeError) as exc:
            await provider.download(path)
예제 #4
0
    async def test_download_by_bad_revision(self, provider, download_fixtures):
        file_id = download_fixtures['file_id']
        path = OneDrivePath('/toes.txt',
                            _ids=[download_fixtures['root_id'], file_id])

        revision_response = download_fixtures['file_revisions']
        revisions_url = provider._build_drive_url(*path.api_identifier,
                                                  'versions')
        aiohttpretty.register_json_uri('GET',
                                       revisions_url,
                                       body=revision_response)

        with pytest.raises(exceptions.NotFoundError) as exc:
            await provider.download(path, revision='thisisafakerevision')
예제 #5
0
    async def test_get_revisions(self, provider, revision_fixtures):
        file_id = revision_fixtures['file_id']
        path = OneDrivePath('/bicuspids.txt',
                            _ids=[revision_fixtures['root_id'], file_id])

        revision_response = revision_fixtures['file_revisions']
        revisions_url = provider._build_drive_url(*path.api_identifier,
                                                  'versions')
        aiohttpretty.register_json_uri('GET',
                                       revisions_url,
                                       body=revision_response)

        result = await provider.revisions(path)

        assert len(result) == 5
예제 #6
0
    async def test_download_unexportable_by_revision(self, provider,
                                                     download_fixtures):
        onenote_id = download_fixtures['onenote_id']
        path = OneDrivePath('/onenote',
                            _ids=[download_fixtures['root_id'], onenote_id])

        revision_response = download_fixtures['onenote_revisions']
        revisions_url = provider._build_drive_url('items', onenote_id,
                                                  'versions')
        aiohttpretty.register_json_uri('GET',
                                       revisions_url,
                                       body=revision_response)

        with pytest.raises(exceptions.UnexportableFileTypeError) as exc:
            await provider.download(
                path,
                revision=download_fixtures['onenote_revision_non_exportable'])
예제 #7
0
    async def test_download_standard_file(self, provider, download_fixtures):
        file_id = download_fixtures['file_id']
        path = OneDrivePath('/toes.txt',
                            _ids=[download_fixtures['root_id'], file_id])

        metadata_response = download_fixtures['file_metadata']
        metadata_url = provider._build_drive_url('items', file_id)
        aiohttpretty.register_json_uri('GET',
                                       metadata_url,
                                       body=metadata_response)

        aiohttpretty.register_uri('GET',
                                  download_fixtures['file_download_url'],
                                  body=download_fixtures['file_content'],
                                  headers={'Content-Length': '11'})

        response = await provider.download(path)
        content = await response.read()
        assert content == b'ten of them'
예제 #8
0
    async def test_metadata_file(self, subfolder_provider,
                                 subfolder_provider_fixtures):
        file_id = subfolder_provider_fixtures['file_id']
        file_metadata = subfolder_provider_fixtures['file_metadata']
        file_name = file_metadata['name']
        path = OneDrivePath('/{}'.format(file_name),
                            _ids=(
                                subfolder_provider_fixtures['root_id'],
                                file_id,
                            ))

        list_url = subfolder_provider._build_drive_url(*path.api_identifier,
                                                       expand='children')
        aiohttpretty.register_json_uri('GET', list_url, body=file_metadata)

        result = await subfolder_provider.metadata(path)
        assert result.kind == 'file'
        assert result.name == 'bicuspid.txt'
        assert result.materialized_path == '/bicuspid.txt'
예제 #9
0
    async def test_metadata_folder(self, subfolder_provider,
                                   subfolder_provider_fixtures):
        folder_id = subfolder_provider_fixtures['folder_id']
        folder_metadata = subfolder_provider_fixtures['folder_metadata']
        folder_name = folder_metadata['name']
        path = OneDrivePath('/{}/'.format(folder_name),
                            _ids=(
                                subfolder_provider_fixtures['root_id'],
                                folder_id,
                            ))

        list_url = subfolder_provider._build_drive_url(*path.api_identifier,
                                                       expand='children')
        aiohttpretty.register_json_uri('GET', list_url, body=folder_metadata)

        result = await subfolder_provider.metadata(path)
        assert len(result) == 1

        file_metadata = result[0]
        assert file_metadata.kind == 'file'
        assert file_metadata.name == 'molars.txt'
        assert file_metadata.materialized_path == '/crushers/molars.txt'
예제 #10
0
    async def test_download_by_revision(self, provider, download_fixtures,
                                        revision_fixtures):
        file_id = download_fixtures['file_id']
        path = OneDrivePath('/toes.txt',
                            _ids=[download_fixtures['root_id'], file_id])

        revision_response = revision_fixtures['file_revisions']
        revisions_url = provider._build_drive_url(*path.api_identifier,
                                                  'versions')
        aiohttpretty.register_json_uri('GET',
                                       revisions_url,
                                       body=revision_response)

        aiohttpretty.register_uri(
            'GET',
            revision_fixtures['file_revision_download_url'],
            body=download_fixtures['file_content'],
            headers={'Content-Length': '11'})

        response = await provider.download(
            path, revision=revision_fixtures['revision_id'])
        content = await response.read()
        assert content == b'ten of them'
예제 #11
0
    async def test_metadata_root(self, subfolder_provider,
                                 subfolder_provider_fixtures):

        path = OneDrivePath('/',
                            _ids=(subfolder_provider_fixtures['root_id'], ))

        list_url = subfolder_provider._build_drive_url(*path.api_identifier,
                                                       expand='children')
        aiohttpretty.register_json_uri(
            'GET', list_url, body=subfolder_provider_fixtures['root_metadata'])

        result = await subfolder_provider.metadata(path)
        assert len(result) == 2

        folder_metadata = result[0]
        assert folder_metadata.kind == 'folder'
        assert folder_metadata.name == 'crushers'
        assert folder_metadata.materialized_path == '/crushers/'

        file_metadata = result[1]
        assert file_metadata.kind == 'file'
        assert file_metadata.name == 'bicuspid.txt'
        assert file_metadata.materialized_path == '/bicuspid.txt'
예제 #12
0
 async def test_download_no_such_file(self, provider):
     od_path = OneDrivePath('/does-not-exists', _ids=[None, None])
     with pytest.raises(exceptions.DownloadError) as exc:
         await provider.download(od_path)