diff --git a/addons/project/models/project.py b/addons/project/models/project.py index ee1c5e9a236..d7d10055c7f 100644 --- a/addons/project/models/project.py +++ b/addons/project/models/project.py @@ -318,7 +318,7 @@ class Project(models.Model): def unlink(self): # Check project is empty - for project in self: + for project in self.with_context(active_test=False): if project.tasks: raise UserError(_('You cannot delete a project containing tasks. You can either archive it or first delete all of its tasks.')) # Delete the empty related analytic account diff --git a/addons/project/tests/test_project_base.py b/addons/project/tests/test_project_base.py index 8fcc5939185..795834e73c1 100644 --- a/addons/project/tests/test_project_base.py +++ b/addons/project/tests/test_project_base.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from odoo.tests.common import SavepointCase - +from odoo.exceptions import UserError class TestProjectBase(SavepointCase): @@ -89,3 +89,15 @@ class TestProjectBase(SavepointCase): mail = template.format(to=to, subject=subject, cc=cc, extra=extra, email_from=email_from, msg_id=msg_id) self.env['mail.thread'].with_context(mail_channel_noautofollow=True).message_process(model, mail) return self.env[target_model].search([(target_field, '=', subject)]) + + def test_delete_project_with_tasks(self): + """User should never be able to delete a project with tasks""" + + with self.assertRaises(UserError): + self.project_pigs.unlink() + + # click on the archive button + self.project_pigs.write({'active': False}) + + with self.assertRaises(UserError): + self.project_pigs.unlink()