summaryrefslogtreecommitdiff
path: root/odoo
diff options
context:
space:
mode:
authorRaphael Collet <rco@odoo.com>2018-07-23 10:47:19 +0200
committerRaphael Collet <rco@odoo.com>2018-08-23 21:38:57 +0200
commit2f7c03d9ca5809b65dc6eaa778064668d34fcd2e (patch)
tree1d3452d9a127de1396563ab3b5f70de6e2bd5a7f /odoo
parent7ba9acea188a08a75ab1cd4a7f5f56e0d0f956ef (diff)
[IMP] base: add regular user admin as uid 2
User 1 simply becomes a technical user (inactive, no password).
Diffstat (limited to 'odoo')
-rw-r--r--odoo/addons/base/data/base_data.sql12
-rw-r--r--odoo/addons/base/data/res_partner_data.xml7
-rw-r--r--odoo/addons/base/data/res_users_data.xml13
-rw-r--r--odoo/addons/base/data/res_users_demo.xml5
-rw-r--r--odoo/addons/base/models/res_partner.py11
-rw-r--r--odoo/addons/base/security/base_groups.xml7
-rw-r--r--odoo/addons/base/tests/test_xmlrpc.py10
-rw-r--r--odoo/addons/test_new_api/models.py2
-rw-r--r--odoo/addons/test_new_api/tests/test_onchange.py2
-rw-r--r--odoo/addons/test_performance/tests/test_performance.py40
-rw-r--r--odoo/tests/common.py3
11 files changed, 68 insertions, 44 deletions
diff --git a/odoo/addons/base/data/base_data.sql b/odoo/addons/base/data/base_data.sql
index 760205e3a89..58bdd7d3062 100644
--- a/odoo/addons/base/data/base_data.sql
+++ b/odoo/addons/base/data/base_data.sql
@@ -126,20 +126,20 @@ CREATE TABLE res_partner (
---------------------------------
insert into res_currency (id, name, symbol) VALUES (1, 'EUR', '€');
insert into ir_model_data (name, module, model, noupdate, res_id) VALUES ('EUR', 'base', 'res.currency', true, 1);
-select setval('res_currency_id_seq', 2);
+select setval('res_currency_id_seq', 1);
insert into res_company (id, name, partner_id, currency_id, create_date) VALUES (1, 'My Company', 1, 1, now() at time zone 'UTC');
insert into ir_model_data (name, module, model, noupdate, res_id) VALUES ('main_company', 'base', 'res.company', true, 1);
-select setval('res_company_id_seq', 2);
+select setval('res_company_id_seq', 1);
insert into res_partner (id, name, company_id, create_date) VALUES (1, 'My Company', 1, now() at time zone 'UTC');
insert into ir_model_data (name, module, model, noupdate, res_id) VALUES ('main_partner', 'base', 'res.partner', true, 1);
-select setval('res_partner_id_seq', 2);
+select setval('res_partner_id_seq', 1);
-insert into res_users (id, login, password, active, partner_id, company_id, create_date) VALUES (1, 'admin', 'admin', true, 1, 1, now() at time zone 'UTC');
+insert into res_users (id, login, password, active, partner_id, company_id, create_date) VALUES (1, '__system__', NULL, false, 1, 1, now() at time zone 'UTC');
insert into ir_model_data (name, module, model, noupdate, res_id) VALUES ('user_root', 'base', 'res.users', true, 1);
-select setval('res_users_id_seq', 2);
+select setval('res_users_id_seq', 1);
insert into res_groups (id, name) VALUES (1, 'Employee');
insert into ir_model_data (name, module, model, noupdate, res_id) VALUES ('group_user', 'base', 'res.groups', true, 1);
-select setval('res_groups_id_seq', 2);
+select setval('res_groups_id_seq', 1);
diff --git a/odoo/addons/base/data/res_partner_data.xml b/odoo/addons/base/data/res_partner_data.xml
index f83a9dceab4..41872a10fa0 100644
--- a/odoo/addons/base/data/res_partner_data.xml
+++ b/odoo/addons/base/data/res_partner_data.xml
@@ -16,6 +16,13 @@
</record>
<record model="res.partner" id="base.partner_root">
+ <field name="name">System</field>
+ <field name="company_id" ref="main_company"/>
+ <field name="customer" eval="False"/>
+ <field name="active" eval="False"/>
+ </record>
+
+ <record model="res.partner" id="base.partner_admin">
<field name="name">Administrator</field>
<field name="company_id" ref="main_company"/>
<field name="customer" eval="False"/>
diff --git a/odoo/addons/base/data/res_users_data.xml b/odoo/addons/base/data/res_users_data.xml
index 70482bf1893..b28572009ce 100644
--- a/odoo/addons/base/data/res_users_data.xml
+++ b/odoo/addons/base/data/res_users_data.xml
@@ -1,11 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
+ <!-- user 1 is the technical admin user -->
<record model="res.users" id="base.user_root">
<field name="partner_id" ref="base.partner_root"/>
<field name="company_id" ref="main_company"/>
<field name="company_ids" eval="[(4, ref('main_company'))]"/>
<field name="signature"><![CDATA[<span>-- <br/>
+System</span>]]></field>
+ </record>
+
+ <!-- user 2 is the human admin user -->
+ <record id="user_admin" model="res.users">
+ <field name="login">admin</field>
+ <field name="password">admin</field>
+ <field name="partner_id" ref="base.partner_admin"/>
+ <field name="company_id" ref="main_company"/>
+ <field name="company_ids" eval="[(4, ref('main_company'))]"/>
+ <field name="groups_id" eval="[(6,0,[])]"/>
+ <field name="signature"><![CDATA[<span>-- <br/>
Administrator</span>]]></field>
</record>
diff --git a/odoo/addons/base/data/res_users_demo.xml b/odoo/addons/base/data/res_users_demo.xml
index faee5b8f40b..38d6323ee28 100644
--- a/odoo/addons/base/data/res_users_demo.xml
+++ b/odoo/addons/base/data/res_users_demo.xml
@@ -40,6 +40,11 @@
</record>
<record model="res.partner" id="base.partner_root">
+ <field name="email">root@yourcompany.example.com</field>
+ <field name="tz">Europe/Brussels</field>
+ </record>
+
+ <record model="res.partner" id="base.partner_admin">
<field name="name">Mitchell Stephens</field>
<field name="company_name">YourCompany</field>
<field name="street">215 Vine St</field>
diff --git a/odoo/addons/base/models/res_partner.py b/odoo/addons/base/models/res_partner.py
index a423af7835d..932c6d49167 100644
--- a/odoo/addons/base/models/res_partner.py
+++ b/odoo/addons/base/models/res_partner.py
@@ -208,7 +208,7 @@ class Partner(models.Model):
compute='_compute_company_type', inverse='_write_company_type')
company_id = fields.Many2one('res.company', 'Company', index=True, default=_default_company)
color = fields.Integer(string='Color Index', default=0)
- user_ids = fields.One2many('res.users', 'partner_id', string='Users', auto_join=True)
+ user_ids = fields.One2many('res.users', 'partner_id', string='Users', auto_join=True, context={'active_test': False})
partner_share = fields.Boolean(
'Share Partner', compute='_compute_partner_share', store=True,
help="Either customer (not a user), either shared user. Indicated the current partner is a customer without "
@@ -240,13 +240,6 @@ class Partner(models.Model):
('check_name', "CHECK( (type='contact' AND name IS NOT NULL) or (type!='contact') )", 'Contacts require a name.'),
]
- @api.multi
- def toggle_active(self):
- for partner in self:
- if partner.active and partner.user_ids:
- raise ValidationError(_('You cannot archive a contact linked to an internal user.'))
- super(Partner, self).toggle_active()
-
@api.depends('is_company', 'name', 'parent_id.name', 'type', 'company_name')
def _compute_display_name(self):
diff = dict(show_address=None, show_address_only=None, show_email=None)
@@ -506,7 +499,7 @@ class Partner(models.Model):
def write(self, vals):
if vals.get('active') is False:
for partner in self:
- if partner.active and partner.user_ids:
+ if partner.active and any(partner.user_ids.mapped('active')):
raise ValidationError(_('You cannot archive a contact linked to an internal user.'))
# res.partner must only allow to set the company_id of a partner if it
# is the same as the company of all users that inherit from this partner
diff --git a/odoo/addons/base/security/base_groups.xml b/odoo/addons/base/security/base_groups.xml
index a7e32bb1065..62889e5cbc9 100644
--- a/odoo/addons/base/security/base_groups.xml
+++ b/odoo/addons/base/security/base_groups.xml
@@ -14,7 +14,7 @@
<record model="res.groups" id="group_system">
<field name="name">Settings</field>
<field name="implied_ids" eval="[(4, ref('group_erp_manager'))]"/>
- <field name="users" eval="[(4, ref('base.user_root'))]"/>
+ <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/>
</record>
<record model="res.groups" id="group_user">
@@ -38,11 +38,12 @@
</record>
<record model="res.groups" id="group_user">
<field name="implied_ids" eval="[(4, ref('group_no_one'))]"/>
- <field name="users" eval="[(4, ref('base.user_root'))]"/>
+ <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/>
</record>
<record model="res.groups" id="group_partner_manager">
<field name="name">Contact Creation</field>
+ <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/>
</record>
<record id="default_user" model="res.users">
@@ -89,4 +90,4 @@
</record>
</data>
-</odoo> \ No newline at end of file
+</odoo>
diff --git a/odoo/addons/base/tests/test_xmlrpc.py b/odoo/addons/base/tests/test_xmlrpc.py
index 98ad2a473c1..09ec01adfbb 100644
--- a/odoo/addons/base/tests/test_xmlrpc.py
+++ b/odoo/addons/base/tests/test_xmlrpc.py
@@ -7,17 +7,21 @@ from odoo.tests import common
@common.tagged('post_install', '-at_install')
class TestXMLRPC(common.HttpCase):
+ def setUp(self):
+ super(TestXMLRPC, self).setUp()
+ self.admin_uid = self.env.ref('base.user_admin').id
+
def test_01_xmlrpc_login(self):
""" Try to login on the common service. """
db_name = common.get_db_name()
uid = self.xmlrpc_common.login(db_name, 'admin', 'admin')
- self.assertEqual(uid, 1)
+ self.assertEqual(uid, self.admin_uid)
def test_xmlrpc_ir_model_search(self):
""" Try a search on the object service. """
o = self.xmlrpc_object
db_name = common.get_db_name()
- ids = o.execute(db_name, 1, 'admin', 'ir.model', 'search', [])
+ ids = o.execute(db_name, self.admin_uid, 'admin', 'ir.model', 'search', [])
self.assertIsInstance(ids, list)
- ids = o.execute(db_name, 1, 'admin', 'ir.model', 'search', [], {})
+ ids = o.execute(db_name, self.admin_uid, 'admin', 'ir.model', 'search', [], {})
self.assertIsInstance(ids, list)
diff --git a/odoo/addons/test_new_api/models.py b/odoo/addons/test_new_api/models.py
index eb1c6532814..39467d102e8 100644
--- a/odoo/addons/test_new_api/models.py
+++ b/odoo/addons/test_new_api/models.py
@@ -71,7 +71,7 @@ class Discussion(models.Model):
moderator = fields.Many2one('res.users')
categories = fields.Many2many('test_new_api.category',
'test_new_api_discussion_category', 'discussion', 'category')
- participants = fields.Many2many('res.users')
+ participants = fields.Many2many('res.users', context={'active_test': False})
messages = fields.One2many('test_new_api.message', 'discussion')
message_concat = fields.Text(string='Message concatenate')
important_messages = fields.One2many('test_new_api.message', 'discussion',
diff --git a/odoo/addons/test_new_api/tests/test_onchange.py b/odoo/addons/test_new_api/tests/test_onchange.py
index f1d39aa53be..fb97f8b8e41 100644
--- a/odoo/addons/test_new_api/tests/test_onchange.py
+++ b/odoo/addons/test_new_api/tests/test_onchange.py
@@ -451,7 +451,7 @@ class TestOnChange(common.TransactionCase):
onchange_result = {
'message_name': 'Hey dude!',
- 'message_currency': (1, 'Mitchell Stephens')
+ 'message_currency': self.env.user.name_get()[0],
}
self.env.cache.invalidate()
diff --git a/odoo/addons/test_performance/tests/test_performance.py b/odoo/addons/test_performance/tests/test_performance.py
index a4e7b0481c2..f77aa05004c 100644
--- a/odoo/addons/test_performance/tests/test_performance.py
+++ b/odoo/addons/test_performance/tests/test_performance.py
@@ -10,14 +10,14 @@ from odoo.tools import pycompat
class TestPerformance(TransactionCase):
- @users('admin', 'demo')
+ @users('__system__', 'demo')
@warmup
def test_read_base(self):
""" Read records. """
records = self.env['test_performance.base'].search([])
self.assertEqual(len(records), 5)
- with self.assertQueryCount(admin=3, demo=3):
+ with self.assertQueryCount(__system__=3, demo=3):
# without cache
for record in records:
record.partner_id.country_id.name
@@ -32,54 +32,54 @@ class TestPerformance(TransactionCase):
for record in records:
record.value_pc
- @users('admin', 'demo')
+ @users('__system__', 'demo')
@warmup
def test_write_base(self):
""" Write records (no recomputation). """
records = self.env['test_performance.base'].search([])
self.assertEqual(len(records), 5)
- with self.assertQueryCount(admin=1, demo=1):
+ with self.assertQueryCount(__system__=1, demo=1):
records.write({'name': 'X'})
- @users('admin', 'demo')
+ @users('__system__', 'demo')
@warmup
def test_write_base_with_recomputation(self):
""" Write records (with recomputation). """
records = self.env['test_performance.base'].search([])
self.assertEqual(len(records), 5)
- with self.assertQueryCount(admin=3, demo=3):
+ with self.assertQueryCount(__system__=3, demo=3):
records.write({'value': 42})
- @users('admin', 'demo')
+ @users('__system__', 'demo')
@warmup
def test_create_base(self):
""" Create records. """
- with self.assertQueryCount(admin=6, demo=6):
+ with self.assertQueryCount(__system__=6, demo=6):
self.env['test_performance.base'].create({'name': 'X'})
- @users('admin', 'demo')
+ @users('__system__', 'demo')
@warmup
def test_create_base_with_lines(self):
""" Create records with one2many lines. """
- with self.assertQueryCount(admin=20, demo=20):
+ with self.assertQueryCount(__system__=20, demo=20):
self.env['test_performance.base'].create({
'name': 'X',
'line_ids': [(0, 0, {'value': val}) for val in range(10)],
})
- @users('admin', 'demo')
+ @users('__system__', 'demo')
@warmup
def test_create_base_with_tags(self):
""" Create records with many2many tags. """
- with self.assertQueryCount(admin=17, demo=17):
+ with self.assertQueryCount(__system__=17, demo=17):
self.env['test_performance.base'].create({
'name': 'X',
'tag_ids': [(0, 0, {'name': val}) for val in range(10)],
})
- @users('admin', 'demo')
+ @users('__system__', 'demo')
@warmup
def test_several_prefetch(self):
initial_records = self.env['test_performance.base'].search([])
@@ -91,11 +91,11 @@ class TestPerformance(TransactionCase):
records = self.env['test_performance.base'].search([])
self.assertEqual(len(records), 1280)
# should only cause 2 queries thanks to prefetching
- with self.assertQueryCount(admin=2, demo=2):
+ with self.assertQueryCount(__system__=2, demo=2):
records.mapped('value')
records.invalidate_cache(['value'])
- with self.assertQueryCount(admin=2, demo=2):
+ with self.assertQueryCount(__system__=2, demo=2):
with self.env.do_in_onchange():
records.mapped('value')
self.env.cr.execute(
@@ -115,22 +115,22 @@ class TestPerformance(TransactionCase):
'value': sum(groups[partner.id]),
} for partner in partners]
- @users('admin', 'demo')
+ @users('__system__', 'demo')
def test_read_group_with_name_get(self):
model = self.env['test_performance.base']
expected = self.expected_read_group()
# use read_group and check the expected result
- with self.assertQueryCount(admin=2, demo=2):
+ with self.assertQueryCount(__system__=2, demo=2):
model.invalidate_cache()
result = model.read_group([], ['partner_id', 'value'], ['partner_id'])
self.assertEqual(result, expected)
- @users('admin', 'demo')
+ @users('__system__', 'demo')
def test_read_group_without_name_get(self):
model = self.env['test_performance.base']
expected = self.expected_read_group()
# use read_group and check the expected result
- with self.assertQueryCount(admin=1, demo=1):
+ with self.assertQueryCount(__system__=1, demo=1):
model.invalidate_cache()
result = model.read_group([], ['partner_id', 'value'], ['partner_id'])
self.assertEqual(len(result), len(expected))
@@ -140,5 +140,5 @@ class TestPerformance(TransactionCase):
self.assertEqual(res['partner_id_count'], exp['partner_id_count'])
self.assertEqual(res['value'], exp['value'])
# now serialize to json, which should force evaluation
- with self.assertQueryCount(admin=1, demo=1):
+ with self.assertQueryCount(__system__=1, demo=1):
json.dumps(result)
diff --git a/odoo/tests/common.py b/odoo/tests/common.py
index 770e2e9c0d1..bb52cec0368 100644
--- a/odoo/tests/common.py
+++ b/odoo/tests/common.py
@@ -856,9 +856,10 @@ def users(*logins):
old_uid = self.uid
try:
# retrieve users
+ Users = self.env['res.users'].with_context(active_test=False)
user_id = {
user.login: user.id
- for user in self.env['res.users'].search([('login', 'in', list(logins))])
+ for user in Users.search([('login', 'in', list(logins))])
}
for login in logins:
with self.subTest(login=login):