You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

272 lines
9.8 KiB

# -*- coding: utf-8 -*-
# Copyright 2016 SYLEAM
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from openerp.tests.common import TransactionCase
class TestOAuthProviderScope(TransactionCase):
def setUp(self):
super(TestOAuthProviderScope, self).setUp()
self.filter = self.env['ir.filters'].create({
'name': 'Current user',
'model_id': 'res.users',
'domain': "[('id', '=', uid)]",
})
self.scope_vals = {
'name': 'Scope',
'code': 'scope',
'description': 'Description of the scope',
'model_id': self.env.ref('base.model_res_users').id,
'filter_id': self.filter.id,
'field_ids': [
(6, 0, [self.env.ref('base.field_res_users_email').id]),
],
}
def new_scope(self, vals=None):
values = self.scope_vals
if vals is not None:
values.update(vals)
return self.env['oauth.provider.scope'].create(values)
def test_get_data_from_model_without_filter(self):
""" Check the values returned by the get_data_for_model method when no
filter is defined
"""
scope = self.new_scope({'filter_id': False})
# Check a simple call with the right model
data = scope.get_data_for_model('res.users')
# Check that we have multiple users (otherwise this test is useless)
self.assertTrue(len(self.env['res.users'].search([]).ids) > 1)
self.assertEqual(
set(data.keys()), set(self.env['res.users'].search([]).ids))
def test_get_data_from_model_without_filter_wrong_model(self):
""" Check the values returned by the get_data_for_model method when no
filter is defined
"""
scope = self.new_scope({'filter_id': False})
# Check a simple call with a wrong model
data = scope.get_data_for_model('res.partner')
self.assertEqual(data, {})
def test_get_data_from_model_with_filter(self):
""" Check the values returned by the get_data_for_model method when no
res_id is supplied
"""
scope = self.new_scope()
# Check a simple call with the right model
data = scope.get_data_for_model('res.users')
self.assertEqual(data, {
self.env.user.id: {
'id': self.env.user.id,
'email': self.env.user.email,
},
})
def test_get_data_from_model_with_filter_wrong_model(self):
""" Check the values returned by the get_data_for_model method when no
res_id is supplied
"""
scope = self.new_scope()
# Check a simple call with a wrong model
data = scope.get_data_for_model('res.partner')
self.assertEqual(data, {})
def test_get_data_from_model_with_res_id_and_no_filter(self):
""" Check the values returned by the get_data_for_model method when a
res_id is supplied
"""
scope = self.new_scope({'filter_id': False})
# Check a simple call with the right model
data = scope.get_data_for_model('res.users', res_id=self.env.user.id)
self.assertEqual(data, {
'id': self.env.user.id,
'email': self.env.user.email,
})
def test_get_data_from_model_with_res_id_and_no_filter_wrong_model(self):
""" Check the values returned by the get_data_for_model method when a
res_id is supplied
"""
scope = self.new_scope({'filter_id': False})
# Check a simple call with a wrong model
data = scope.get_data_for_model(
'res.partner', res_id=self.env.user.id + 1)
self.assertEqual(data, {})
def test_get_data_from_model_with_res_id(self):
""" Check the values returned by the get_data_for_model method when a
res_id is supplied
"""
scope = self.new_scope()
# Check a simple call with the right model
data = scope.get_data_for_model('res.users', res_id=self.env.user.id)
self.assertEqual(data, {
'id': self.env.user.id,
'email': self.env.user.email,
})
def test_get_data_from_model_with_res_id_wrong_model(self):
""" Check the values returned by the get_data_for_model method when a
res_id is supplied
"""
scope = self.new_scope()
# Check a simple call with a wrong model
data = scope.get_data_for_model(
'res.partner', res_id=self.env.user.id + 1)
self.assertEqual(data, {})
def _generate_multiple_scopes(self):
scopes = self.new_scope()
scopes += self.new_scope({
'code': 'Profile',
'field_ids': [(6, 0, [
self.env.ref('base.field_res_users_name').id,
self.env.ref('base.field_res_users_city').id,
self.env.ref('base.field_res_users_country_id').id,
])],
})
scopes += self.new_scope({
'model_id': self.env.ref('base.model_res_groups').id,
'code': 'All groups',
'filter_id': False,
'field_ids': [
(6, 0, [self.env.ref('base.field_res_groups_name').id]),
],
})
return scopes
def test_get_data_from_model_with_multiple_scopes_empty_fields(self):
""" Check the values returned by the get_data_for_model method when
calling on multiple scopes
"""
scopes = self._generate_multiple_scopes()
# Check a simple call with the right model with empty fields
self.env.user.city = False
self.env.user.country_id = False
data = scopes.get_data_for_model('res.users')
self.assertEqual(data, {self.env.user.id: {
'id': 1,
'email': self.env.user.email,
'name': self.env.user.name,
'city': False,
'country_id': False,
}})
def test_get_data_from_model_with_multiple_scopesfirst_model(self):
""" Check the values returned by the get_data_for_model method when
calling on multiple scopes
"""
scopes = self._generate_multiple_scopes()
# Check a simple call with the right model without empty fields
country = self.env.ref('base.fr')
self.env.user.city = 'Paris'
self.env.user.country_id = country
data = scopes.get_data_for_model('res.users')
self.assertEqual(data, {self.env.user.id: {
'id': 1,
'email': self.env.user.email,
'name': self.env.user.name,
'city': self.env.user.city,
'country_id': country.name,
}})
def test_get_data_from_model_with_multiple_scopes_second_model(self):
""" Check the values returned by the get_data_for_model method when
calling on multiple scopes
"""
scopes = self._generate_multiple_scopes()
# Check a simple call with another right model
data = scopes.get_data_for_model('res.groups')
self.assertEqual(
set(data.keys()), set(self.env['res.groups'].search([]).ids))
def test_get_data_from_model_with_multiple_scopes_wrong_model(self):
""" Check the values returned by the get_data_for_model method when
calling on multiple scopes
"""
scopes = self._generate_multiple_scopes()
# Check a simple call with a wrong model
data = scopes.get_data_for_model('res.partner')
self.assertEqual(data, {})
def _generate_multiple_scopes_match(self):
scopes = self.new_scope()
scopes += self.new_scope({
'code': 'All users',
'filter_id': False,
})
scopes += self.new_scope({
'model_id': self.env.ref('base.model_res_groups').id,
'code': 'All groups',
'filter_id': False,
'field_ids': [
(6, 0, [self.env.ref('base.field_res_groups_name').id]),
],
})
return scopes
def test_get_data_from_model_with_all_scopes_match(self):
""" Check the values returned by the get_data_for_model method when all
scopes are required to match
"""
scopes = self._generate_multiple_scopes_match()
# Check a simple call with the right model with any scope match
# returned records
data = scopes.get_data_for_model('res.users')
self.assertEqual(
set(data.keys()), set(self.env['res.users'].search([]).ids))
def test_get_data_from_model_with_all_scopes_match_first_model(self):
""" Check the values returned by the get_data_for_model method when all
scopes are required to match
"""
scopes = self._generate_multiple_scopes_match()
# Check a simple call with the right model with all scopes required to
# match returned records
data = scopes.get_data_for_model('res.users', all_scopes_match=True)
self.assertEqual(data, {self.env.user.id: {
'id': 1,
'email': self.env.user.email,
}})
def test_get_data_from_model_with_all_scopes_match_second_model(self):
""" Check the values returned by the get_data_for_model method when all
scopes are required to match
"""
scopes = self._generate_multiple_scopes_match()
# Check a simple call with another right model
data = scopes.get_data_for_model('res.groups')
self.assertEqual(
set(data.keys()), set(self.env['res.groups'].search([]).ids))
def test_get_data_from_model_with_all_scopes_match_wrong_model(self):
""" Check the values returned by the get_data_for_model method when all
scopes are required to match
"""
scopes = self._generate_multiple_scopes_match()
# Check a simple call with a wrong model
data = scopes.get_data_for_model('res.partner')
self.assertEqual(data, {})