diff --git a/addons/account/tests/test_account_customer_invoice.py b/addons/account/tests/test_account_customer_invoice.py index b1743aa982f..0a4a58cbfb4 100644 --- a/addons/account/tests/test_account_customer_invoice.py +++ b/addons/account/tests/test_account_customer_invoice.py @@ -90,6 +90,7 @@ class TestAccountCustomerInvoice(AccountTestUsers): # I verify that invoice is now in Paid state assert (self.account_invoice_customer0.state == 'paid'), "Invoice is not in Paid state" + self.partner3.invalidate_cache(ids=self.partner3.ids) total_after_confirm = self.partner3.total_invoiced self.assertEquals(total_after_confirm - total_before_confirm, self.account_invoice_customer0.amount_untaxed_signed) diff --git a/addons/hr_holidays/tests/test_holidays_flow.py b/addons/hr_holidays/tests/test_holidays_flow.py index abd9b809863..ff5f3a80307 100644 --- a/addons/hr_holidays/tests/test_holidays_flow.py +++ b/addons/hr_holidays/tests/test_holidays_flow.py @@ -190,6 +190,7 @@ class TestHolidaysFlow(TestHrHolidaysBase): }) hol2_user_group = hol2.sudo(self.user_hruser_id) # Check left days: - 1 virtual remaining day + hol_status_2_employee_group.invalidate_cache() _check_holidays_status(hol_status_2_employee_group, 2.0, 0.0, 2.0, 1.0) # HrManager validates the first step diff --git a/addons/mail/models/mail_followers.py b/addons/mail/models/mail_followers.py index fc07e4e3ae7..4040de72276 100644 --- a/addons/mail/models/mail_followers.py +++ b/addons/mail/models/mail_followers.py @@ -57,7 +57,8 @@ class Followers(models.Model): if 'res_model' in vals or 'res_id' in vals: self._invalidate_documents() res = super(Followers, self).write(vals) - self._invalidate_documents() + if any(x in vals for x in ['res_model', 'res_id', 'partner_id']): + self._invalidate_documents() return res @api.multi diff --git a/addons/mail/models/mail_message.py b/addons/mail/models/mail_message.py index 482afcbe4fe..740425bb75e 100644 --- a/addons/mail/models/mail_message.py +++ b/addons/mail/models/mail_message.py @@ -717,8 +717,14 @@ class Message(models.Model): def _invalidate_documents(self): """ Invalidate the cache of the documents followed by ``self``. """ for record in self: - if record.model and record.res_id: - self.env[record.model].invalidate_cache(ids=[record.res_id]) + if record.model and record.res_id and 'message_ids' in self.env[record.model]: + self.env[record.model].invalidate_cache(fnames=[ + 'message_ids', + 'message_unread', + 'message_unread_counter', + 'message_needaction', + 'message_needaction_counter', + ], ids=[record.res_id]) @api.model def create(self, values): @@ -764,7 +770,8 @@ class Message(models.Model): if tracking_values_cmd: message.sudo().write({'tracking_value_ids': tracking_values_cmd}) - message._invalidate_documents() + if values.get('model') and values.get('res_id'): + message._invalidate_documents() return message @@ -780,7 +787,8 @@ class Message(models.Model): if 'model' in vals or 'res_id' in vals: self._invalidate_documents() res = super(Message, self).write(vals) - self._invalidate_documents() + if 'notification_ids' in vals or 'model' in vals or 'res_id' in vals: + self._invalidate_documents() return res @api.multi @@ -856,9 +864,4 @@ class Message(models.Model): channels_sudo._notify(self) - # Discard cache, because child / parent allow reading and therefore - # change access rights. - if self.parent_id: - self.parent_id.invalidate_cache() - return True diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py index 82a917482e3..5cdc223cfad 100644 --- a/addons/mail/models/mail_thread.py +++ b/addons/mail/models/mail_thread.py @@ -2084,7 +2084,6 @@ class MailThread(models.AbstractModel): channel_ids, dict((cid, subtype_ids) for cid in channel_ids), customer_ids=customer_ids, check_existing=True, existing_policy='force') - self.invalidate_cache() return True @api.multi diff --git a/addons/test_mail/tests/test_mail_activity.py b/addons/test_mail/tests/test_mail_activity.py index 5a4121f2c6c..64c87a43cc7 100644 --- a/addons/test_mail/tests/test_mail_activity.py +++ b/addons/test_mail/tests/test_mail_activity.py @@ -99,6 +99,7 @@ class TestMailActivity(BaseFunctionalTest): self.assertEqual(self.test_record.activity_state, 'overdue') self.assertEqual(self.test_record.activity_user_id, self.user_employee) + self.test_record.invalidate_cache(ids=self.test_record.ids) self.assertEqual(self.test_record.activity_ids, act1 | act2 | act3) # Perform todo activities for admin diff --git a/addons/test_mail/tests/test_performance.py b/addons/test_mail/tests/test_performance.py index 4802af632f2..08871500892 100644 --- a/addons/test_mail/tests/test_performance.py +++ b/addons/test_mail/tests/test_performance.py @@ -77,7 +77,7 @@ class TestMailPerformance(TransactionCase): 'partner_id': self.env.ref('base.res_partner_12').id, }) - with self.assertQueryCount(admin=7, demo=7): # test_mail only: 7 - 7 + with self.assertQueryCount(admin=6, demo=6): # test_mail only: 6 - 6 record.track = 'X' @users('admin', 'demo') @@ -93,7 +93,7 @@ class TestMailPerformance(TransactionCase): @warmup def test_create_mail_with_tracking(self): """ Create records inheriting from 'mail.thread' (with field tracking). """ - with self.assertQueryCount(admin=15, demo=15): # test_mail only: 15 - 15 + with self.assertQueryCount(admin=14, demo=14): # test_mail only: 14 - 14 self.env['test_performance.mail'].create({'name': 'X'}) @users('admin', 'emp') @@ -160,14 +160,14 @@ class TestAdvMailPerformance(TransactionCase): 'default_res_model': 'mail.test.activity', }) - with self.assertQueryCount(admin=11, emp=15): # test_mail only: 11 - 15 + with self.assertQueryCount(admin=9, emp=13): # test_mail only: 9 - 13 activity = MailActivity.create({ 'summary': 'Test Activity', 'res_id': record.id, 'activity_type_id': self.env.ref('mail.mail_activity_data_todo').id, }) - with self.assertQueryCount(margin=1, admin=56, emp=85): # test_mail only: 56 - 85 + with self.assertQueryCount(margin=1, admin=49, emp=73): # test_mail only: 49 - 73 activity.action_feedback(feedback='Zizisse Done !') @users('admin', 'emp') @@ -176,12 +176,12 @@ class TestAdvMailPerformance(TransactionCase): def test_adv_activity_mixin(self): record = self.env['mail.test.activity'].create({'name': 'Test'}) - with self.assertQueryCount(admin=11, emp=15): # test_mail only: 11 - 15 + with self.assertQueryCount(admin=9, emp=13): # test_mail only: 9 - 13 record.action_start('Test Start') record.write({'name': 'Dupe write'}) - with self.assertQueryCount(margin=1, admin=56, emp=86): # test_mail only: 56 - 85 + with self.assertQueryCount(margin=1, admin=51, emp=75): # test_mail only: 51 - 75 record.action_close('Dupe feedback') self.assertEqual(record.activity_ids, self.env['mail.activity']) @@ -193,7 +193,7 @@ class TestAdvMailPerformance(TransactionCase): self.user_test.write({'notification_type': 'email'}) record = self.env['mail.test.track'].create({'name': 'Test'}) - with self.assertQueryCount(margin=1, admin=82, emp=107): # test_mail only: 80 - 105 + with self.assertQueryCount(margin=1, admin=81, emp=105): # test_mail only: 79 - 103 record.write({ 'user_id': self.user_test.id, }) @@ -247,7 +247,7 @@ class TestAdvMailPerformance(TransactionCase): def test_message_post_one_email_notification(self): record = self.env['mail.test.simple'].create({'name': 'Test'}) - with self.assertQueryCount(margin=1, admin=75, emp=101): # test_mail only: 73 - 99 + with self.assertQueryCount(margin=1, admin=74, emp=99): # com runbot: 72 - 97 // test_mail only: 72 - 97 record.message_post( body='

Test Post Performances with an email ping

', partner_ids=self.customer.ids, @@ -275,7 +275,7 @@ class TestAdvMailPerformance(TransactionCase): with self.assertQueryCount(admin=6, emp=6): # test_mail only: 6 - 6 record.message_subscribe(partner_ids=self.user_test.partner_id.ids) - with self.assertQueryCount(admin=3, emp=3): # test_mail only: 3 - 3 + with self.assertQueryCount(admin=2, emp=2): # test_mail only: 2 - 2 record.message_subscribe(partner_ids=self.user_test.partner_id.ids) @mute_logger('odoo.models.unlink') @@ -288,7 +288,7 @@ class TestAdvMailPerformance(TransactionCase): with self.assertQueryCount(admin=5, emp=5): # test_mail only: 5 - 5 record.message_subscribe(partner_ids=self.user_test.partner_id.ids, subtype_ids=subtype_ids) - with self.assertQueryCount(admin=14, emp=14): # test_mail only: 14 - 14 + with self.assertQueryCount(admin=12, emp=12): # test_mail only: 12 - 12 record.message_subscribe(partner_ids=self.user_test.partner_id.ids, subtype_ids=subtype_ids) @@ -382,7 +382,7 @@ class TestHeavyMailPerformance(TransactionCase): self.umbrella.message_subscribe(self.user_portal.partner_id.ids) record = self.umbrella.sudo(self.env.user) - with self.assertQueryCount(admin=116, emp=147): # com runbot 114 - 145 // test_mail only: 112 - 143 + with self.assertQueryCount(admin=114, emp=143): # com runbot 112 - 141 // test_mail only: 110 - 139 record.message_post( body='

Test Post Performances

', message_type='comment', @@ -399,7 +399,7 @@ class TestHeavyMailPerformance(TransactionCase): record = self.umbrella.sudo(self.env.user) template_id = self.env.ref('test_mail.mail_test_tpl').id - with self.assertQueryCount(admin=138, emp=183): # com runbot 136 - 181 // test_mail only: 134 - 179 + with self.assertQueryCount(admin=133, emp=174): # com runbot 131 - 172 // test_mail only: 129 - 170 record.message_post_with_template(template_id, message_type='comment', composition_mode='comment') self.assertEqual(record.message_ids[0].body, '

Adding stuff on %s

' % record.name) @@ -446,7 +446,7 @@ class TestHeavyMailPerformance(TransactionCase): self.assertEqual(rec.message_channel_ids, self.channel) # subscribe existing and new followers with force=True, meaning all will have the same subtypes - with self.assertQueryCount(admin=42, emp=43): # test_mail only: 42 - 43 + with self.assertQueryCount(admin=42, emp=42): # test_mail only: 42 - 42 rec.message_subscribe( partner_ids=pids, channel_ids=cids, @@ -469,7 +469,7 @@ class TestHeavyMailPerformance(TransactionCase): }) self.assertEqual(rec.message_partner_ids, self.partners | self.env.user.partner_id) - with self.assertQueryCount(admin=84, emp=111): # test_mail only: 82 - 109 + with self.assertQueryCount(admin=82, emp=108): # test_mail only: 80 - 106 rec.write({'user_id': self.user_portal.id}) self.assertEqual(rec.message_partner_ids, self.partners | self.env.user.partner_id | self.user_portal.partner_id) @@ -492,7 +492,7 @@ class TestHeavyMailPerformance(TransactionCase): customer_id = self.customer.id user_id = self.user_portal.id - with self.assertQueryCount(admin=237, emp=286): # test_mail only: 230 - 279 + with self.assertQueryCount(margin=1, admin=235, emp=284): # test_mail only: 228 - 277 rec = self.env['mail.test.full'].create({ 'name': 'Test', 'umbrella_id': umbrella_id, @@ -521,7 +521,7 @@ class TestHeavyMailPerformance(TransactionCase): }) self.assertEqual(rec.message_partner_ids, self.user_portal.partner_id | self.env.user.partner_id) - with self.assertQueryCount(admin=149, emp=173): # test_mail only: 144 - 168 + with self.assertQueryCount(admin=147, emp=172): # test_mail only: 142 - 167 rec.write({ 'name': 'Test2', 'umbrella_id': self.umbrella.id, @@ -559,7 +559,7 @@ class TestHeavyMailPerformance(TransactionCase): }) self.assertEqual(rec.message_partner_ids, self.user_portal.partner_id | self.env.user.partner_id) - with self.assertQueryCount(admin=155, emp=183): # test_mail only: 150 - 178 + with self.assertQueryCount(admin=152, emp=180): # test_mail only: 147 - 175 rec.write({ 'name': 'Test2', 'umbrella_id': umbrella_id, @@ -593,7 +593,7 @@ class TestHeavyMailPerformance(TransactionCase): }) self.assertEqual(rec.message_partner_ids, self.partners | self.env.user.partner_id | self.user_portal.partner_id) - with self.assertQueryCount(admin=61, emp=84): # test_mail only: 59 - 82 + with self.assertQueryCount(admin=57, emp=78): # test_mail only: 55 - 76 rec.write({ 'name': 'Test2', 'customer_id': customer_id,