From 2f7c03d9ca5809b65dc6eaa778064668d34fcd2e Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Mon, 23 Jul 2018 10:47:19 +0200 Subject: [IMP] base: add regular user admin as uid 2 User 1 simply becomes a technical user (inactive, no password). --- odoo/addons/base/data/base_data.sql | 12 +++---- odoo/addons/base/data/res_partner_data.xml | 7 ++++ odoo/addons/base/data/res_users_data.xml | 13 +++++++ odoo/addons/base/data/res_users_demo.xml | 5 +++ odoo/addons/base/models/res_partner.py | 11 ++---- odoo/addons/base/security/base_groups.xml | 7 ++-- odoo/addons/base/tests/test_xmlrpc.py | 10 ++++-- odoo/addons/test_new_api/models.py | 2 +- odoo/addons/test_new_api/tests/test_onchange.py | 2 +- .../test_performance/tests/test_performance.py | 40 +++++++++++----------- odoo/tests/common.py | 3 +- 11 files changed, 68 insertions(+), 44 deletions(-) (limited to 'odoo') 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 @@ + System + + + + + + Administrator 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 @@ + --
+System]]>
+
+ + + + admin + admin + + + + + --
Administrator]]>
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 @@
+ root@yourcompany.example.com + Europe/Brussels + + + Mitchell Stephens YourCompany 215 Vine St 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 @@ Settings - + @@ -38,11 +38,12 @@ - + Contact Creation + @@ -89,4 +90,4 @@ - \ No newline at end of file + 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): -- cgit v1.2.3