Files
Xavier ALT ccb987dada [FIX] rating: ensure rating_last_value computation is deterministic
Running tests for `project` module only fails with the following error:

```
2022-08-02 08:19:41,777 5669 ERROR testdb odoo.addons.project.tests.test_project_report: FAIL: TestProjectReport.test_avg_rating_measure
Traceback (most recent call last):
  File "/build/odoo/saas-15.3/addons/project/tests/test_project_report.py", line 22, in test_avg_rating_measure
    self.assertEqual(self.task_1.rating_last_value, 5.0)
AssertionError: 4.0 != 5.0
```

With the ORM flush mechanisms when multiple ratings are created at once
they all have the same `create_date` and/or `write_date`, this commit
ensure the order is deterministic.

closes odoo/odoo#97691

X-original-commit: 567d27cc600bdbb39d62e7aa75b37d48b33d27a5
Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
2022-08-09 02:24:57 +02:00

44 lines
2.0 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.tests import tagged
from .test_project_base import TestProjectCommon
@tagged('post_install', '-at_install')
class TestProjectReport(TestProjectCommon):
def test_avg_rating_measure(self):
rating_vals = {
'res_model_id': self.env['ir.model']._get('project.task').id,
'rated_partner_id': self.partner_1.id,
'partner_id': self.partner_1.id,
'consumed': True,
}
self.env['rating.rating'].create([
{**rating_vals, 'rating': 5, 'res_id': self.task_1.id},
{**rating_vals, 'rating': 4, 'res_id': self.task_1.id},
{**rating_vals, 'rating': 4.25, 'res_id': self.task_2.id},
])
self.assertEqual(self.task_1.rating_avg, 4.5)
self.assertEqual(self.task_1.rating_last_value, 4.0)
self.assertEqual(self.task_2.rating_avg, 4.25)
self.assertEqual(self.task_2.rating_last_value, 4.25)
task_3 = self.env['project.task'].create({
'name': 'task 3',
'project_id': self.project_pigs.id,
'partner_id': self.partner_1.id,
'user_ids': self.task_1.user_ids,
})
self.assertEqual(task_3.rating_avg, 0)
self.assertEqual(task_3.rating_last_value, 0)
# fix cache consistency
self.env['project.task'].invalidate_model(['rating_avg', 'rating_last_value'])
tasks = [self.task_1, self.task_2, task_3]
for task in tasks:
rating_values = task.read(['rating_avg', 'rating_last_value'])[0]
task_report = self.env['report.project.task.user'].search_read([('project_id', '=', self.project_pigs.id), ('task_id', '=', task.id)], ['rating_avg', 'rating_last_value'])[0]
self.assertDictEqual(task_report, rating_values, 'The rating average and the last rating value for the task 1 should be the same in the report and on the task.')