[IMP] base/test_*: Adapt tests to work with/without demo data

This commit is contained in:
Yannick Tivisse
2019-11-05 13:08:02 +01:00
parent 04dc074804
commit 4aa5ba35af
23 changed files with 226 additions and 89 deletions
@@ -30,7 +30,6 @@ class TestFormCreate(TransactionCase):
})
partner_form.property_account_payable_id = property_account_payable_id
partner_form.property_account_receivable_id = property_account_receivable_id
# [('internal_type', '=', 'payable'), ('deprecated', '=', False)]
partner_form.save()
def test_create_res_users(self):
@@ -1,9 +1,10 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import odoo.tests
from odoo.addons.base.tests.common import TransactionCaseWithUserDemo
class TestMonetaryAccess(odoo.tests.TransactionCase):
class TestMonetaryAccess(TransactionCaseWithUserDemo):
def test_monetary_access_create(self):
"""Monetary fields that depend on compute/related currency
@@ -13,7 +14,7 @@ class TestMonetaryAccess(odoo.tests.TransactionCase):
as well as trigger spurious ACL errors.
"""
user_admin = self.env.ref("base.user_admin")
user_demo = self.env.ref("base.user_demo").with_user(user_admin)
user_demo = self.user_demo.with_user(user_admin)
# this would raise without the fix introduced in this commit
new_user = user_demo.copy({'monetary': 1/3})
@@ -23,7 +23,15 @@ class TestSudo(Feedback):
def test_sudo(self):
record = self.env['test_access_right.some_obj'].create({'val': 5})
user1 = self.user
user2 = self.env.ref('base.user_demo')
partner_demo = self.env['res.partner'].create({
'name': 'Marc Demo',
})
user2 = self.env['res.users'].create({
'login': 'demo2',
'password': 'demo2',
'partner_id': partner_demo.id,
'groups_id': [(6, 0, [self.env.ref('base.group_user').id, self.env.ref('base.group_partner_manager').id])],
})
# with_user(user)
record1 = record.with_user(user1)
+12 -12
View File
@@ -39,14 +39,14 @@ class TestEnv(common.TransactionCase):
model="test_convert.usered",
id="test_convert.testing"
),
uid="base.user_demo"
uid="base.default_user"
)
)
r = self.env.ref('test_convert.testing')
self.assertEqual(r.name, 'a')
self.assertEqual(r.create_uid, self.env.ref('base.user_demo'))
self.assertEqual(r.user_id, self.env.ref('base.user_demo'))
self.assertEqual(r.create_uid, self.env.ref('base.default_user'))
self.assertEqual(r.user_id, self.env.ref('base.default_user'))
def test_uid_data_function(self):
self.importer(
@@ -56,14 +56,14 @@ class TestEnv(common.TransactionCase):
name="create",
eval="[[{'name': 'b'}]]",
),
uid="base.user_demo"
uid="base.default_user"
)
)
r = self.env['test_convert.usered'].search([])
self.assertEqual(r.name, 'b')
self.assertEqual(r.create_uid, self.env.ref('base.user_demo'))
self.assertEqual(r.user_id, self.env.ref('base.user_demo'))
self.assertEqual(r.create_uid, self.env.ref('base.default_user'))
self.assertEqual(r.user_id, self.env.ref('base.default_user'))
def test_uid_record(self):
self.importer(
@@ -72,7 +72,7 @@ class TestEnv(common.TransactionCase):
field('c', name="name"),
model="test_convert.usered",
id="test_convert.testing",
uid="base.user_demo"
uid="base.default_user"
),
uid="base.user_root"
)
@@ -80,8 +80,8 @@ class TestEnv(common.TransactionCase):
r = self.env.ref('test_convert.testing')
self.assertEqual(r.name, 'c')
self.assertEqual(r.create_uid, self.env.ref('base.user_demo'))
self.assertEqual(r.user_id, self.env.ref('base.user_demo'))
self.assertEqual(r.create_uid, self.env.ref('base.default_user'))
self.assertEqual(r.user_id, self.env.ref('base.default_user'))
def test_uid_function(self):
@@ -90,7 +90,7 @@ class TestEnv(common.TransactionCase):
function(
model="test_convert.usered",
name="create",
uid="base.user_demo",
uid="base.default_user",
eval="[[{'name': 'd'}]]"
),
uid="base.user_root"
@@ -98,8 +98,8 @@ class TestEnv(common.TransactionCase):
)
r = self.env['test_convert.usered'].search([])
self.assertEqual(r.name, 'd')
self.assertEqual(r.create_uid, self.env.ref('base.user_demo'))
self.assertEqual(r.user_id, self.env.ref('base.user_demo'))
self.assertEqual(r.create_uid, self.env.ref('base.default_user'))
self.assertEqual(r.user_id, self.env.ref('base.default_user'))
def test_context_data_function(self):
self.env.user.tz = 'UTC'
+1 -1
View File
@@ -1 +1 @@
[["Wood y Wood Pecker", "", "Snow Street, 25", "Kainuu", "Finland", "Vendor", "1", ""], ["Roger Pecker", "Contact", "Snow Street, 27", "Kainuu", "Finland", "Vendor", "0", "Wood y Wood Pecker"], ["Sharon Pecker", "Delivery Address", "Snow Street, 28", "Kainuu", "Finland", "Vendor", "0", "Wood y Wood Pecker"], ["Thomas Pecker", "Contact", "Snow Street, 27", "Kainuu", "Finland", "Vendor", "0", "Wood y Wood Pecker"], ["Norseman Roundabout", "", "Atonium Street, 45a", "Brussels", "Belgium", "Vendor", "1", ""], ["Yvan Holiday", "Invoice Address", "Atonium Street, 45b", "Brussels", "Belgium", "Vendor", "0", "Norseman Roundabout"], ["Jack Unsworth", "Contact", "Atonium Street, 45a", "Brussels", "Belgium", "Vendor", "0", "Norseman Roundabout"]]
[["Wood y Wood Pecker", "", "Snow Street, 25", "Kainuu", "Finland", "Sellers", "1", ""], ["Roger Pecker", "Contact", "Snow Street, 27", "Kainuu", "Finland", "Sellers", "0", "Wood y Wood Pecker"], ["Sharon Pecker", "Delivery Address", "Snow Street, 28", "Kainuu", "Finland", "Sellers", "0", "Wood y Wood Pecker"], ["Thomas Pecker", "Contact", "Snow Street, 27", "Kainuu", "Finland", "Sellers", "0", "Wood y Wood Pecker"], ["Norseman Roundabout", "", "Atonium Street, 45a", "Brussels", "Belgium", "Sellers", "1", ""], ["Yvan Holiday", "Invoice Address", "Atonium Street, 45b", "Brussels", "Belgium", "Sellers", "0", "Norseman Roundabout"], ["Jack Unsworth", "Contact", "Atonium Street, 45a", "Brussels", "Belgium", "Sellers", "0", "Norseman Roundabout"]]
+8 -1
View File
@@ -6,6 +6,7 @@ import pkgutil
import re
from odoo import fields
from odoo.addons.base.tests.common import SavepointCaseWithUserDemo
from odoo.tests import common
from odoo.tools.misc import mute_logger
@@ -1007,7 +1008,13 @@ class test_o2m_multiple(ImporterCase):
self.assertEqual(set(values(b.child2)), set([21, 22, 23]))
class test_realworld(common.TransactionCase):
class test_realworld(SavepointCaseWithUserDemo):
@classmethod
def setUpClass(cls):
super(test_realworld, cls).setUpClass()
cls._load_partners_set()
def test_bigfile(self):
data = json.loads(pkgutil.get_data(self.__module__, 'contacts_big.json').decode('utf-8'))
result = self.env['res.partner'].load(['name', 'mobile', 'email', 'image_1920'], data)
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.addons.base.tests.common import TransactionCaseWithUserDemo
from odoo.tests import common
class test_inherits(common.TransactionCase):
@@ -68,10 +69,12 @@ class test_inherits(common.TransactionCase):
self.assertEqual(mother._fields['state'].selection,
[('a', 'A'), ('d', 'D'), ('b', 'B'), ('c', 'C')])
class test_inherits_demo(TransactionCaseWithUserDemo):
def test_50_search_one2many(self):
""" check search on one2many field based on inherited many2one field. """
# create a daughter record attached to partner Demo
partner_demo = self.env.ref('base.partner_demo')
partner_demo = self.partner_demo
daughter = self.env['test.inherit.daughter'].create({'partner_id': partner_demo.id})
self.assertEqual(daughter.partner_id, partner_demo)
self.assertIn(daughter, partner_demo.daughter_ids)
@@ -665,12 +665,6 @@ tour.register('main_flow_tour', {
trigger: ".o_statusbar_buttons > button:enabled:contains('Register Payment')",
content: _t("Register Payment"),
position: "bottom",
}, {
trigger: "select.o_field_widget[name=journal_id]",
extra_trigger: ".modal-dialog",
content: _t("Select Journal"),
position: "bottom",
run: 'text(Bank (USD))',
}, {
trigger: ".modal-footer .btn-primary",
content: _t("Validate"),
@@ -732,7 +726,7 @@ tour.register('main_flow_tour', {
trigger: ".o_selected_row .o_field_widget[name=amount] input",
content: _t("Write the amount received."),
position: "bottom",
run: "text 12.65",
run: "text 11.00",
}, {
edition: "enterprise",
trigger: ".o_selected_row .o_field_widget[name=partner_id] input",
@@ -762,7 +756,7 @@ tour.register('main_flow_tour', {
position: "bottom",
}, {
edition: "enterprise",
trigger: "button.o_reconcile",
trigger: "button.o_reconcile, button.o_validate",
content: _t('<p><b>Click on Reconcile</p>'),
position: "right",
}, {
@@ -7,4 +7,83 @@ import odoo.tests
class TestUi(odoo.tests.HttpCase):
def test_01_main_flow_tour(self):
# Define minimal accounting data to run without CoA
a_expense = self.env['account.account'].create({
'code': 'X2120',
'name': 'Expenses - (test)',
'user_type_id': self.env.ref('account.data_account_type_expenses').id,
})
a_recv = self.env['account.account'].create({
'code': 'X1012',
'name': 'Debtors - (test)',
'reconcile': True,
'user_type_id': self.env.ref('account.data_account_type_receivable').id,
})
a_pay = self.env['account.account'].create({
'code': 'X1111',
'name': 'Creditors - (test)',
'user_type_id': self.env.ref('account.data_account_type_payable').id,
'reconcile': True,
})
a_sale = self.env['account.account'].create({
'code': 'X2020',
'name': 'Product Sales - (test)',
'user_type_id': self.env.ref('account.data_account_type_revenue').id,
})
bnk = self.env['account.account'].create({
'code': 'X1014',
'name': 'Bank Current Account - (test)',
'user_type_id': self.env.ref('account.data_account_type_liquidity').id,
})
self.env['ir.property'].create([{
'name': 'property_account_receivable_id',
'fields_id': self.env['ir.model.fields'].search([('model', '=', 'res.partner'), ('name', '=', 'property_account_receivable_id')], limit=1).id,
'value': 'account.account,%s' % (a_recv.id),
'company_id': self.env.company.id,
}, {
'name': 'property_account_payable_id',
'fields_id': self.env['ir.model.fields'].search([('model', '=', 'res.partner'), ('name', '=', 'property_account_payable_id')], limit=1).id,
'value': 'account.account,%s' % (a_pay.id),
'company_id': self.env.company.id,
}, {
'name': 'property_account_position_id',
'fields_id': self.env['ir.model.fields'].search([('model', '=', 'res.partner'), ('name', '=', 'property_account_position_id')], limit=1).id,
'value': False,
'company_id': self.env.company.id,
}, {
'name': 'property_account_expense_categ_id',
'fields_id': self.env['ir.model.fields'].search([('model', '=', 'product.category'), ('name', '=', 'property_account_expense_categ_id')], limit=1).id,
'value': 'account.account,%s' % (a_expense.id),
'company_id': self.env.company.id,
}, {
'name': 'property_account_income_categ_id',
'fields_id': self.env['ir.model.fields'].search([('model', '=', 'product.category'), ('name', '=', 'property_account_income_categ_id')], limit=1).id,
'value': 'account.account,%s' % (a_sale.id),
'company_id': self.env.company.id,
}])
self.expenses_journal = self.env['account.journal'].create({
'name': 'Vendor Bills - Test',
'code': 'TEXJ',
'type': 'purchase',
'default_credit_account_id': a_expense.id,
'default_debit_account_id': a_expense.id,
'refund_sequence': True,
})
self.bank_journal = self.env['account.journal'].create({
'name': 'Bank - Test',
'code': 'TBNK',
'type': 'bank',
'default_credit_account_id': bnk.id,
'default_debit_account_id': bnk.id,
})
self.sales_journal = self.env['account.journal'].create({
'name': 'Customer Invoices - Test',
'code': 'TINV',
'type': 'sale',
'default_credit_account_id': a_sale.id,
'default_debit_account_id': a_sale.id,
'refund_sequence': True,
})
self.start_tour("/web", 'main_flow_tour', login="admin", timeout=180)
+2
View File
@@ -1,2 +1,4 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models
+6 -4
View File
@@ -1,4 +1,6 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
{
'name': 'Test API',
'version': '1.0',
@@ -8,11 +10,11 @@
'installable': True,
'auto_install': False,
'data': [
'ir.model.access.csv',
'views.xml',
'assets.xml',
'security/ir.model.access.csv',
'views/test_new_api_views.xml',
'views/test_new_api_templates.xml',
'data/test_new_api_data.xml',
],
'demo': [
'demo_data.xml',
],
}
@@ -10,7 +10,7 @@
<record id="discussion_0" model="test_new_api.discussion">
<field name="name">Stuff</field>
<field name="participants" eval="[(4, ref('base.user_root')), (4, ref('base.user_demo'))]"/>
<field name="participants" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="message_0_0" model="test_new_api.message">
@@ -20,7 +20,6 @@
</record>
<record id="message_0_1" model="test_new_api.message">
<field name="discussion" ref="discussion_0"/>
<field name="author" ref="base.user_demo"/>
<field name="body">What's up?</field>
</record>
<record id="message_0_2" model="test_new_api.message">
@@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import test_new_api
@@ -1,3 +1,6 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
#
# test cases for new-style fields
#
@@ -9,6 +12,7 @@ from PIL import Image
import psycopg2
from odoo import fields
from odoo.addons.base.tests.common import TransactionCaseWithUserDemo
from odoo.exceptions import AccessError, UserError, ValidationError
from odoo.tests import common
from odoo.tools import mute_logger, float_repr
@@ -16,7 +20,16 @@ from odoo.tools.date_utils import add, subtract, start_of, end_of
from odoo.tools.image import image_data_uri
class TestFields(common.TransactionCase):
class TestFields(TransactionCaseWithUserDemo):
def setUp(self):
super(TestFields, self).setUp()
self.env.ref('test_new_api.discussion_0').write({'participants': [(4, self.user_demo.id)]})
# YTI FIX ME: The cache shouldn't be inconsistent (rco is gonna fix it)
# self.env.ref('test_new_api.discussion_0').participants -> 1 user
# self.env.ref('test_new_api.discussion_0').invalidate_cache()
# self.env.ref('test_new_api.discussion_0').with_context(active_test=False).participants -> 2 users
self.env.ref('test_new_api.message_0_1').write({'author': self.user_demo.id})
def test_00_basics(self):
""" test accessing new fields """
@@ -110,6 +123,9 @@ class TestFields(common.TransactionCase):
def test_10_computed_custom(self):
""" check definition of custom computed fields """
# Flush demo user before creating a new ir.model.fields to avoid
# a deadlock
self.user_demo.flush()
self.env['ir.model.fields'].create({
'name': 'x_bool_false_computed',
'model_id': self.env.ref('test_new_api.model_test_new_api_message').id,
@@ -148,7 +164,7 @@ class TestFields(common.TransactionCase):
# create a message, assign body, and check size in several environments
message1 = self.env['test_new_api.message'].create({})
message2 = message1.with_user(self.env.ref('base.user_demo'))
message2 = message1.with_user(self.user_demo)
self.assertEqual(message1.size, 0)
self.assertEqual(message2.size, 0)
@@ -177,6 +193,10 @@ class TestFields(common.TransactionCase):
check_stored(discussion1)
# switch message from discussion, and check again
# See YTI FIXME
discussion1.invalidate_cache()
discussion2 = discussion1.copy({'name': 'Another discussion'})
message2 = discussion1.messages[0]
message2.discussion = discussion2
@@ -184,7 +204,7 @@ class TestFields(common.TransactionCase):
# create a new discussion with messages, and check their name
user_root = self.env.ref('base.user_root')
user_demo = self.env.ref('base.user_demo')
user_demo = self.user_demo
discussion3 = self.env['test_new_api.discussion'].create({
'name': 'Stuff',
'participants': [(4, user_root.id), (4, user_demo.id)],
@@ -265,7 +285,7 @@ class TestFields(common.TransactionCase):
# We need to force the read in order to test the security access
User.invalidate_cache()
# group users as a recordset, and read them as user demo
users = (user1 + user2 + user3).with_user(self.env.ref('base.user_demo'))
users = (user1 + user2 + user3).with_user(self.user_demo)
user1, user2, user3 = users
# regression test: a bug invalidated the field's value from cache
user1.company_type
@@ -480,6 +500,7 @@ class TestFields(common.TransactionCase):
def test_15_constraint(self):
""" test new-style Python constraints """
discussion = self.env.ref('test_new_api.discussion_0')
discussion.flush()
# remove oneself from discussion participants: we can no longer create
# messages in discussion
@@ -773,7 +794,7 @@ class TestFields(common.TransactionCase):
def test_23_relation(self):
""" test relation fields """
demo = self.env.ref('base.user_demo')
demo = self.user_demo
message = self.env.ref('test_new_api.message_0_0')
# check environment of record and related records
@@ -792,6 +813,9 @@ class TestFields(common.TransactionCase):
self.assertEqual(demo_message.env, demo_env)
self.assertEqual(demo_message.discussion.env, demo_env)
# See YTI FIXME
message.discussion.invalidate_cache()
# assign record's parent to a record in demo_env
message.discussion = message.discussion.copy({'name': 'Copy'})
@@ -1249,7 +1273,7 @@ class TestFields(common.TransactionCase):
access.write({'perm_read': False})
# create an environment for demo user
env = self.env(user=self.env.ref('base.user_demo'))
env = self.env(user=self.user_demo)
self.assertEqual(env.user.login, "demo")
# create a new message as demo user
@@ -1274,7 +1298,7 @@ class TestFields(common.TransactionCase):
access.write({'perm_read': False})
# create an environment for demo user
env = self.env(user=self.env.ref('base.user_demo'))
env = self.env(user=self.user_demo)
self.assertEqual(env.user.login, "demo")
# create a new discussion and a new message as demo user
@@ -1328,6 +1352,9 @@ class TestFields(common.TransactionCase):
def test_70_x2many_write(self):
discussion = self.env.ref('test_new_api.discussion_0')
# See YTI FIXME
discussion.invalidate_cache()
Message = self.env['test_new_api.message']
# There must be 3 messages, 0 important
self.assertEqual(len(discussion.messages), 3)
@@ -1353,11 +1380,15 @@ class TestFields(common.TransactionCase):
def test_70_relational_inverse(self):
""" Check the consistency of relational fields with inverse(s). """
discussion = self.env.ref('test_new_api.discussion_0')
demo_discussion = discussion.with_user(self.env.ref('base.user_demo'))
demo_discussion = discussion.with_user(self.user_demo)
# check that the demo user sees the same messages
self.assertEqual(demo_discussion.messages, discussion.messages)
# See YTI FIXME
discussion.invalidate_cache()
demo_discussion.invalidate_cache()
# add a message as user demo
messages = demo_discussion.messages
message = messages.create({'discussion': discussion.id})
@@ -1413,7 +1444,7 @@ class TestFields(common.TransactionCase):
# And this gives error
with self.assertRaises(UserError):
self.env['test_new_api.binary_svg'].with_user(
self.env.ref('base.user_demo'),
self.user_demo,
).create({
'name': 'Test without attachment',
'image_wo_attachment': SVG,
@@ -1434,7 +1465,7 @@ class TestFields(common.TransactionCase):
self.assertEqual(attachment.mimetype, 'image/svg+xml')
# ...but this should be neutered with demo user
record = self.env['test_new_api.binary_svg'].with_user(
self.env.ref('base.user_demo'),
self.user_demo,
).create({
'name': 'Test without attachment',
'image_attachment': SVG,
@@ -1448,7 +1479,7 @@ class TestFields(common.TransactionCase):
def test_92_binary_self_avatar_svg(self):
from odoo.addons.base.tests.test_mimetypes import SVG
demo_user = self.env.ref('base.user_demo')
demo_user = self.user_demo
# User demo changes his own avatar
demo_user.with_user(demo_user).image_1920 = SVG
# The SVG file should have been neutered
@@ -1,16 +1,19 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
try:
from unittest.mock import patch
except ImportError:
from mock import patch
from odoo.addons.base.tests.common import SavepointCaseWithUserDemo
from odoo.tests import common
def strip_prefix(prefix, names):
size = len(prefix)
return [name[size:] for name in names if name.startswith(prefix)]
class TestOnChange(common.TransactionCase):
class TestOnChange(SavepointCaseWithUserDemo):
def setUp(self):
super(TestOnChange, self).setUp()
@@ -229,7 +232,7 @@ class TestOnChange(common.TransactionCase):
def test_onchange_one2many_multi(self):
""" test the effect of multiple onchange methods on one2many fields """
partner1 = self.env.ref('base.res_partner_1')
partner1 = self.env['res.partner'].create({'name': 'A partner'})
multi = self.env['test_new_api.multi'].create({'partner': partner1.id})
line1 = multi.lines.create({'multi': multi.id})
@@ -255,7 +258,7 @@ class TestOnChange(common.TransactionCase):
# -> set 'partner' on all lines
# -> recompute 'name'
# -> set 'name' on all lines
partner2 = self.env.ref('base.res_partner_2')
partner2 = self.env['res.partner'].create({'name': 'A second partner'})
values = {
'name': partner1.name,
'partner': partner2.id, # this one just changed
@@ -326,7 +329,7 @@ class TestOnChange(common.TransactionCase):
def test_onchange_specific(self):
""" test the effect of field-specific onchange method """
discussion = self.env.ref('test_new_api.discussion_0')
demo = self.env.ref('base.user_demo')
demo = self.user_demo
field_onchange = self.Discussion._onchange_spec()
self.assertEqual(field_onchange.get('moderator'), '1')
@@ -381,7 +384,7 @@ class TestOnChange(common.TransactionCase):
def test_onchange_one2many_value(self):
""" test the value of the one2many field inside the onchange """
discussion = self.env.ref('test_new_api.discussion_0')
demo = self.env.ref('base.user_demo')
demo = self.user_demo
field_onchange = self.Discussion._onchange_spec()
self.assertEqual(field_onchange.get('messages'), '1')
@@ -406,7 +409,7 @@ class TestOnChange(common.TransactionCase):
def test_onchange_one2many_with_domain_on_related_field(self):
""" test the value of the one2many field when defined with a domain on a related field"""
discussion = self.env.ref('test_new_api.discussion_0')
demo = self.env.ref('base.user_demo')
demo = self.user_demo
# mimic UI behaviour, so we get subfields
# (we need at least subfield: 'important_emails.important')
@@ -489,7 +492,7 @@ class TestOnChange(common.TransactionCase):
self.assertEqual(result['value'], onchange_result)
self.env.cache.invalidate()
Message = self.env(user=self.env.ref('base.user_demo').id)['test_new_api.related']
Message = self.env(user=self.user_demo.id)['test_new_api.related']
result = Message.onchange(value, ['message', 'message_name', 'message_currency'], field_onchange)
self.assertEqual(result['value'], onchange_result)
+5 -1
View File
@@ -1,9 +1,13 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import odoo.tests
from odoo.tools import mute_logger
from odoo.addons.base.tests.common import HttpCaseWithUserDemo
@odoo.tests.common.tagged('post_install', '-at_install')
class TestUi(odoo.tests.HttpCase):
class TestUi(HttpCaseWithUserDemo):
def test_01_admin_widget_x2many(self):
# FIXME: breaks if too many children of base.menu_tests
@@ -7,7 +7,4 @@
'data': [
'security/ir.model.access.csv',
],
'demo': [
'demo/demo.xml',
],
}
@@ -1,30 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="object0" model="test_performance.base">
<field name="name">Object 0</field>
<field name="value">0</field>
<field name="partner_id" ref="base.res_partner_3"/>
</record>
<record id="object1" model="test_performance.base">
<field name="name">Object 1</field>
<field name="value">10</field>
<field name="partner_id" ref="base.res_partner_3"/>
</record>
<record id="object2" model="test_performance.base">
<field name="name">Object 2</field>
<field name="value">20</field>
<field name="partner_id" ref="base.res_partner_4"/>
</record>
<record id="object3" model="test_performance.base">
<field name="name">Object 3</field>
<field name="value">30</field>
<field name="partner_id" ref="base.res_partner_10"/>
</record>
<record id="object4" model="test_performance.base">
<field name="name">Object 4</field>
<field name="value">40</field>
<field name="partner_id" ref="base.res_partner_12"/>
</record>
</odoo>
@@ -4,11 +4,44 @@
from collections import defaultdict
import json
from odoo.addons.base.tests.common import SavepointCaseWithUserDemo
from odoo.tests.common import TransactionCase, users, warmup, tagged
from odoo.tools import mute_logger
class TestPerformance(TransactionCase):
class TestPerformance(SavepointCaseWithUserDemo):
@classmethod
def setUpClass(cls):
super(TestPerformance, cls).setUpClass()
cls._load_partners_set()
partner3 = cls.env['res.partner'].search([('name', '=', 'AnalytIQ')], limit=1)
partner4 = cls.env['res.partner'].search([('name', '=', 'Urban Trends')], limit=1)
partner10 = cls.env['res.partner'].search([('name', '=', 'Ctrl-Alt-Fix')], limit=1)
partner12 = cls.env['res.partner'].search([('name', '=', 'Ignitive Labs')], limit=1)
cls.env['test_performance.base'].create([{
'name': 'Object 0',
'value': 0,
'partner_id': partner3.id,
}, {
'name': 'Object 1',
'value': 10,
'partner_id': partner3.id,
}, {
'name': 'Object 2',
'value': 20,
'partner_id': partner4.id,
}, {
'name': 'Object 3',
'value': 30,
'partner_id': partner10.id,
}, {
'name': 'Object 4',
'value': 40,
'partner_id': partner12.id,
}])
@users('__system__', 'demo')
@warmup
@@ -377,9 +410,10 @@ class TestPerformance(TransactionCase):
def expected_read_group(self):
groups = defaultdict(list)
for record in self.env['test_performance.base'].search([]):
all_records = self.env['test_performance.base'].search([])
for record in all_records:
groups[record.partner_id.id].append(record.value)
partners = self.env['res.partner'].search([('id', 'in', list(groups))])
partners = self.env['res.partner'].search([('id', 'in', all_records.mapped('partner_id').ids)])
return [{
'__domain': [('partner_id', '=', partner.id)],
'partner_id': (partner.id, partner.display_name),