예제 #1
0
    def test_upload_too_small(self, mock_get, mock_delete, mock_upload,
                             mock_connection):
        mock_get.return_value = create_mock_draft_file()  # File already exists
        mock_upload.return_value = {}
        mock_connection.return_value = create_mock_connection()

        # Define payload
        filename = 'myfile.rst'
        content = 'baz'

        # Attempt to upload the file
        url = api_url_for('dataverse_upload_file',
                          pid=self.project._primary_key, name=filename)
        res = self.app.put(
            url,
            params=content,
            auth=self.user.auth,
            headers={'Content-Type': 'application/octet-stream'},
            expect_errors=True,
        )

        # Old file was not deleted
        assert_false(mock_delete.call_count)

        # Bad request
        assert_equal(res.status_code, http.UNSUPPORTED_MEDIA_TYPE)
        assert_false(mock_upload.call_count)
예제 #2
0
    def test_upload_existing(self, mock_get_by_id, mock_get, mock_delete,
                             mock_upload, mock_connection):
        mock_get.return_value = create_mock_draft_file()  # File already exists
        mock_get_by_id.return_value = None  # To confirm deletion happened
        mock_upload.return_value = {}
        mock_connection.return_value = create_mock_connection()

        # Define payload
        filename = 'myfile.rst'
        content = 'bazbaz'

        # Attempt to upload the file
        url = api_url_for('dataverse_upload_file',
                          pid=self.project._primary_key, name=filename)
        res = self.app.put(
            url,
            params=content,
            auth=self.user.auth,
            headers={'Content-Type': 'application/octet-stream'},
        )

        # Old file was deleted
        mock_delete.assert_called_once()

        # File was uploaded
        assert_equal(res.status_code, http.OK)
        mock_upload.assert_called_once()

        # Parameters are correct
        assert_equal(self.node_settings.study_hdl,
                     mock_upload.call_args[0][0].doi)
        assert_equal(filename, mock_upload.call_args[0][1])
        assert_equal(content, mock_upload.call_args[0][2])
예제 #3
0
    def test_upload_too_small(self, mock_get, mock_delete, mock_upload,
                              mock_connection):
        mock_get.return_value = create_mock_draft_file()  # File already exists
        mock_upload.return_value = {}
        mock_connection.return_value = create_mock_connection()

        # Define payload
        filename = 'myfile.rst'
        content = 'baz'
        path = '54321'
        payload = {'file': Upload(filename, content, 'text/x-rst')}

        # Attempt to upload the file
        url = api_url_for('dataverse_upload_file',
                          pid=self.project._primary_key,
                          path=path)
        res = self.app.post(url,
                            payload,
                            auth=self.user.auth,
                            expect_errors=True)

        # Old file was not deleted
        assert_false(mock_delete.call_count)

        # Bad request
        assert_equal(res.status_code, http.UNSUPPORTED_MEDIA_TYPE)
        assert_false(mock_upload.call_count)
예제 #4
0
    def test_upload_existing(self, mock_get_by_id, mock_get, mock_delete,
                             mock_upload, mock_connection):
        mock_get.return_value = create_mock_draft_file()  # File already exists
        mock_get_by_id.return_value = None  # To confirm deletion happened
        mock_upload.return_value = {}
        mock_connection.return_value = create_mock_connection()

        # Define payload
        filename = 'myfile.rst'
        content = 'bazbaz'
        path = '54321'
        payload = {'file': Upload(filename, content,'text/x-rst')}

        # Attempt to upload the file
        url = api_url_for('dataverse_upload_file',
                          pid=self.project._primary_key, path=path)
        res = self.app.post(url, payload, auth=self.user.auth)

        # Old file was deleted
        mock_delete.assert_called_once

        # File was uploaded
        assert_equal(res.status_code, http.CREATED)
        mock_upload.assert_called_once

        # Parameters are correct
        assert_equal(self.node_settings.study_hdl,
                     mock_upload.call_args[0][0].doi)
        assert_equal(filename, mock_upload.call_args[0][1])
        assert_equal(content, mock_upload.call_args[0][2])
        assert_equal('file_updated', json.loads(res.body)['actionTaken'])
예제 #5
0
    def test_fail_if_unauthorized_forbidden(self, mock_get_files, mock_connection):
        mock_connection.return_value = create_mock_connection()
        mock_get_files.return_value = [create_mock_draft_file('foo')]

        with assert_raises(HTTPError) as error:
            fail_if_unauthorized(self.node_settings, self.user.auth, 'bar')
            assert_equal(error.code, http.FORBIDDEN)
예제 #6
0
    def test_upload_too_small(self, mock_get, mock_delete, mock_upload,
                              mock_connection):
        mock_get.return_value = create_mock_draft_file()  # File already exists
        mock_upload.return_value = {}
        mock_connection.return_value = create_mock_connection()

        # Define payload
        filename = 'myfile.rst'
        content = 'baz'

        # Attempt to upload the file
        url = api_url_for('dataverse_upload_file',
                          pid=self.project._primary_key,
                          name=filename)
        res = self.app.put(
            url,
            params=content,
            auth=self.user.auth,
            headers={'Content-Type': 'application/octet-stream'},
            expect_errors=True,
        )

        # Old file was not deleted
        assert_false(mock_delete.call_count)

        # Bad request
        assert_equal(res.status_code, http.UNSUPPORTED_MEDIA_TYPE)
        assert_false(mock_upload.call_count)
예제 #7
0
    def test_upload_existing(self, mock_get_by_id, mock_get, mock_delete,
                             mock_upload, mock_connection):
        mock_get.return_value = create_mock_draft_file()  # File already exists
        mock_get_by_id.return_value = None  # To confirm deletion happened
        mock_upload.return_value = {}
        mock_connection.return_value = create_mock_connection()

        # Define payload
        filename = 'myfile.rst'
        content = 'bazbaz'

        # Attempt to upload the file
        url = api_url_for('dataverse_upload_file',
                          pid=self.project._primary_key,
                          name=filename)
        res = self.app.put(
            url,
            params=content,
            auth=self.user.auth,
            headers={'Content-Type': 'application/octet-stream'},
        )

        # Old file was deleted
        mock_delete.assert_called_once()

        # File was uploaded
        assert_equal(res.status_code, http.OK)
        mock_upload.assert_called_once()

        # Parameters are correct
        assert_equal(self.node_settings.study_hdl,
                     mock_upload.call_args[0][0].doi)
        assert_equal(filename, mock_upload.call_args[0][1])
        assert_equal(content, mock_upload.call_args[0][2])
예제 #8
0
    def test_fail_if_unauthorized_forbidden(self, mock_get_files, mock_connection):
        mock_connection.return_value = create_mock_connection()
        mock_get_files.return_value = [create_mock_draft_file('foo')]

        with assert_raises(HTTPError) as error:
            fail_if_unauthorized(self.node_settings, self.user.auth, 'bar')
            assert_equal(error.code, http.FORBIDDEN)
예제 #9
0
    def test_upload_existing(self, mock_get_by_id, mock_get, mock_delete,
                             mock_upload, mock_connection):
        mock_get.return_value = create_mock_draft_file()  # File already exists
        mock_get_by_id.return_value = None  # To confirm deletion happened
        mock_upload.return_value = {}
        mock_connection.return_value = create_mock_connection()

        # Define payload
        filename = 'myfile.rst'
        content = 'bazbaz'
        path = '54321'
        payload = {'file': Upload(filename, content, 'text/x-rst')}

        # Attempt to upload the file
        url = api_url_for('dataverse_upload_file',
                          pid=self.project._primary_key,
                          path=path)
        res = self.app.post(url, payload, auth=self.user.auth)

        # Old file was deleted
        mock_delete.assert_called_once

        # File was uploaded
        assert_equal(res.status_code, http.CREATED)
        mock_upload.assert_called_once

        # Parameters are correct
        assert_equal(self.node_settings.study_hdl,
                     mock_upload.call_args[0][0].doi)
        assert_equal(filename, mock_upload.call_args[0][1])
        assert_equal(content, mock_upload.call_args[0][2])
        assert_equal('file_updated', json.loads(res.body)['actionTaken'])
예제 #10
0
    def test_dataverse_view_file(self, mock_fail_if_private, mock_get_files, mock_connection, mock_get_content, mock_scrape):
        mock_connection.return_value = create_mock_connection()
        mock_get_files.return_value = [create_mock_draft_file('foo')]
        mock_get_content.return_value = 'contents'
        mock_scrape.return_value = ('filename', 'whatever')

        url = self.project.web_url_for('dataverse_view_file', path='foo')
        res = self.app.get(url, auth=self.user.auth).follow(auth=self.user.auth)

        assert_true(mock_connection.called)
        assert_true(mock_get_files.called)
        assert_equal(res.status_code, 200)
예제 #11
0
    def test_download_file(self, mock_fail_if_private, mock_get_files, mock_connection):
        mock_connection.return_value = create_mock_connection()
        mock_get_files.return_value = [create_mock_draft_file('foo')]

        path = 'foo'
        url = web_url_for('dataverse_download_file',
                          pid=self.project._primary_key, path=path)
        res = self.app.get(url, auth=self.user.auth)
        assert_equal(
            res.headers.get('location'),
            'http://{0}/dvn/FileDownload/?fileId={1}'.format(HOST, path),
        )
예제 #12
0
    def test_download_file(self, mock_fail_if_private, mock_get_files, mock_connection):
        mock_connection.return_value = create_mock_connection()
        mock_get_files.return_value = [create_mock_draft_file('foo')]

        path = 'foo'
        url = web_url_for('dataverse_download_file',
                          pid=self.project._primary_key, path=path)
        res = self.app.get(url, auth=self.user.auth)
        assert_equal(
            res.headers.get('location'),
            'http://{0}/dvn/FileDownload/?fileId={1}'.format(HOST, path),
        )
예제 #13
0
    def test_dataverse_view_file(self, mock_fail_if_private, mock_get_files, mock_connection, mock_get_content, mock_scrape):
        mock_connection.return_value = create_mock_connection()
        mock_get_files.return_value = [create_mock_draft_file('foo')]
        mock_get_content.return_value = 'contents'
        mock_scrape.return_value = ('filename', 'whatever')

        url = self.project.web_url_for('dataverse_view_file', path='foo')
        res = self.app.get(url, auth=self.user.auth).follow(auth=self.user.auth)

        assert_true(mock_connection.called)
        assert_true(mock_get_files.called)
        assert_equal(res.status_code, 200)
예제 #14
0
    def test_dataverse_view_file_with_anonymous_link(self, mock_fail_if_private, mock_get_files, mock_connection, mock_scrape):
        link = PrivateLinkFactory(anonymous=True)
        link.nodes.append(self.project)
        link.save()
        mock_connection.return_value = create_mock_connection()
        mock_get_files.return_value = [create_mock_draft_file('foo')]
        mock_scrape.return_value = ('filename', 'content')

        url = self.project.api_url_for('dataverse_get_file_info', path='foo')
        res = self.app.get(url, {'view_only': link.key}).maybe_follow()
        assert_equal(res.status_code, 200)
        assert_not_in(self.node_settings.dataverse_alias, res.body)
        assert_not_in(self.node_settings.dataverse, res.body)
        assert_not_in(self.node_settings.study, res.body)
예제 #15
0
    def test_dataverse_view_file_with_anonymous_link(self, mock_fail_if_private, mock_get_files, mock_connection, mock_scrape):
        link = PrivateLinkFactory(anonymous=True)
        link.nodes.append(self.project)
        link.save()
        mock_connection.return_value = create_mock_connection()
        mock_get_files.return_value = [create_mock_draft_file('foo')]
        mock_scrape.return_value = ('filename', 'content')

        url = self.project.api_url_for('dataverse_get_file_info', path='foo')
        res = self.app.get(url, {'view_only': link.key}).maybe_follow()
        assert_equal(res.status_code, 200)
        assert_not_in(self.node_settings.dataverse_alias, res.body)
        assert_not_in(self.node_settings.dataverse, res.body)
        assert_not_in(self.node_settings.study, res.body)
예제 #16
0
    def test_dataverse_get_file_info_returns_filename_and_links(self, mock_fail_if_private, mock_get_files, mock_connection, mock_scrape):
        mock_connection.return_value = create_mock_connection()
        mock_get_files.return_value = [create_mock_draft_file('foo')]
        mock_scrape.return_value = ('filename', 'content')
        delete_url = self.project.api_url_for('dataverse_delete_file', path='foo')
        files_url = self.project.web_url_for('collect_file_trees')

        url = self.project.api_url_for('dataverse_get_file_info', path='foo')
        res = self.app.get(url, auth=self.user.auth).maybe_follow(auth=self.user.auth)

        assert_equal(res.status_code, 200)
        assert_true(mock_connection.called)
        assert_true(mock_get_files.called)
        assert_in(self.project._id, res.json['data']['node']['id'])
        assert_in(self.project.title, res.json['data']['node']['title'])
        assert_in(mock_scrape()[0], res.json['data']['filename'])
        assert_in(delete_url, res.json['data']['urls']['delete'])
        assert_in(files_url, res.json['data']['urls']['files'])
예제 #17
0
    def test_dataverse_get_file_info_returns_filename_and_links(self, mock_fail_if_private, mock_get_files, mock_connection, mock_scrape):
        mock_connection.return_value = create_mock_connection()
        mock_get_files.return_value = [create_mock_draft_file('foo')]
        mock_scrape.return_value = ('filename', 'content')
        delete_url = self.project.api_url_for('dataverse_delete_file', path='foo')
        files_url = self.project.web_url_for('collect_file_trees')

        url = self.project.api_url_for('dataverse_get_file_info', path='foo')
        res = self.app.get(url, auth=self.user.auth).maybe_follow(auth=self.user.auth)

        assert_equal(res.status_code, 200)
        assert_true(mock_connection.called)
        assert_true(mock_get_files.called)
        assert_in(self.project._id, res.json['data']['node']['id'])
        assert_in(self.project.title, res.json['data']['node']['title'])
        assert_in(mock_scrape()[0], res.json['data']['filename'])
        assert_in(delete_url, res.json['data']['urls']['delete'])
        assert_in(files_url, res.json['data']['urls']['files'])
예제 #18
0
    def test_upload_too_small(self, mock_get, mock_delete, mock_upload,
                             mock_connection):
        mock_get.return_value = create_mock_draft_file() # File already exists
        mock_upload.return_value = {}
        mock_connection.return_value = create_mock_connection()

        # Define payload
        filename = 'myfile.rst'
        content = 'baz'
        path = '54321'
        payload = {'file': Upload(filename, content,'text/x-rst')}

        # Attempt to upload the file
        url = api_url_for('dataverse_upload_file',
                          pid=self.project._primary_key, path=path)
        res = self.app.post(url, payload, auth=self.user.auth,
                            expect_errors=True)

        # Old file was not deleted
        assert_false(mock_delete.call_count)

        # Bad request
        assert_equal(res.status_code, http.UNSUPPORTED_MEDIA_TYPE)
        assert_false(mock_upload.call_count)
예제 #19
0
 def test_mock_dvn_file(self):
     fid = '65432'
     mock_file = create_mock_draft_file(fid)
     assert_equal(mock_file.name, 'file.txt')
     assert_equal(mock_file.id, fid)
     assert_is_instance(mock_file, DataverseFile)
예제 #20
0
class TestDataverseViewsCrud(DataverseAddonTestCase):
    @mock.patch(
        'website.addons.dataverse.views.crud.connect_from_settings_or_403')
    @mock.patch('website.addons.dataverse.views.crud.delete_file')
    @mock.patch('website.addons.dataverse.views.crud.get_file_by_id',
                side_effect=[create_mock_draft_file('54321'), None])
    def test_delete_file(self, mock_get, mock_delete, mock_connection):
        mock_get.return_value = None
        mock_connection.return_value = create_mock_connection()

        path = '54321'
        url = api_url_for('dataverse_delete_file',
                          pid=self.project._primary_key,
                          path=path)

        res = self.app.delete(url=url, auth=self.user.auth)

        mock_delete.assert_called_once
        assert_equal(path, mock_delete.call_args[0][0].id)

    @mock.patch(
        'website.addons.dataverse.views.crud.connect_from_settings_or_403')
    @mock.patch('website.addons.dataverse.views.crud.upload_file')
    @mock.patch('website.addons.dataverse.views.crud.get_file',
                side_effect=[None, create_mock_draft_file()])
    def test_upload_file(self, mock_get, mock_upload, mock_connection):
        mock_upload.return_value = {}
        mock_connection.return_value = create_mock_connection()

        # Define payload
        filename = 'myfile.rst'
        content = 'bazbaz'
        path = '54321'
        payload = {'file': Upload(filename, content, 'text/x-rst')}

        # Upload the file
        url = api_url_for('dataverse_upload_file',
                          pid=self.project._primary_key,
                          path=path)
        res = self.app.post(url, payload, auth=self.user.auth)

        # File was uploaded
        assert_equal(res.status_code, http.CREATED)
        mock_upload.assert_called_once

        # Parameters are correct
        assert_equal(self.node_settings.study_hdl,
                     mock_upload.call_args[0][0].doi)
        assert_equal(filename, mock_upload.call_args[0][1])
        assert_equal(content, mock_upload.call_args[0][2])
        assert_equal('file_uploaded', json.loads(res.body)['actionTaken'])

    @mock.patch(
        'website.addons.dataverse.views.crud.connect_from_settings_or_403')
    @mock.patch('website.addons.dataverse.views.crud.upload_file')
    @mock.patch('website.addons.dataverse.views.crud.delete_file')
    @mock.patch('website.addons.dataverse.views.crud.get_file')
    @mock.patch('website.addons.dataverse.views.crud.get_file_by_id')
    def test_upload_existing(self, mock_get_by_id, mock_get, mock_delete,
                             mock_upload, mock_connection):
        mock_get.return_value = create_mock_draft_file()  # File already exists
        mock_get_by_id.return_value = None  # To confirm deletion happened
        mock_upload.return_value = {}
        mock_connection.return_value = create_mock_connection()

        # Define payload
        filename = 'myfile.rst'
        content = 'bazbaz'
        path = '54321'
        payload = {'file': Upload(filename, content, 'text/x-rst')}

        # Attempt to upload the file
        url = api_url_for('dataverse_upload_file',
                          pid=self.project._primary_key,
                          path=path)
        res = self.app.post(url, payload, auth=self.user.auth)

        # Old file was deleted
        mock_delete.assert_called_once

        # File was uploaded
        assert_equal(res.status_code, http.CREATED)
        mock_upload.assert_called_once

        # Parameters are correct
        assert_equal(self.node_settings.study_hdl,
                     mock_upload.call_args[0][0].doi)
        assert_equal(filename, mock_upload.call_args[0][1])
        assert_equal(content, mock_upload.call_args[0][2])
        assert_equal('file_updated', json.loads(res.body)['actionTaken'])

    @mock.patch(
        'website.addons.dataverse.views.crud.connect_from_settings_or_403')
    @mock.patch('website.addons.dataverse.views.crud.upload_file')
    @mock.patch('website.addons.dataverse.views.crud.delete_file')
    @mock.patch('website.addons.dataverse.views.crud.get_file')
    def test_upload_too_small(self, mock_get, mock_delete, mock_upload,
                              mock_connection):
        mock_get.return_value = create_mock_draft_file()  # File already exists
        mock_upload.return_value = {}
        mock_connection.return_value = create_mock_connection()

        # Define payload
        filename = 'myfile.rst'
        content = 'baz'
        path = '54321'
        payload = {'file': Upload(filename, content, 'text/x-rst')}

        # Attempt to upload the file
        url = api_url_for('dataverse_upload_file',
                          pid=self.project._primary_key,
                          path=path)
        res = self.app.post(url,
                            payload,
                            auth=self.user.auth,
                            expect_errors=True)

        # Old file was not deleted
        assert_false(mock_delete.call_count)

        # Bad request
        assert_equal(res.status_code, http.UNSUPPORTED_MEDIA_TYPE)
        assert_false(mock_upload.call_count)

    @mock.patch('website.addons.dataverse.views.crud.scrape_dataverse')
    @mock.patch('website.addons.dataverse.views.crud.get_cache_content')
    @mock.patch(
        'website.addons.dataverse.views.crud.connect_from_settings_or_403')
    @mock.patch('website.addons.dataverse.views.crud.get_files')
    @mock.patch('website.addons.dataverse.views.crud.fail_if_private')
    def test_dataverse_view_file(self, mock_fail_if_private, mock_get_files,
                                 mock_connection, mock_get_content,
                                 mock_scrape):
        mock_connection.return_value = create_mock_connection()
        mock_get_files.return_value = [create_mock_draft_file('foo')]
        mock_get_content.return_value = 'contents'
        mock_scrape.return_value = ('filename', 'whatever')

        url = self.project.web_url_for('dataverse_view_file', path='foo')
        res = self.app.get(url,
                           auth=self.user.auth).follow(auth=self.user.auth)

        assert_true(mock_connection.called)
        assert_true(mock_get_files.called)
        assert_equal(res.status_code, 200)

    @mock.patch('website.addons.dataverse.views.crud.scrape_dataverse')
    @mock.patch(
        'website.addons.dataverse.views.crud.connect_from_settings_or_403')
    @mock.patch('website.addons.dataverse.views.crud.get_files')
    @mock.patch('website.addons.dataverse.views.crud.fail_if_private')
    def test_dataverse_view_file_with_anonymous_link(self,
                                                     mock_fail_if_private,
                                                     mock_get_files,
                                                     mock_connection,
                                                     mock_scrape):
        link = PrivateLinkFactory(anonymous=True)
        link.nodes.append(self.project)
        link.save()
        mock_connection.return_value = create_mock_connection()
        mock_get_files.return_value = [create_mock_draft_file('foo')]
        mock_scrape.return_value = ('filename', 'content')

        url = self.project.api_url_for('dataverse_get_file_info', path='foo')
        res = self.app.get(url, {'view_only': link.key}).maybe_follow()
        assert_equal(res.status_code, 200)
        assert_not_in(self.node_settings.dataverse_alias, res.body)
        assert_not_in(self.node_settings.dataverse, res.body)
        assert_not_in(self.node_settings.study, res.body)

    @mock.patch('website.addons.dataverse.views.crud.scrape_dataverse')
    @mock.patch(
        'website.addons.dataverse.views.crud.connect_from_settings_or_403')
    @mock.patch('website.addons.dataverse.views.crud.get_files')
    def test_dataverse_get_file_info_returns_filename_and_links(
            self, mock_get_files, mock_connection, mock_scrape):
        mock_connection.return_value = create_mock_connection()
        mock_get_files.return_value = [create_mock_draft_file('foo')]
        mock_scrape.return_value = ('filename', 'content')
        delete_url = self.project.api_url_for('dataverse_delete_file',
                                              path='foo')
        files_url = self.project.web_url_for('collect_file_trees')

        url = self.project.api_url_for('dataverse_get_file_info', path='foo')
        res = self.app.get(
            url, auth=self.user.auth).maybe_follow(auth=self.user.auth)

        assert_equal(res.status_code, 200)
        assert_true(mock_connection.called)
        assert_true(mock_get_files.called)
        assert_in(self.project._id, res.json['data']['node']['id'])
        assert_in(self.project.title, res.json['data']['node']['title'])
        assert_in(mock_scrape()[0], res.json['data']['filename'])
        assert_in(delete_url, res.json['data']['urls']['delete'])
        assert_in(files_url, res.json['data']['urls']['files'])

    @mock.patch(
        'website.addons.dataverse.views.crud.connect_from_settings_or_403')
    @mock.patch('website.addons.dataverse.views.crud.get_files')
    @mock.patch('website.addons.dataverse.views.crud.fail_if_private')
    def test_download_file(self, mock_fail_if_private, mock_get_files,
                           mock_connection):
        mock_connection.return_value = create_mock_connection()
        mock_get_files.return_value = [create_mock_draft_file('foo')]

        path = 'foo'
        url = web_url_for('dataverse_download_file',
                          pid=self.project._primary_key,
                          path=path)
        res = self.app.get(url, auth=self.user.auth)
        assert_equal(
            res.headers.get('location'),
            'http://{0}/dvn/FileDownload/?fileId={1}'.format(HOST, path),
        )

    @mock.patch(
        'website.addons.dataverse.views.crud.connect_from_settings_or_403')
    @mock.patch('website.addons.dataverse.views.crud.release_study')
    def test_dataverse_release_study(self, mock_release, mock_connection):
        mock_connection.return_value = create_mock_connection()

        url = api_url_for('dataverse_release_study',
                          pid=self.project._primary_key)
        res = self.app.put(url, auth=self.user.auth)
        assert_true(mock_release.called)

    @mock.patch('website.addons.dataverse.views.crud.get_cache_content')
    def test_render_file(self, mock_get_cache):
        mock_get_cache.return_value = 'Mockument (A mock document)'

        file_id = '23456'

        url = api_url_for('dataverse_get_rendered_file',
                          pid=self.project._primary_key,
                          path=file_id)
        res = self.app.get(url, auth=self.user.auth)
        assert_equal(mock_get_cache.call_args[0][1],
                     '{0}.html'.format(file_id))

    def test_fail_if_unauthorized_not_found(self):

        with assert_raises(HTTPError) as error:
            fail_if_unauthorized(self.node_settings, self.user.auth, None)
            assert_equal(error.code, http.NOT_FOUND)

    @mock.patch(
        'website.addons.dataverse.views.crud.connect_from_settings_or_403')
    @mock.patch('website.addons.dataverse.views.crud.get_files')
    def test_fail_if_unauthorized_forbidden(self, mock_get_files,
                                            mock_connection):
        mock_connection.return_value = create_mock_connection()
        mock_get_files.return_value = [create_mock_draft_file('foo')]

        with assert_raises(HTTPError) as error:
            fail_if_unauthorized(self.node_settings, self.user.auth, 'bar')
            assert_equal(error.code, http.FORBIDDEN)

    @mock.patch(
        'website.addons.dataverse.views.crud.connect_from_settings_or_403')
    @mock.patch('website.addons.dataverse.views.crud.get_files',
                side_effect=[[create_mock_draft_file('released')],
                             [create_mock_draft_file('draft')]])
    def test_fail_if_unauthorized_unauthorized(self, mock_get_files,
                                               mock_connection):
        with assert_raises(HTTPError) as error:
            user2 = AuthUserFactory()
            fail_if_unauthorized(self.node_settings, Auth(user2), 'draft')
            assert_equal(error.code, http.UNAUTHORIZED)
예제 #21
0
 def test_mock_dvn_file(self):
     fid = '65432'
     mock_file = create_mock_draft_file(fid)
     assert_equal(mock_file.name, 'file.txt')
     assert_equal(mock_file.id, fid)
     assert_is_instance(mock_file, DataverseFile)