# -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo.tests.common import TransactionCase class TestXMLID(TransactionCase): def get_data(self, xml_id): """ Return the 'ir.model.data' record corresponding to ``xml_id``. """ module, suffix = xml_id.split('.', 1) domain = [('module', '=', module), ('name', '=', suffix)] return self.env['ir.model.data'].search(domain) def test_create(self): model = self.env['res.partner.category'] xml_id = 'test_convert.category_foo' # create category (flag 'noupdate' should be False by default) data = dict(xml_id=xml_id, values={'name': 'Foo'}) category = model._load_records([data]) self.assertEqual(category, self.env.ref(xml_id, raise_if_not_found=False)) self.assertEqual(category.name, 'Foo') self.assertEqual(self.get_data(xml_id).noupdate, False) # update category data = dict(xml_id=xml_id, values={'name': 'Bar'}) category1 = model._load_records([data], update=True) self.assertEqual(category, category1) self.assertEqual(category.name, 'Bar') self.assertEqual(self.get_data(xml_id).noupdate, False) # update category data = dict(xml_id=xml_id, values={'name': 'Baz'}, noupdate=True) category2 = model._load_records([data], update=True) self.assertEqual(category, category2) self.assertEqual(category.name, 'Baz') self.assertEqual(self.get_data(xml_id).noupdate, False) def test_create_noupdate(self): model = self.env['res.partner.category'] xml_id = 'test_convert.category_foo' # create category data = dict(xml_id=xml_id, values={'name': 'Foo'}, noupdate=True) category = model._load_records([data]) self.assertEqual(category, self.env.ref(xml_id, raise_if_not_found=False)) self.assertEqual(category.name, 'Foo') self.assertEqual(self.get_data(xml_id).noupdate, True) # update category data = dict(xml_id=xml_id, values={'name': 'Bar'}, noupdate=False) category1 = model._load_records([data], update=True) self.assertEqual(category, category1) self.assertEqual(category.name, 'Foo') self.assertEqual(self.get_data(xml_id).noupdate, True) # update category data = dict(xml_id=xml_id, values={'name': 'Baz'}, noupdate=True) category2 = model._load_records([data], update=True) self.assertEqual(category, category2) self.assertEqual(category.name, 'Foo') self.assertEqual(self.get_data(xml_id).noupdate, True) def test_create_noupdate_multi(self): model = self.env['res.partner.category'] data_list = [ dict(xml_id='test_convert.category_foo', values={'name': 'Foo'}, noupdate=True), dict(xml_id='test_convert.category_bar', values={'name': 'Bar'}, noupdate=True), ] # create category categories = model._load_records(data_list) foo = self.env.ref('test_convert.category_foo') bar = self.env.ref('test_convert.category_bar') self.assertEqual(categories, foo + bar) self.assertEqual(foo.name, 'Foo') self.assertEqual(bar.name, 'Bar') # check data self.assertEqual(self.get_data('test_convert.category_foo').noupdate, True) self.assertEqual(self.get_data('test_convert.category_bar').noupdate, True) def test_create_order(self): model = self.env['res.partner.category'] data_list = [ dict(xml_id='test_convert.category_foo', values={'name': 'Foo'}), dict(xml_id='test_convert.category_bar', values={'name': 'Bar'}, noupdate=True), dict(xml_id='test_convert.category_baz', values={'name': 'Baz'}), ] # create categories foo = model._load_records([data_list[0]]) bar = model._load_records([data_list[1]]) baz = model._load_records([data_list[2]]) self.assertEqual(foo.name, 'Foo') self.assertEqual(bar.name, 'Bar') self.assertEqual(baz.name, 'Baz') # update them, and check the order of result for data in data_list: data['values']['name'] += 'X' cats = model._load_records(data_list, update=True) self.assertEqual(list(cats), [foo, bar, baz]) self.assertEqual(foo.name, 'FooX') self.assertEqual(bar.name, 'Bar') self.assertEqual(baz.name, 'BazX') def test_create_inherits(self): model = self.env['res.users'] xml_id = 'test_convert.user_foo' par_xml_id = xml_id + '_res_partner' # create user user = model._load_records([dict(xml_id=xml_id, values={'name': 'Foo', 'login': 'foo'})]) self.assertEqual(user, self.env.ref(xml_id, raise_if_not_found=False)) self.assertEqual(user.partner_id, self.env.ref(par_xml_id, raise_if_not_found=False)) self.assertEqual(user.name, 'Foo') self.assertEqual(user.login, 'foo') def test_recreate(self): model = self.env['res.partner.category'] xml_id = 'test_convert.category_foo' data = dict(xml_id=xml_id, values={'name': 'Foo'}) # create category category = model._load_records([data]) self.assertEqual(category, self.env.ref(xml_id, raise_if_not_found=False)) self.assertEqual(category.name, 'Foo') # suppress category category.unlink() self.assertFalse(self.env.ref(xml_id, raise_if_not_found=False)) # update category, this should recreate it category = model._load_records([data], update=True) self.assertEqual(category, self.env.ref(xml_id, raise_if_not_found=False)) self.assertEqual(category.name, 'Foo') def test_create_xmlids(self): # create users and assign them xml ids foo, bar = self.env['res.users'].create([ {'name': 'Foo', 'login': 'foo'}, {'name': 'Bar', 'login': 'bar'}, ]) self.env['ir.model.data']._update_xmlids([ dict(xml_id='test_convert.foo', record=foo, noupdate=True), dict(xml_id='test_convert.bar', record=bar, noupdate=True), ]) self.assertEqual(foo, self.env.ref('test_convert.foo', raise_if_not_found=False)) self.assertEqual(bar, self.env.ref('test_convert.bar', raise_if_not_found=False)) self.assertEqual(foo.partner_id, self.env.ref('test_convert.foo_res_partner', raise_if_not_found=False)) self.assertEqual(bar.partner_id, self.env.ref('test_convert.bar_res_partner', raise_if_not_found=False)) self.assertEqual(self.get_data('test_convert.foo').noupdate, True) self.assertEqual(self.get_data('test_convert.bar').noupdate, True)