async def test_get_file_download_file(self, http_request):

        handler = mock_handler(http_request)
        handler.download_file = MockCoroutine()
        await handler.get_file()

        handler.download_file.assert_awaited_once()
    async def test_download_file_stream_redirect(self, http_request):

        handler = mock_handler(http_request)
        handler.provider.download = MockCoroutine(return_value='stream')
        await handler.download_file()

        handler.redirect.assert_called_once_with('stream')
Esempio n. 3
0
    def test_log_exception_http_error(self, mocked_warning, http_request,
                                      mock_exc_info_http):

        handler = mock_handler(http_request)
        handler.log_exception(*mock_exc_info_http)
        mocked_warning.assert_called_with(
            '%d %s: test http exception', 500,
            'GET /v1/resources/test/providers/test/path/mock (None)')
Esempio n. 4
0
    def test_log_exception_uncaught(self, mocked_error, http_request,
                                    mock_exc_info):

        handler = mock_handler(http_request)
        handler.log_exception(*mock_exc_info)
        mocked_error.assert_called_with(
            'Uncaught exception %s\n',
            'GET /v1/resources/test/providers/test/path/mock (None)',
            exc_info=mock_exc_info)
    async def test_get_file_metadata(self, http_request):

        handler = mock_handler(http_request)
        handler.file_metadata = MockCoroutine()
        handler.request.query_arguments['meta'] = ''

        await handler.get_file()

        handler.file_metadata.assert_awaited_once()
    async def test_file_metadata(self, http_request, mock_file_metadata):

        handler = mock_handler(http_request)
        handler.provider.metadata = MockCoroutine(return_value=mock_file_metadata)

        await handler.file_metadata()

        handler.write.assert_called_once_with({
            'data': mock_file_metadata.json_api_serialized(handler.resource)
        })
    async def test_get_folder_download_as_zip(self, http_request,):
        # Including 'zip' in the query params should trigger the download_as_zip method

        handler = mock_handler(http_request)
        handler.download_folder_as_zip = MockCoroutine()
        handler.request.query_arguments['zip'] = ''

        await handler.get_folder()

        handler.download_folder_as_zip.assert_awaited_once()
    async def test_get_file_revisions_raw(self, http_request, mock_revision_metadata):

        handler = mock_handler(http_request)
        handler.provider.revisions = MockCoroutine(return_value=mock_revision_metadata)

        await handler.get_file_revisions()

        handler.write.assert_called_once_with({
            'data': [r.json_api_serialized() for r in mock_revision_metadata]
        })
    async def test_get_file_versions(self, query_param, http_request):
        # Query parameters versions and revisions are equivalent, but versions is preferred for
        # clarity.

        handler = mock_handler(http_request)
        handler.get_file_revisions = MockCoroutine()
        handler.request.query_arguments[query_param] = ''

        await handler.get_file()

        handler.get_file_revisions.assert_awaited_once()
    async def test_header_file_metadata(self, http_request, mock_file_metadata):

        handler = mock_handler(http_request)
        handler.provider.metadata = MockCoroutine(return_value=mock_file_metadata)

        await handler.header_file_metadata()

        assert handler._headers['Content-Length'] == '1337'
        assert handler._headers['Last-Modified'] == 'Wed, 25 Sep 1991 18:20:30 GMT'
        assert handler._headers['Content-Type'] == 'application/octet-stream'
        expected = json.dumps(mock_file_metadata.json_api_serialized(handler.resource))
        assert handler._headers['X-Waterbutler-Metadata'] == expected
    async def test_download_file_range_request_header(self, http_request, mock_partial_stream):

        handler = mock_handler(http_request)
        handler.request.headers['Range'] = 'bytes=10-100'
        handler.provider.download = MockCoroutine(return_value=mock_partial_stream)
        handler.path = WaterButlerPath('/test_file')

        await handler.download_file()

        assert handler._headers['Content-Range'] == mock_partial_stream.content_range
        assert handler.get_status() == 206
        handler.write_stream.assert_called_once_with(mock_partial_stream)
    async def test_download_file_safari_mime_type(self, extension, mimetype, http_request, mock_stream):
        """ If the file extention is in mime_types override the content type to fix issues with
        safari shoving in new file extensions """

        handler = mock_handler(http_request)
        handler.path = WaterButlerPath('/test_path.{}'.format(extension))
        handler.provider.download = MockCoroutine(return_value=mock_stream)

        await handler.download_file()

        handler.write_stream.assert_called_once_with(mock_stream)
        assert handler._headers['Content-Type'] == mimetype
    async def test_get_folder(self, http_request, mock_folder_children):
        # The get_folder method expected behavior is to return folder children's metadata, not the
        # metadata of the actual folder. This should be true of all providers.

        handler = mock_handler(http_request)
        handler.provider.metadata = MockCoroutine(return_value=mock_folder_children)

        serialized_data = [x.json_api_serialized(handler.resource) for x in mock_folder_children]

        await handler.get_folder()

        handler.write.assert_called_once_with({'data': serialized_data})
    async def test_download_file_headers_no_stream_name(self, http_request, mock_stream):

        handler = mock_handler(http_request)
        handler.provider.download = MockCoroutine(return_value=mock_stream)
        handler.path = WaterButlerPath('/test_file')

        await handler.download_file()

        assert handler._headers['Content-Length'] == str(mock_stream.size)
        assert handler._headers['Content-Type'] == mock_stream.content_type
        disposition = 'attachment; filename="test_file"; filename*=UTF-8\'\'test_file'
        assert handler._headers['Content-Disposition'] == disposition

        handler.write_stream.assert_awaited_once()
    async def test_download_folder_as_zip_root(self, http_request, mock_stream):

        handler = mock_handler(http_request)

        handler.provider.zip = MockCoroutine(return_value=mock_stream)
        handler.path = WaterButlerPath('/')

        await handler.download_folder_as_zip()

        assert handler._headers['Content-Type'] == 'application/zip'
        expected = 'attachment; filename="MockProvider-archive.zip"; filename*=UTF-8\'\'MockProvider-archive.zip'
        assert handler._headers['Content-Disposition'] == expected

        handler.write_stream.assert_called_once_with(mock_stream)
    async def test_download_file_with_display_name(self, http_request, mock_stream, given_arg,
                                                   expected_name, filtered_name):

        handler = mock_handler(http_request)
        handler.provider.download = MockCoroutine(return_value=mock_stream)
        handler.path = WaterButlerPath('/test_file')
        handler.request.query_arguments['displayName'] = given_arg

        await handler.download_file()

        assert handler._headers['Content-Length'] == str(mock_stream.size)
        assert handler._headers['Content-Type'] == mock_stream.content_type
        disposition = 'attachment; filename="' + filtered_name + '"; filename*=UTF-8\'\'' + expected_name
        assert handler._headers['Content-Disposition'] == disposition

        handler.write_stream.assert_awaited_once()
Esempio n. 17
0
    def test_write_error_202(self, http_request, mock_exc_info_202):

        handler = mock_handler(http_request)
        handler.finish = mock.Mock()
        handler.write_error(500, mock_exc_info_202)
        handler.finish.assert_called_with()
Esempio n. 18
0
    def test_write_error(self, http_request, mock_exc_info):

        handler = mock_handler(http_request)
        handler.finish = mock.Mock()
        handler.write_error(500, mock_exc_info)
        handler.finish.assert_called_with({'message': 'OK', 'code': 500})