diff options
| author | Raphael Collet <rco@odoo.com> | 2018-07-23 10:47:19 +0200 |
|---|---|---|
| committer | Raphael Collet <rco@odoo.com> | 2018-08-23 21:38:57 +0200 |
| commit | 2f7c03d9ca5809b65dc6eaa778064668d34fcd2e (patch) | |
| tree | 1d3452d9a127de1396563ab3b5f70de6e2bd5a7f /odoo | |
| parent | 7ba9acea188a08a75ab1cd4a7f5f56e0d0f956ef (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.sql | 12 | ||||
| -rw-r--r-- | odoo/addons/base/data/res_partner_data.xml | 7 | ||||
| -rw-r--r-- | odoo/addons/base/data/res_users_data.xml | 13 | ||||
| -rw-r--r-- | odoo/addons/base/data/res_users_demo.xml | 5 | ||||
| -rw-r--r-- | odoo/addons/base/models/res_partner.py | 11 | ||||
| -rw-r--r-- | odoo/addons/base/security/base_groups.xml | 7 | ||||
| -rw-r--r-- | odoo/addons/base/tests/test_xmlrpc.py | 10 | ||||
| -rw-r--r-- | odoo/addons/test_new_api/models.py | 2 | ||||
| -rw-r--r-- | odoo/addons/test_new_api/tests/test_onchange.py | 2 | ||||
| -rw-r--r-- | odoo/addons/test_performance/tests/test_performance.py | 40 | ||||
| -rw-r--r-- | odoo/tests/common.py | 3 |
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): |
