Example #1
0
    def setUp(self):
        super(TestDataverseSerializerConfig, self).setUp()

        self.host = 'my.host.name'
        self.external_account = create_external_account(self.host)
        self.user.external_accounts.append(self.external_account)
        self.node_settings.set_auth(self.external_account, self.user)
        self.serializer = DataverseSerializer(
            user_settings=self.user_settings,
            node_settings=self.node_settings,
        )
Example #2
0
    def test_user_is_owner(self):

        # No user is not owner
        serializer = DataverseSerializer(node_settings=self.node_settings)
        assert_false(serializer.user_is_owner)

        # Different user is not owner
        serializer.user_settings = AuthUserFactory()
        assert_false(serializer.user_is_owner)

        # Owner is owner
        serializer.user_settings = self.user_settings
        assert_true(serializer.user_is_owner)
Example #3
0
    def test_dataverse_get_user_accounts(self):
        external_account = create_external_account()
        self.user.external_accounts.append(external_account)
        self.user.external_accounts.append(create_external_account())
        self.user.save()

        url = api_url_for('dataverse_get_user_accounts')
        res = self.app.get(url, auth=self.user.auth)
        accounts = res.json['accounts']

        assert_equal(len(accounts), 2)
        serializer = DataverseSerializer(user_settings=self.user_settings)
        assert_equal(
            accounts[0], serializer.serialize_account(external_account),
        )
Example #4
0
def dataverse_get_config(node_addon, auth, **kwargs):
    """API that returns the serialized node settings."""
    result = DataverseSerializer(
        user_settings=auth.user.get_addon('dataverse'),
        node_settings=node_addon,
    ).serialized_node_settings
    return {'result': result}, http.OK
Example #5
0
    def test_dataverse_get_user_accounts(self):
        external_account = create_external_account()
        self.user.external_accounts.append(external_account)
        self.user.external_accounts.append(create_external_account())
        self.user.save()

        url = api_url_for('dataverse_get_user_accounts')
        res = self.app.get(url, auth=self.user.auth)
        accounts = res.json['accounts']

        assert_equal(len(accounts), 2)
        serializer = DataverseSerializer(user_settings=self.user_settings)
        assert_equal(
            accounts[0],
            serializer.serialize_account(external_account),
        )
Example #6
0
    def test_serialize_settings_helper_non_owner(self, mock_connection):
        mock_connection.return_value = create_mock_connection()

        # Non-owner user without add-on
        serializer = DataverseSerializer(node_settings=self.node_settings)
        result = serializer.serialized_node_settings
        assert_equal(result['nodeHasAuth'], self.node_settings.has_auth)
        assert_false(result['userHasAuth'])
        assert_false(result['userIsOwner'])

        # Non-owner user with add-on
        stranger = AuthUserFactory()
        stranger.add_addon('dataverse')
        stranger.external_accounts.append(create_external_account())
        serializer.user_settings = stranger.get_addon('dataverse')
        result = serializer.serialized_node_settings
        assert_equal(result['nodeHasAuth'], self.node_settings.has_auth)
        assert_true(result['userHasAuth'])
        assert_false(result['userIsOwner'])
Example #7
0
class TestDataverseSerializerConfig(DataverseAddonTestCase):

    def setUp(self):
        super(TestDataverseSerializerConfig, self).setUp()

        self.host = 'my.host.name'
        self.external_account = create_external_account(self.host)
        self.user.external_accounts.append(self.external_account)
        self.node_settings.set_auth(self.external_account, self.user)
        self.serializer = DataverseSerializer(
            user_settings=self.user_settings,
            node_settings=self.node_settings,
        )

    def test_serialize_account(self):

        ret = self.serializer.serialize_account(self.external_account)
        assert_equal(ret['host'], self.host)
        assert_equal(ret['host_url'], 'https://{0}'.format(self.host))

    def test_user_is_owner(self):

        # No user is not owner
        serializer = DataverseSerializer(node_settings=self.node_settings)
        assert_false(serializer.user_is_owner)

        # Different user is not owner
        serializer.user_settings = AuthUserFactory()
        assert_false(serializer.user_is_owner)

        # Owner is owner
        serializer.user_settings = self.user_settings
        assert_true(serializer.user_is_owner)

    def test_credentials_owner(self):
        assert_equal(self.node_settings.user_settings.owner, self.user)


    @mock.patch('website.addons.dataverse.views.config.client.connect_from_settings')
    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'])

    @mock.patch('website.addons.dataverse.views.config.client.connect_from_settings')
    def test_serialize_settings_helper_non_owner(self, mock_connection):
        mock_connection.return_value = create_mock_connection()

        # Non-owner user without add-on
        serializer = DataverseSerializer(node_settings=self.node_settings)
        result = serializer.serialized_node_settings
        assert_equal(result['nodeHasAuth'], self.node_settings.has_auth)
        assert_false(result['userHasAuth'])
        assert_false(result['userIsOwner'])

        # Non-owner user with add-on
        stranger = AuthUserFactory()
        stranger.add_addon('dataverse')
        stranger.external_accounts.append(create_external_account())
        serializer.user_settings = stranger.get_addon('dataverse')
        result = serializer.serialized_node_settings
        assert_equal(result['nodeHasAuth'], self.node_settings.has_auth)
        assert_true(result['userHasAuth'])
        assert_false(result['userIsOwner'])

    @mock.patch('website.addons.dataverse.views.config.client.connect_from_settings')
    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'))

    @mock.patch('website.addons.dataverse.views.config.client.connect_from_settings')
    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)

    @mock.patch('website.addons.dataverse.views.config.client.connect_from_settings')
    def test_serialize_settings_helper_no_connection(self, mock_connection):
        mock_connection.return_value = None

        result = self.serializer.serialized_node_settings

        assert_false(result['dataverses'])
        assert_false(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)
Example #8
0
def dataverse_get_user_accounts(auth):
    """ Returns the list of all of the current user's authorized Dataverse accounts """

    return DataverseSerializer(
        user_settings=auth.user.get_addon('dataverse')
    ).serialized_user_settings