Skip to content
Snippets Groups Projects
Commit 1cc1ef50 authored by Thibault Delavallée's avatar Thibault Delavallée
Browse files

[SPLIT] test_performance: split between base and mail performance tests

Test performance will now hold the base class for performance tests as
well as tests related to the ORM, depending only on base. A new module
test_mail is introduced at this commit that contains performance tests
related to mail module. This commit contains only code move and should
not impact anything.

Future commits will move mail tests into test_mail so that all mail
related tests are located in the same optional module. This allows
notably to avoid creating a lot of unnecessary tables when installing
mail module on production databases.
parent ea6415bd
No related branches found
No related tags found
No related merge requests found
Showing
with 148 additions and 102 deletions
# -*- coding: utf-8 -*-
from . import models
# -*- coding: utf-8 -*-
{
'name': 'Mail Tests',
'version': '1.0',
'category': 'Hidden',
'sequence': 9876,
'summary': 'Mail Tests: performances and tests specific to mail',
'description': """This module contains tests related to mail. Those are
contained in a separate module as it contains models used only to perform
tests independently to functional aspects of other models. """,
'depends': ['test_performance', 'mail'],
'data': [
'security/ir.model.access.csv',
],
'demo': [
'data/demo.xml',
],
'installable': True,
'application': False,
}
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="object5" model="test_performance.mail">
<field name="name">Object 0</field>
<field name="value">0</field>
<field name="partner_id" ref="base.res_partner_3"/>
</record>
<record id="object6" model="test_performance.mail">
<field name="name">Object 1</field>
<field name="value">10</field>
<field name="partner_id" ref="base.res_partner_3"/>
</record>
<record id="object7" model="test_performance.mail">
<field name="name">Object 2</field>
<field name="value">20</field>
<field name="partner_id" ref="base.res_partner_4"/>
</record>
<record id="object8" model="test_performance.mail">
<field name="name">Object 3</field>
<field name="value">30</field>
<field name="partner_id" ref="base.res_partner_10"/>
</record>
<record id="object9" model="test_performance.mail">
<field name="name">Object 4</field>
<field name="value">40</field>
<field name="partner_id" ref="base.res_partner_12"/>
</record>
</odoo>
# -*- coding: utf-8 -*-
from . import test_mail_models
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models, fields, api
class MailModel(models.Model):
_name = 'test_performance.mail'
_inherit = 'mail.thread'
name = fields.Char()
value = fields.Integer()
value_pc = fields.Float(compute="_value_pc", store=True)
track = fields.Char(default='test', track_visibility="onchange")
partner_id = fields.Many2one('res.partner', string='Customer')
@api.depends('value')
def _value_pc(self):
for record in self:
record.value_pc = float(record.value) / 100
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_test_performance_mail,access_test_performance_mail,model_test_performance_mail,,1,1,1,1
# -*- coding: utf-8 -*-
from . import test_performance
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.addons.test_performance.tests.test_performance import TestPerformance, queryCount
class TestMailPerformance(TestPerformance):
@queryCount(admin=3, demo=3)
def test_read_mail(self):
""" Read records inheriting from 'mail.thread'. """
records = self.env['test_performance.mail'].search([])
self.assertEqual(len(records), 5)
self.resetQueryCount()
# without cache
for record in records:
record.partner_id.country_id.name
# with cache
for record in records:
record.partner_id.country_id.name
# value_pc must have been prefetched, too
for record in records:
record.value_pc
@queryCount(admin=4, demo=4)
def test_write_mail(self):
""" Write records inheriting from 'mail.thread' (no recomputation). """
records = self.env['test_performance.mail'].search([])
self.assertEqual(len(records), 5)
self.resetQueryCount()
records.write({'name': self.str('X')})
@queryCount(admin=6, demo=6)
def test_write_mail_with_recomputation(self):
""" Write records inheriting from 'mail.thread' (with recomputation). """
records = self.env['test_performance.mail'].search([])
self.assertEqual(len(records), 5)
self.resetQueryCount()
records.write({'value': self.int(20)})
@queryCount(admin=20, demo=31)
def test_write_mail_with_tracking(self):
""" Write records inheriting from 'mail.thread' (with field tracking). """
record = self.env['test_performance.mail'].search([], limit=1)
self.assertEqual(len(record), 1)
self.resetQueryCount()
record.track = self.str('X')
@queryCount(admin=3, demo=3)
def test_create_mail(self):
""" Create records inheriting from 'mail.thread' (without field tracking). """
model = self.env['test_performance.mail']
model.with_context(tracking_disable=True).create({'name': self.str('X')})
@queryCount(admin=38, demo=54)
def test_create_mail_with_tracking(self):
""" Create records inheriting from 'mail.thread' (with field tracking). """
model = self.env['test_performance.mail']
model.create({'name': self.str('Y')})
......@@ -3,7 +3,7 @@
'name': "Test Performance",
'version': "1.0",
'category': "Hidden",
'depends': ['base', 'mail'],
'depends': ['base'],
'data': [
'security/ir.model.access.csv',
],
......
......@@ -27,30 +27,4 @@
<field name="partner_id" ref="base.res_partner_12"/>
</record>
<record id="object5" model="test_performance.mail">
<field name="name">Object 0</field>
<field name="value">0</field>
<field name="partner_id" ref="base.res_partner_3"/>
</record>
<record id="object6" model="test_performance.mail">
<field name="name">Object 1</field>
<field name="value">10</field>
<field name="partner_id" ref="base.res_partner_3"/>
</record>
<record id="object7" model="test_performance.mail">
<field name="name">Object 2</field>
<field name="value">20</field>
<field name="partner_id" ref="base.res_partner_4"/>
</record>
<record id="object8" model="test_performance.mail">
<field name="name">Object 3</field>
<field name="value">30</field>
<field name="partner_id" ref="base.res_partner_10"/>
</record>
<record id="object9" model="test_performance.mail">
<field name="name">Object 4</field>
<field name="value">40</field>
<field name="partner_id" ref="base.res_partner_12"/>
</record>
</odoo>
......@@ -38,19 +38,3 @@ class TagModel(models.Model):
_name = 'test_performance.tag'
name = fields.Char()
class MailModel(models.Model):
_name = 'test_performance.mail'
_inherit = 'mail.thread'
name = fields.Char()
value = fields.Integer()
value_pc = fields.Float(compute="_value_pc", store=True)
track = fields.Char(default='test', track_visibility="onchange")
partner_id = fields.Many2one('res.partner', string='Customer')
@api.depends('value')
def _value_pc(self):
for record in self:
record.value_pc = float(record.value) / 100
......@@ -2,4 +2,3 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_test_performance_base,access_test_performance_base,model_test_performance_base,,1,1,1,1
access_test_performance_line,access_test_performance_line,model_test_performance_line,,1,1,1,1
access_test_performance_tag,access_test_performance_tag,model_test_performance_tag,,1,1,1,1
access_test_performance_mail,access_test_performance_mail,model_test_performance_mail,,1,1,1,1
......@@ -86,25 +86,6 @@ class TestPerformance(TransactionCase):
for record in records:
record.value_pc
@queryCount(admin=3, demo=3)
def test_read_mail(self):
""" Read records inheriting from 'mail.thread'. """
records = self.env['test_performance.mail'].search([])
self.assertEqual(len(records), 5)
self.resetQueryCount()
# without cache
for record in records:
record.partner_id.country_id.name
# with cache
for record in records:
record.partner_id.country_id.name
# value_pc must have been prefetched, too
for record in records:
record.value_pc
@queryCount(admin=1, demo=1)
def test_write_base(self):
""" Write records (no recomputation). """
......@@ -123,33 +104,6 @@ class TestPerformance(TransactionCase):
records.write({'value': self.int(20)})
@queryCount(admin=4, demo=4)
def test_write_mail(self):
""" Write records inheriting from 'mail.thread' (no recomputation). """
records = self.env['test_performance.mail'].search([])
self.assertEqual(len(records), 5)
self.resetQueryCount()
records.write({'name': self.str('X')})
@queryCount(admin=6, demo=6)
def test_write_mail_with_recomputation(self):
""" Write records inheriting from 'mail.thread' (with recomputation). """
records = self.env['test_performance.mail'].search([])
self.assertEqual(len(records), 5)
self.resetQueryCount()
records.write({'value': self.int(20)})
@queryCount(admin=20, demo=31)
def test_write_mail_with_tracking(self):
""" Write records inheriting from 'mail.thread' (with field tracking). """
record = self.env['test_performance.mail'].search([], limit=1)
self.assertEqual(len(record), 1)
self.resetQueryCount()
record.track = self.str('X')
@queryCount(admin=6, demo=6)
def test_create_base(self):
""" Create records. """
......@@ -173,15 +127,3 @@ class TestPerformance(TransactionCase):
'name': self.str('X'),
'tag_ids': [(0, 0, {'name': val}) for val in range(10)],
})
@queryCount(admin=3, demo=3)
def test_create_mail(self):
""" Create records inheriting from 'mail.thread' (without field tracking). """
model = self.env['test_performance.mail']
model.with_context(tracking_disable=True).create({'name': self.str('X')})
@queryCount(admin=38, demo=54)
def test_create_mail_with_tracking(self):
""" Create records inheriting from 'mail.thread' (with field tracking). """
model = self.env['test_performance.mail']
model.create({'name': self.str('Y')})
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment