Пример #1
0
    def test_dataverse_root_not_published(self, mock_files, mock_connection,
                                          mock_text):
        mock_connection.return_value = create_mock_connection()
        mock_files.return_value = []
        mock_text.return_value = 'Do you want to publish?'

        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.add(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',
                          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, [])
Пример #2
0
    def test_dataverse_root_not_published(self, mock_files, mock_connection, mock_text):
        mock_connection.return_value = create_mock_connection()
        mock_files.return_value = []
        mock_text.return_value = 'Do you want to publish?'

        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.add(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',
                          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, [])
Пример #3
0
    def test_dataverse_root_published(self, mock_files, mock_connection):
        mock_connection.return_value = create_mock_connection()
        mock_files.return_value = ['mock_file']

        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.add(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',
                          pid=self.project._primary_key)

        # Contributor can select between states, current state is correct
        res = self.app.get(url, auth=self.user.auth)
        assert_true(res.json[0]['permissions']['edit'])
        assert_true(res.json[0]['hasPublishedFiles'])
        assert_equal(res.json[0]['version'], 'latest-published')

        # Non-contributor gets published version, no options
        user2 = AuthUserFactory()
        res = self.app.get(url, auth=user2.auth)
        assert_false(res.json[0]['permissions']['edit'])
        assert_true(res.json[0]['hasPublishedFiles'])
        assert_equal(res.json[0]['version'], 'latest-published')
Пример #4
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],
     )
 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('addons.dataverse.serializer.client.connect_from_settings')
     self.mock_api.return_value = create_mock_connection()
     self.mock_api.start()
Пример #6
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)
Пример #7
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',
                          pid=self.project._primary_key)

        mock_connection.return_value = None
        res = self.app.get(url, auth=self.user.auth)
        assert_equal(res.json, [])
Пример #8
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',
                          pid=self.project._primary_key)

        mock_connection.return_value = None
        res = self.app.get(url, auth=self.user.auth)
        assert_equal(res.json, [])
Пример #9
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],
     )
Пример #10
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)
Пример #11
0
    def test_restricted_set_dataset_not_owner(self, mock_connection):
        mock_connection.return_value = create_mock_connection()

        # Contributor has dataverse auth, but is not the node authorizer
        self.contrib.add_addon('dataverse')
        self.contrib.save()

        url = api_url_for('dataverse_set_config', pid=self.project._primary_key)
        params = {
            'dataverse': {'alias': 'ALIAS1'},
            'dataset': {'doi': 'doi:12.3456/DVN/00002'},
        }
        res = self.app.post_json(url, params, auth=self.contrib.auth,
                                 expect_errors=True)
        assert_equal(res.status_code, http.FORBIDDEN)
Пример #12
0
    def test_restricted_set_dataset_not_owner(self, mock_connection):
        mock_connection.return_value = create_mock_connection()

        # Contributor has dataverse auth, but is not the node authorizer
        self.contrib.add_addon('dataverse')
        self.contrib.save()

        url = api_url_for('dataverse_set_config',
                          pid=self.project._primary_key)
        params = {
            'dataverse': {
                'alias': 'ALIAS1'
            },
            'dataset': {
                'doi': 'doi:12.3456/DVN/00002'
            },
        }
        res = self.app.post_json(url,
                                 params,
                                 auth=self.contrib.auth,
                                 expect_errors=True)
        assert_equal(res.status_code, http.FORBIDDEN)
Пример #13
0
 def setUp(self):
     super(TestConfigViews, self).setUp()
     self.mock_ser_api = mock.patch('addons.dataverse.serializer.client.connect_from_settings')
     self.mock_ser_api.return_value = create_mock_connection()
     self.mock_ser_api.start()
Пример #14
0
 def setUp(self):
     super(TestConfigViews, self).setUp()
     self.mock_ser_api = mock.patch(
         'addons.dataverse.serializer.client.connect_from_settings')
     self.mock_ser_api.return_value = create_mock_connection()
     self.mock_ser_api.start()
Пример #15
0
class TestConfigViews(DataverseAddonTestCase,
                      OAuthAddonConfigViewsTestCaseMixin, OsfTestCase):
    connection = create_mock_connection()
    Serializer = DataverseSerializer
    client = DataverseProvider

    def setUp(self):
        super(TestConfigViews, self).setUp()
        self.mock_ser_api = mock.patch(
            'addons.dataverse.serializer.client.connect_from_settings')
        self.mock_ser_api.return_value = create_mock_connection()
        self.mock_ser_api.start()

    def tearDown(self):
        self.mock_ser_api.stop()
        super(TestConfigViews, self).tearDown()

    @mock.patch('addons.dataverse.views.client.connect_from_settings')
    def test_folder_list(self, mock_connection):
        #test_get_datasets
        mock_connection.return_value = self.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')

    @mock.patch('addons.dataverse.views.client.connect_from_settings')
    def test_set_config(self, mock_connection):
        mock_connection.return_value = self.connection

        url = self.project.api_url_for('{0}_set_config'.format(
            self.ADDON_SHORT_NAME))
        res = self.app.post_json(url, {
            'dataverse': {
                'alias': 'ALIAS3'
            },
            'dataset': {
                'doi': 'doi:12.3456/DVN/00003'
            },
        },
                                 auth=self.user.auth)
        assert_equal(res.status_code, http.OK)
        self.project.reload()
        assert_equal(self.project.logs.latest().action,
                     '{0}_dataset_linked'.format(self.ADDON_SHORT_NAME))
        assert_equal(res.json['dataverse'],
                     self.connection.get_dataverse('ALIAS3').title)
        assert_equal(
            res.json['dataset'],
            self.connection.get_dataverse('ALIAS3').get_dataset_by_doi(
                'doi:12.3456/DVN/00003').title)

    def test_get_config(self):
        url = self.project.api_url_for('{0}_get_config'.format(
            self.ADDON_SHORT_NAME))
        res = self.app.get(url, auth=self.user.auth)
        assert_equal(res.status_code, http.OK)
        assert_in('result', res.json)
        serialized = self.Serializer().serialize_settings(
            self.node_settings,
            self.user,
        )
        assert_equal(serialized, res.json['result'])

    @mock.patch('addons.dataverse.views.client.connect_from_settings')
    def test_set_config_no_dataset(self, mock_connection):
        mock_connection.return_value = self.connection
        num_old_logs = self.project.logs.count()

        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(self.project.logs.count(), num_old_logs)