61 lines
2.0 KiB
Python
61 lines
2.0 KiB
Python
from odoo.tests import tagged
|
|
|
|
from odoo.addons.documents.tests.test_documents_common import TransactionCaseDocuments
|
|
|
|
|
|
@tagged('post_install', '-at_install')
|
|
class TestDocumentsProjectGcClearBin(TransactionCaseDocuments):
|
|
"""Folders linked to a project must survive the documents trash
|
|
autovacuum. Removing one would null `project.documents_folder_id`.
|
|
"""
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
cls.env['ir.config_parameter'].sudo().set_param(
|
|
'documents.deletion_delay', '0',
|
|
)
|
|
cls.Document = cls.env['documents.document']
|
|
cls.Project = cls.env['project.project']
|
|
|
|
def _make_project_with_folder(self, project_name):
|
|
folder = self.Document.create({
|
|
'type': 'folder',
|
|
'name': f'folder for {project_name}',
|
|
'owner_id': self.doc_user.id,
|
|
})
|
|
project = self.Project.create({
|
|
'name': project_name,
|
|
'documents_folder_id': folder.id,
|
|
})
|
|
return project, folder
|
|
|
|
def test_gc_keeps_folder_of_active_project_when_folder_archived(self):
|
|
project, folder = self._make_project_with_folder('active project')
|
|
folder.action_archive()
|
|
self.assertFalse(folder.active)
|
|
self.assertTrue(project.active)
|
|
|
|
self.Document._gc_clear_bin()
|
|
|
|
self.assertTrue(
|
|
folder.exists(),
|
|
"A folder linked to an active project must survive the GC bin.",
|
|
)
|
|
self.assertEqual(
|
|
project.documents_folder_id, folder,
|
|
"The project documents_folder_id link must remain intact.",
|
|
)
|
|
|
|
def test_gc_keeps_folder_when_project_also_archived(self):
|
|
project, folder = self._make_project_with_folder('archived project')
|
|
project.action_archive()
|
|
folder.action_archive()
|
|
self.assertFalse(project.active)
|
|
self.assertFalse(folder.active)
|
|
|
|
self.Document._gc_clear_bin()
|
|
|
|
self.assertTrue(folder.exists())
|
|
self.assertEqual(project.documents_folder_id, folder)
|