async def test_upload(self, provider, provider_fixtures, error_fixtures, file_stream):
        path = await provider.validate_path('/phile')
        metadata_url = provider.build_url('files', 'get_metadata')
        data = {'path': path.full_path}
        aiohttpretty.register_json_uri(
            'POST',
            metadata_url,
            data=data,
            status=HTTPStatus.CONFLICT,
            body=error_fixtures['not_found_metadata_data']
        )

        url = provider._build_content_url('files', 'upload')
        aiohttpretty.register_json_uri(
            'POST',
            url,
            status=HTTPStatus.OK,
            body=provider_fixtures['file_metadata']
        )

        metadata, created = await provider.upload(file_stream, path)
        expected = DropboxFileMetadata(provider_fixtures['file_metadata'], provider.folder)

        assert created is True
        assert metadata == expected
        assert aiohttpretty.has_call(method='POST', uri=url)
Exemplo n.º 2
0
    async def test_chunked_upload_upload_part(self, provider, file_stream,
                                              provider_fixtures):

        assert file_stream.size == 38
        provider.CHUNK_SIZE = 4

        session_id = provider_fixtures['session_metadata']['session_id']
        upload_args = {
            'close': False,
            'cursor': {
                'session_id': session_id,
                'offset': 20,
            }
        }

        upload_part_url = provider._build_content_url('files',
                                                      'upload_session',
                                                      'append_v2')
        aiohttpretty.register_json_uri('POST', upload_part_url, status=200)

        await provider._upload_part(file_stream, provider.CHUNK_SIZE,
                                    upload_args)

        assert aiohttpretty.has_call(method='POST', uri=upload_part_url)

        provider.CHUNK_SIZE = CHUNK_SIZE
    async def test_download(self, provider):
        path = WaterButlerPath('/triangles.txt', prepend=provider.folder)
        url = provider._build_content_url('files', 'download')
        aiohttpretty.register_uri('POST', url, body=b'better', auto_length=True)

        result = await provider.download(path)
        content = await result.response.read()

        assert content == b'better'
Exemplo n.º 4
0
    async def test_download_not_found(self, provider, error_fixtures):
        path = await provider.validate_path('/vectors.txt')
        url = provider._build_content_url('files', 'download')
        aiohttpretty.register_json_uri(
            'POST',
            url,
            status=HTTPStatus.CONFLICT,
            body=error_fixtures['not_found_metadata_data'])

        with pytest.raises(core_exceptions.NotFoundError) as e:
            await provider.download(path)

        assert e.value.code == HTTPStatus.NOT_FOUND
    async def test_chunked_upload_create_upload_session(self, provider, provider_fixtures):

        url = provider._build_content_url('files', 'upload_session', 'start')

        aiohttpretty.register_json_uri(
            'POST',
            url,
            status=200,
            body=provider_fixtures.get('session_metadata', '')
        )

        session_id = await provider._create_upload_session()

        assert session_id == provider_fixtures['session_metadata']['session_id']
        assert aiohttpretty.has_call(method='POST', uri=url)
    async def test_download_range(self, provider):
        path = WaterButlerPath('/triangles.txt', prepend=provider.folder)
        url = provider._build_content_url('files', 'download')
        aiohttpretty.register_uri('POST', url, body=b'be', auto_length=True, status=206)

        result = await provider.download(path, range=(0, 1))
        assert result.partial
        content = await result.response.read()

        assert content == b'be'
        assert aiohttpretty.has_call(
            method='POST', uri=url,
            headers={
                'Authorization': 'Bearer wrote harry potter',
                'Range': 'bytes=0-1',
                'Dropbox-API-Arg': '{"path": "/Photos/triangles.txt"}',
                'Content-Type': ''
            }
        )
    async def test_complete_session(self, provider, file_stream, provider_fixtures):

        assert file_stream.size == 38
        provider.CHUNK_SIZE = 4

        path = WaterButlerPath('/foobah')
        session_id = provider_fixtures['session_metadata']['session_id']

        complete_part_url = provider._build_content_url('files', 'upload_session', 'finish')
        aiohttpretty.register_json_uri(
            'POST',
            complete_part_url,
            status=200,
            body=provider_fixtures.get('file_metadata', None)
        )
        metadata = await provider._complete_session(file_stream, session_id, path)

        assert metadata == provider_fixtures['file_metadata']
        assert aiohttpretty.has_call(method='POST', uri=complete_part_url)

        provider.CHUNK_SIZE = CHUNK_SIZE