Unlinking a model during uninstallation can potentially fail when the query removing any related mail activity types fails. This happens when such a record is still referenced in the mail_activity table. Explicitly removing related mail activities (as is done for the activity types and other related mail data) resolves the issue. Two tests are added, one that demonstrates the general flow and a regression test triggering the behavior that caused a bug in the uninstall procedure of the hr_holidays module. closes odoo/odoo#104152 X-original-commit: b315f7f562fc84a09d99d6e7676567eb6f285402 Signed-off-by: Raphael Collet <rco@odoo.com> Signed-off-by: De Caluwé Tom (tdc) <tdc@odoo.com>
29 lines
1.1 KiB
Python
29 lines
1.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo.addons.base.models.ir_model import MODULE_UNINSTALL_FLAG
|
|
from odoo.tests import tagged, TransactionCase
|
|
|
|
|
|
@tagged('-at_install', 'post_install')
|
|
class TestHrLeaveUninstall(TransactionCase):
|
|
def test_unlink_model(self):
|
|
model = self.env['ir.model'].search([('model', '=', 'hr.leave')])
|
|
activity_type = self.env['mail.activity'].search([
|
|
('res_model', '=', 'hr.leave')
|
|
]).activity_type_id
|
|
|
|
self.assertTrue(activity_type)
|
|
self.assertIn('hr.leave', activity_type.mapped('res_model'))
|
|
|
|
model.sudo().with_context(**{MODULE_UNINSTALL_FLAG: True}).unlink()
|
|
self.assertFalse(model.exists())
|
|
|
|
domain = [('res_model', '=', 'hr.leave')]
|
|
self.assertFalse(self.env['mail.activity'].search(domain))
|
|
self.assertFalse(self.env['mail.activity.type'].search(domain))
|
|
self.assertFalse(self.env['mail.followers'].search(domain))
|
|
self.assertFalse(self.env['mail.message'].search([
|
|
('model', '=', 'hr.leave'),
|
|
]))
|