示例#1
0
    def test_mock_connection(self):
        # A connection with bad credentials fails
        failed_connection = create_mock_connection('wrong', 'info')
        assert_false(failed_connection)

        # A good connection has the correct parameters
        mock_connection = create_mock_connection()
        assert_equal(mock_connection.username, 'snowman')
        assert_equal(mock_connection.password, 'frosty')
        assert_equal(len(mock_connection.get_dataverses()), 3)
        assert_is_instance(mock_connection.get_dataverses()[0], Dataverse)
        assert_equal(
            mock_connection.get_dataverse(mock_connection.get_dataverses()[1].alias),
            mock_connection.get_dataverses()[1],
        )
示例#2
0
    def test_set_user_config_fail(self, mock_connection):

        mock_connection.return_value = create_mock_connection('wrong', 'info')

        # Create a user with no settings
        user = AuthUserFactory()
        user.add_addon('dataverse')
        user_settings = user.get_addon('dataverse')

        url = api_url_for('dataverse_set_user_config')
        params = {'dataverse_username': '******',
                  'dataverse_password': '******'}

        # Post incorrect credentials to existing user
        res = self.app.post_json(url, params, auth=self.user.auth,
                                 expect_errors=True)
        self.user_settings.reload()

        # Original user's info has not changed
        assert_equal(res.status_code, http.UNAUTHORIZED)
        assert_equal(self.user_settings.dataverse_username, 'snowman')
        assert_equal(self.user_settings.dataverse_password, 'frosty')

        # Post incorrect credentials to new user
        res = self.app.post_json(url, params, auth=user.auth,
                                 expect_errors=True)
        user_settings.reload()

        # New user's incorrect credentials were not saved
        assert_equal(res.status_code, http.UNAUTHORIZED)
        assert_equal(user_settings.dataverse_username, None)
        assert_equal(user_settings.dataverse_password, None)
示例#3
0
    def test_set_user_config_fail(self, mock_connection):

        mock_connection.return_value = create_mock_connection('wrong', 'info')

        # Create a user with no settings
        user = AuthUserFactory()
        user.add_addon('dataverse')
        user_settings = user.get_addon('dataverse')

        url = api_url_for('dataverse_set_user_config')
        params = {'dataverse_username': '******', 'dataverse_password': '******'}

        # Post incorrect credentials to existing user
        res = self.app.post_json(url,
                                 params,
                                 auth=self.user.auth,
                                 expect_errors=True)
        self.user_settings.reload()

        # Original user's info has not changed
        assert_equal(res.status_code, http.UNAUTHORIZED)
        assert_equal(self.user_settings.dataverse_username, 'snowman')
        assert_equal(self.user_settings.dataverse_password, 'frosty')

        # Post incorrect credentials to new user
        res = self.app.post_json(url,
                                 params,
                                 auth=user.auth,
                                 expect_errors=True)
        user_settings.reload()

        # New user's incorrect credentials were not saved
        assert_equal(res.status_code, http.UNAUTHORIZED)
        assert_equal(user_settings.dataverse_username, None)
        assert_equal(user_settings.dataverse_password, None)
示例#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_dataverse_root_not_published(self, mock_files, mock_connection):
        mock_connection.return_value = create_mock_connection()
        mock_files.return_value = []

        self.project.set_privacy('public')
        self.project.save()

        alias = self.node_settings.dataverse_alias
        doi = self.node_settings.dataset_doi
        external_account = create_external_account()
        self.user.external_accounts.append(external_account)
        self.user.save()
        self.node_settings.set_auth(external_account, self.user)
        self.node_settings.dataverse_alias = alias
        self.node_settings.dataset_doi = doi
        self.node_settings.save()

        url = api_url_for('dataverse_root_folder_public',
                          pid=self.project._primary_key)

        # Contributor gets draft, no options
        res = self.app.get(url, auth=self.user.auth)
        assert_true(res.json[0]['permissions']['edit'])
        assert_false(res.json[0]['hasPublishedFiles'])
        assert_equal(res.json[0]['version'], 'latest')

        # Non-contributor gets nothing
        user2 = AuthUserFactory()
        res = self.app.get(url, auth=user2.auth)
        assert_equal(res.json, [])
示例#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_dataverse_add_external_account_existing(self, mock_connection):
        mock_connection.return_value = create_mock_connection()
        host = 'myfakehost.data.verse'
        token = 'dont-use-this-token-in-other-tests'
        display_name = 'loaded_version'

        # Save an existing version
        external_account = ExternalAccount(
            provider='dataverse',
            provider_name='Dataverse',
            display_name=display_name,
            oauth_key=host,
            oauth_secret=token,
            provider_id=token,
        )
        external_account.save()

        url = api_url_for('dataverse_add_user_account')
        params = {'host': host, 'api_token': token}
        self.app.post_json(url, params, auth=self.user.auth)
        self.user.reload()

        assert_equal(len(self.user.external_accounts), 1)
        external_account = self.user.external_accounts[0]
        assert_equal(external_account.provider, 'dataverse')
        assert_equal(external_account.oauth_key, host)
        assert_equal(external_account.oauth_secret, token)
        # Ensure we got the loaded version
        assert_equal(external_account.display_name, display_name)
示例#8
0
    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)
        self.app.put(url, auth=self.user.auth)
        assert_true(mock_release.called)
示例#9
0
    def test_set_dataverse_no_dataset(self, mock_connection):
        mock_connection.return_value = create_mock_connection()
        num_old_logs = len(self.project.logs)

        url = api_url_for('dataverse_set_config',
                          pid=self.project._primary_key)
        params = {
            'dataverse': {'alias': 'ALIAS3'},
            'dataset': {},    # The dataverse has no datasets
        }

        # Select a different dataset
        res = self.app.post_json(url, params, auth=self.user.auth,
                                 expect_errors=True)
        self.node_settings.reload()

        # Old settings did not change
        assert_equal(res.status_code, http.BAD_REQUEST)
        assert_equal(self.node_settings.dataverse_alias, 'ALIAS2')
        assert_equal(self.node_settings.dataset, 'Example (DVN/00001)')
        assert_equal(self.node_settings.dataset_doi, 'doi:12.3456/DVN/00001')

        # Nothing was logged
        self.project.reload()
        assert_equal(len(self.project.logs), num_old_logs)
示例#10
0
    def test_set_dataverse_and_dataset(self, mock_connection):
        mock_connection.return_value = create_mock_connection()

        url = api_url_for('dataverse_set_config',
                          pid=self.project._primary_key)
        params = {
            'dataverse': {'alias': 'ALIAS3'},
            'dataset': {'doi': 'doi:12.3456/DVN/00003'},
        }

        # Select a different dataset
        self.app.post_json(url, params, auth=self.user.auth)
        self.project.reload()
        self.node_settings.reload()

        # New dataset was selected
        assert_equal(self.node_settings.dataverse_alias, 'ALIAS3')
        assert_equal(self.node_settings.dataset, 'Example (DVN/00003)')
        assert_equal(self.node_settings.dataset_doi, 'doi:12.3456/DVN/00003')
        assert_equal(self.node_settings.dataset_id, '18')

        # Log states that a dataset was selected
        last_log = self.project.logs[-1]
        assert_equal(last_log.action, 'dataverse_dataset_linked')
        log_params = last_log.params
        assert_equal(log_params['node'], self.project._primary_key)
        assert_is_none(log_params['project'])
        assert_equal(log_params['dataset'], 'Example (DVN/00003)')
示例#11
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)
示例#12
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])
示例#13
0
    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'

        # 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'},
        )

        # 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])
示例#14
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)
示例#15
0
    def test_set_dataverse_and_study(self, mock_connection):
        mock_connection.return_value = create_mock_connection()

        url = api_url_for('set_dataverse_and_study',
                          pid=self.project._primary_key)
        params = {
            'dataverse': {
                'alias': 'ALIAS3'
            },
            'study': {
                'hdl': 'doi:12.3456/DVN/00003'
            },
        }

        # Select a different study
        self.app.post_json(url, params, auth=self.user.auth)
        self.project.reload()
        self.node_settings.reload()

        # New study was selected
        assert_equal(self.node_settings.dataverse_alias, 'ALIAS3')
        assert_equal(self.node_settings.study, 'Example (DVN/00003)')
        assert_equal(self.node_settings.study_hdl, 'doi:12.3456/DVN/00003')

        # Log states that a study was selected
        last_log = self.project.logs[-1]
        assert_equal(last_log.action, 'dataverse_study_linked')
        log_params = last_log.params
        assert_equal(log_params['node'], self.project._primary_key)
        assert_is_none(log_params['project'])
        assert_equal(log_params['study'], 'Example (DVN/00003)')
示例#16
0
    def test_serialize_settings_helper_returns_correct_auth_info(self, mock_connection):
        mock_connection.return_value = create_mock_connection()

        result = self.serializer.serialized_node_settings
        assert_equal(result['nodeHasAuth'], self.node_settings.has_auth)
        assert_true(result['userHasAuth'])
        assert_true(result['userIsOwner'])
示例#17
0
    def test_dataverse_publish_dataset(self, mock_publish, mock_connection):
        mock_connection.return_value = create_mock_connection()

        url = api_url_for('dataverse_publish_dataset',
                          pid=self.project._primary_key)
        self.app.put(url, auth=self.user.auth)
        assert_true(mock_publish.called)
示例#18
0
    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'

        # 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'},
        )

        # 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])
示例#19
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'])
示例#20
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)
示例#21
0
    def test_dataverse_publish_dataset(self, mock_publish, mock_connection):
        mock_connection.return_value = create_mock_connection()

        url = api_url_for('dataverse_publish_dataset',
                          pid=self.project._primary_key)
        self.app.put(url, auth=self.user.auth)
        assert_true(mock_publish.called)
示例#22
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)
示例#23
0
    def test_dataverse_root_draft(self, mock_files, mock_request,
                                  mock_connection):
        mock_connection.return_value = create_mock_connection()
        mock_request.referrer = 'some_url/files/'
        mock_request.args = {'state': 'draft'}
        mock_files.return_value = ['mock_file']

        self.project.set_privacy('public')
        self.project.save()

        url = api_url_for('dataverse_root_folder_public',
                          pid=self.project._primary_key)

        # Contributor can select between states, current state is correct
        res = self.app.get(url, auth=self.user.auth)
        assert_in('draft', res.json[0]['urls']['fetch'])
        assert_true(res.json[0]['permissions']['edit'])
        assert_in('<option value="draft" selected>', res.json[0]['extra'])

        # Non-contributor gets released version, no options
        user2 = AuthUserFactory()
        res = self.app.get(url, auth=user2.auth)
        assert_in('released', res.json[0]['urls']['fetch'])
        assert_false(res.json[0]['permissions']['edit'])
        assert_not_in('select', res.json[0]['extra'])
示例#24
0
    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)
示例#25
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])
示例#26
0
    def test_mock_connection(self):
        # A connection with bad credentials fails
        failed_connection = create_mock_connection('wrong', 'info')
        assert_false(failed_connection)

        # A good connection has the correct parameters
        mock_connection = create_mock_connection()
        assert_equal(mock_connection.username, 'snowman')
        assert_equal(mock_connection.password, 'frosty')
        assert_equal(len(mock_connection.get_dataverses()), 3)
        assert_is_instance(mock_connection.get_dataverses()[0], Dataverse)
        assert_equal(
            mock_connection.get_dataverse(
                mock_connection.get_dataverses()[1].alias),
            mock_connection.get_dataverses()[1],
        )
示例#27
0
    def test_set_dataverse_no_study(self, mock_connection):
        mock_connection.return_value = create_mock_connection()
        num_old_logs = len(self.project.logs)

        url = api_url_for('set_dataverse_and_study',
                          pid=self.project._primary_key)
        params = {
            'dataverse': {
                'alias': 'ALIAS3'
            },
            'study': {},  # The dataverse has no studies
        }

        # Select a different study
        res = self.app.post_json(url,
                                 params,
                                 auth=self.user.auth,
                                 expect_errors=True)
        self.node_settings.reload()

        # Old settings did not change
        assert_equal(res.status_code, http.BAD_REQUEST)
        assert_equal(self.node_settings.dataverse_alias, 'ALIAS2')
        assert_equal(self.node_settings.study, 'Example (DVN/00001)')
        assert_equal(self.node_settings.study_hdl, 'doi:12.3456/DVN/00001')

        # Nothing was logged
        self.project.reload()
        assert_equal(len(self.project.logs), num_old_logs)
示例#28
0
    def test_dataverse_root_not_published(self, mock_files, mock_connection):
        mock_connection.return_value = create_mock_connection()
        mock_files.return_value = []

        self.project.set_privacy('public')
        self.project.save()

        alias = self.node_settings.dataverse_alias
        doi = self.node_settings.dataset_doi
        external_account = create_external_account()
        self.user.external_accounts.append(external_account)
        self.user.save()
        self.node_settings.set_auth(external_account, self.user)
        self.node_settings.dataverse_alias = alias
        self.node_settings.dataset_doi = doi
        self.node_settings.save()

        url = api_url_for('dataverse_root_folder_public',
                          pid=self.project._primary_key)

        # Contributor gets draft, no options
        res = self.app.get(url, auth=self.user.auth)
        assert_true(res.json[0]['permissions']['edit'])
        assert_false(res.json[0]['hasPublishedFiles'])
        assert_equal(res.json[0]['version'], 'latest')

        # Non-contributor gets nothing
        user2 = AuthUserFactory()
        res = self.app.get(url, auth=user2.auth)
        assert_equal(res.json, [])
示例#29
0
    def test_dataverse_add_external_account_existing(self, mock_connection):
        mock_connection.return_value = create_mock_connection()
        host = 'myfakehost.data.verse'
        token = 'dont-use-this-token-in-other-tests'
        display_name = 'loaded_version'

        # Save an existing version
        external_account = ExternalAccount(
            provider='dataverse',
            provider_name='Dataverse',
            display_name=display_name,
            oauth_key=host,
            oauth_secret=token,
            provider_id=token,
        )
        external_account.save()

        url = api_url_for('dataverse_add_user_account')
        params = {'host': host, 'api_token': token}
        self.app.post_json(url, params, auth=self.user.auth)
        self.user.reload()

        assert_equal(len(self.user.external_accounts), 1)
        external_account = self.user.external_accounts[0]
        assert_equal(external_account.provider, 'dataverse')
        assert_equal(external_account.oauth_key, host)
        assert_equal(external_account.oauth_secret, token)
        # Ensure we got the loaded version
        assert_equal(external_account.display_name, display_name)
示例#30
0
 def setUp(self):
     super(TestDataverseSerializer, self).setUp()
     self.ser = self.Serializer(user_settings=self.user_settings,
                                node_settings=self.node_settings)
     self.mock_api = mock.patch(
         'website.addons.dataverse.serializer.client.connect_from_settings')
     self.mock_api.return_value = create_mock_connection()
     self.mock_api.start()
示例#31
0
 def test_mock_connection(self):
     mock_connection = create_mock_connection()
     assert_equal(mock_connection.token, 'snowman-frosty')
     assert_equal(len(mock_connection.get_dataverses()), 3)
     assert_is_instance(mock_connection.get_dataverses()[0], Dataverse)
     assert_equal(
         mock_connection.get_dataverse(mock_connection.get_dataverses()[1].alias),
         mock_connection.get_dataverses()[1],
     )
示例#32
0
 def setUp(self):
     super(TestDataverseSerializer, self).setUp()
     self.ser = self.Serializer(
         user_settings=self.user_settings,
         node_settings=self.node_settings
     )
     self.mock_api = mock.patch('website.addons.dataverse.serializer.client.connect_from_settings')
     self.mock_api.return_value = create_mock_connection()
     self.mock_api.start()
示例#33
0
    def test_serialize_settings_helper_returns_dv_info(self, mock_connection):
        mock_connection.return_value = create_mock_connection()

        result = serialize_settings(self.node_settings, self.user)

        assert_equal(len(result['dataverses']), 3)
        assert_equal(result['savedDataverse']['title'], self.node_settings.dataverse)
        assert_equal(result['savedDataverse']['alias'], self.node_settings.dataverse_alias)
        assert_equal(result['savedStudy']['title'], self.node_settings.study)
        assert_equal(result['savedStudy']['hdl'], self.node_settings.study_hdl)
示例#34
0
    def test_dataverse_publish_both(self, mock_publish_dv, mock_publish_ds, mock_connection):
        mock_connection.return_value = create_mock_connection()

        url = api_url_for('dataverse_publish_dataset',
                          pid=self.project._primary_key)
        self.app.put_json(url, params={'publish_both': True}, auth=self.user.auth)

        # Both Dataverse and dataset were published
        assert_true(mock_publish_dv.called)
        assert_true(mock_publish_ds.called)
示例#35
0
    def test_dataverse_root_no_connection(self, mock_files, mock_connection):
        mock_connection.return_value = create_mock_connection()
        mock_files.return_value = ['mock_file']

        url = api_url_for('dataverse_root_folder_public',
                          pid=self.project._primary_key)

        mock_connection.return_value = None
        res = self.app.get(url, auth=self.user.auth)
        assert_equal(res.json, [])
示例#36
0
    def test_dataverse_data_contents_no_connection(self, mock_request, mock_connection):
        mock_connection.return_value = create_mock_connection()
        mock_request.referrer = 'some_url/files/'

        # If there is no connection, no files are returned
        mock_connection.return_value = None
        url = api_url_for('dataverse_hgrid_data_contents',
                          pid=self.project._primary_key)
        res = self.app.get(url, auth=self.user.auth)
        assert_equal(res.json, [])
示例#37
0
    def test_dataverse_root_no_connection(self, mock_files, mock_connection):
        mock_connection.return_value = create_mock_connection()
        mock_files.return_value = ['mock_file']

        url = api_url_for('dataverse_root_folder_public',
                          pid=self.project._primary_key)

        mock_connection.return_value = None
        res = self.app.get(url, auth=self.user.auth)
        assert_equal(res.json, [])
示例#38
0
    def test_dataverse_data_contents_no_connection(self, mock_request, mock_connection):
        mock_connection.return_value = create_mock_connection()
        mock_request.referrer = 'some_url/files/'

        # If there is no connection, no files are returned
        mock_connection.return_value = None
        url = api_url_for('dataverse_hgrid_data_contents',
                          pid=self.project._primary_key)
        res = self.app.get(url, auth=self.user.auth)
        assert_equal(res.json, [])
示例#39
0
    def test_serialize_settings_helper_returns_dv_info(self, mock_connection):
        mock_connection.return_value = create_mock_connection()

        result = serialize_settings(self.node_settings, self.user)

        assert_equal(len(result['dataverses']), 3)
        assert_equal(result['savedDataverse']['title'], self.node_settings.dataverse)
        assert_equal(result['savedDataverse']['alias'], self.node_settings.dataverse_alias)
        assert_equal(result['savedDataset']['title'], self.node_settings.dataset)
        assert_equal(result['savedDataset']['doi'], self.node_settings.dataset_doi)
示例#40
0
    def test_dataverse_data_contents_no_study(self, mock_request, mock_connection):
        mock_connection.return_value = create_mock_connection()
        mock_request.referrer = 'some_url/files/'

        # If there is no study, no data are returned
        self.node_settings.study_hdl = None
        self.node_settings.save()
        url = api_url_for('dataverse_hgrid_data_contents',
                          pid=self.project._primary_key)
        res = self.app.get(url, auth=self.user.auth)
        assert_equal(res.json, [])
示例#41
0
    def test_dataverse_get_studies(self, mock_connection):
        mock_connection.return_value = create_mock_connection()

        url = api_url_for('dataverse_get_studies', pid=self.project._primary_key)
        params = {'alias': 'ALIAS1'}
        res = self.app.post_json(url, params, auth=self.user.auth)

        assert_equal(len(res.json['studies']), 3)
        first = res.json['studies'][0]
        assert_equal(first['title'], 'Example (DVN/00001)')
        assert_equal(first['hdl'], 'doi:12.3456/DVN/00001')
示例#42
0
    def test_dataverse_data_contents_no_study(self, mock_request, mock_connection):
        mock_connection.return_value = create_mock_connection()
        mock_request.referrer = 'some_url/files/'

        # If there is no study, no data are returned
        self.node_settings.study_hdl = None
        self.node_settings.save()
        url = api_url_for('dataverse_hgrid_data_contents',
                          pid=self.project._primary_key)
        res = self.app.get(url, auth=self.user.auth)
        assert_equal(res.json, [])
示例#43
0
    def test_dataverse_get_datasets(self, mock_connection):
        mock_connection.return_value = create_mock_connection()

        url = api_url_for('dataverse_get_datasets', pid=self.project._primary_key)
        params = {'alias': 'ALIAS1'}
        res = self.app.post_json(url, params, auth=self.user.auth)

        assert_equal(len(res.json['datasets']), 3)
        first = res.json['datasets'][0]
        assert_equal(first['title'], 'Example (DVN/00001)')
        assert_equal(first['doi'], 'doi:12.3456/DVN/00001')
示例#44
0
    def test_user_config_get(self, mock_connection):
        mock_connection.return_value = create_mock_connection()

        url = api_url_for('dataverse_user_config_get')
        res = self.app.get(url, auth=self.user.auth)

        result = res.json.get('result')
        assert_true(result['connected'])
        assert_true(result['userHasAuth'])
        assert_equal(result['apiToken'], self.user_settings.api_token)
        assert_in('create', result['urls'])
        assert_in('delete', result['urls'])
示例#45
0
    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)
示例#46
0
    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)

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

        mock_delete.assert_called_once()
        assert_equal(path, mock_delete.call_args[0][0].id)
示例#47
0
    def test_dataverse_root_no_connection(self, mock_files, mock_request, mock_connection):
        mock_connection.return_value = create_mock_connection()
        mock_request.referrer = 'some_url/files/'
        mock_request.args = {'state': 'released'}
        mock_files.return_value = ['mock_file']

        url = api_url_for('dataverse_root_folder_public',
                          pid=self.project._primary_key)

        mock_connection.return_value = None
        res = self.app.get(url, auth=self.user.auth)
        assert_equal(res.json, [])
示例#48
0
    def test_serialize_settings_helper_returns_dv_info(self, mock_connection):
        mock_connection.return_value = create_mock_connection()

        result = self.serializer.serialized_node_settings

        assert_equal(len(result['dataverses']), 3)
        assert_true(result['connected'])
        assert_equal(result['dataverseHost'], self.host)
        assert_equal(result['savedDataverse']['title'], self.node_settings.dataverse)
        assert_equal(result['savedDataverse']['alias'], self.node_settings.dataverse_alias)
        assert_equal(result['savedDataset']['title'], self.node_settings.dataset)
        assert_equal(result['savedDataset']['doi'], self.node_settings.dataset_doi)
示例#49
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)
示例#50
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),
        )
示例#51
0
    def test_dataverse_root_no_connection(self, mock_files, mock_request, mock_connection):
        mock_connection.return_value = create_mock_connection()
        mock_request.referrer = 'some_url/files/'
        mock_request.args = {'state': 'released'}
        mock_files.return_value = ['mock_file']

        url = api_url_for('dataverse_root_folder_public',
                          pid=self.project._primary_key)

        mock_connection.return_value = None
        res = self.app.get(url, auth=self.user.auth)
        assert_equal(res.json, [])
示例#52
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)
示例#53
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),
        )
示例#54
0
    def test_user_config_get(self, mock_connection):
        mock_connection.return_value = create_mock_connection()

        url = api_url_for('dataverse_user_config_get')
        res = self.app.get(url, auth=self.user.auth)

        result = res.json.get('result')
        assert_true(result['connected'])
        assert_true(result['userHasAuth'])
        assert_equal(result['apiToken'], self.user_settings.api_token)
        assert_in('create', result['urls'])
        assert_in('delete', result['urls'])
示例#55
0
    def test_serialize_settings_helper_returns_correct_urls(self, mock_connection):
        mock_connection.return_value = create_mock_connection()

        result = serialize_settings(self.node_settings, self.user)
        urls = result['urls']

        assert_equal(urls['set'], self.project.api_url_for('set_dataverse_and_study'))
        assert_equal(urls['importAuth'], self.project.api_url_for('dataverse_import_user_auth'))
        assert_equal(urls['deauthorize'], self.project.api_url_for('deauthorize_dataverse'))
        assert_equal(urls['getStudies'], self.project.api_url_for('dataverse_get_studies'))
        assert_equal(urls['studyPrefix'], 'http://dx.doi.org/')
        assert_equal(urls['dataversePrefix'], 'http://{0}/dvn/dv/'.format(HOST))
        assert_equal(urls['owner'], web_url_for('profile_view_id', uid=self.user._primary_key))
示例#56
0
    def test_serialize_settings_helper_returns_correct_urls(self, mock_connection):
        mock_connection.return_value = create_mock_connection()

        result = serialize_settings(self.node_settings, self.user)
        urls = result['urls']

        assert_equal(urls['set'], self.project.api_url_for('set_dataverse_and_dataset'))
        assert_equal(urls['importAuth'], self.project.api_url_for('dataverse_import_user_auth'))
        assert_equal(urls['deauthorize'], self.project.api_url_for('deauthorize_dataverse'))
        assert_equal(urls['getDatasets'], self.project.api_url_for('dataverse_get_datasets'))
        assert_equal(urls['datasetPrefix'], 'http://dx.doi.org/')
        assert_equal(urls['dataversePrefix'], 'http://{0}/dataverse/'.format(HOST))
        assert_equal(urls['owner'], web_url_for('profile_view_id', uid=self.user._primary_key))
示例#57
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)
示例#58
0
    def test_serialize_settings_helper_returns_correct_urls(self, mock_connection):
        mock_connection.return_value = create_mock_connection()

        # result =
        urls = self.serializer.serialized_urls

        assert_equal(urls['create'], api_url_for('dataverse_add_user_account'))
        assert_equal(urls['set'], self.project.api_url_for('dataverse_set_config'))
        assert_equal(urls['importAuth'], self.project.api_url_for('dataverse_add_user_auth'))
        assert_equal(urls['deauthorize'], self.project.api_url_for('dataverse_remove_user_auth'))
        assert_equal(urls['getDatasets'], self.project.api_url_for('dataverse_get_datasets'))
        assert_equal(urls['datasetPrefix'], 'http://dx.doi.org/')
        assert_equal(urls['dataversePrefix'], 'http://{0}/dataverse/'.format(self.host))
        assert_equal(urls['accounts'], api_url_for('dataverse_get_user_accounts'))