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)
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': '' })
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)
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')
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
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'])
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'
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'
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'
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'
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'
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)