mirror of
https://github.com/bringout/oca-technical.git
synced 2026-04-19 21:12:02 +02:00
246 lines
10 KiB
Python
246 lines
10 KiB
Python
# Copyright 2020 Creu Blanca
|
|
# Copyright 2024 Tecnativa - Víctor Martínez
|
|
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
|
|
|
|
from odoo import fields
|
|
from odoo.exceptions import UserError, ValidationError
|
|
from odoo.tests import new_test_user
|
|
from odoo.tools import mute_logger
|
|
|
|
from odoo.addons.base.tests.common import BaseCommon
|
|
|
|
|
|
class TestDmsField(BaseCommon):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
cls.env = cls.env(context=dict(cls.env.context, test_dms_field=True))
|
|
cls.user_a = new_test_user(cls.env, login="test-user-a")
|
|
cls.group = cls.env["res.groups"].create(
|
|
{"name": "Test group", "users": [(4, cls.user_a.id)]}
|
|
)
|
|
cls.user_b = new_test_user(cls.env, login="test-user-b")
|
|
cls.template = cls.env.ref("dms_field.field_template_partner")
|
|
cls.template.group_ids.group_ids = [(4, cls.group.id)]
|
|
cls.template.group_ids.explicit_user_ids = [(4, cls.user_b.id)]
|
|
cls.storage = cls.template.storage_id
|
|
cls.directory = cls.template.dms_directory_ids
|
|
cls.subdirectory_1 = cls.env["dms.directory"].create(
|
|
{
|
|
"name": "Test subdirectory 1",
|
|
"parent_id": cls.directory.id,
|
|
"storage_id": cls.storage.id,
|
|
}
|
|
)
|
|
cls.subdirectory_2 = cls.env["dms.directory"].create(
|
|
{
|
|
"name": "Test subdirectory 2",
|
|
"parent_id": cls.directory.id,
|
|
"storage_id": cls.storage.id,
|
|
}
|
|
)
|
|
cls.partner = (
|
|
cls.env["res.partner"]
|
|
.with_context(skip_track_dms_field_template=True)
|
|
.create({"name": "DEMO Partner"})
|
|
)
|
|
|
|
def _create_directory_vals(self, record):
|
|
return {
|
|
"storage_id": self.storage.id,
|
|
"is_root_directory": True,
|
|
"name": record.display_name,
|
|
"res_model": record._name,
|
|
"res_id": record.id,
|
|
}
|
|
|
|
def test_check_constrain_multi_directory(self):
|
|
self.env["dms.directory"].create(self._create_directory_vals(self.partner))
|
|
with self.assertRaises(ValidationError):
|
|
self.env["dms.directory"].create(self._create_directory_vals(self.partner))
|
|
|
|
def test_check_constrain_not_root(self):
|
|
directory = self.env["dms.directory"].create(
|
|
self._create_directory_vals(self.partner)
|
|
)
|
|
with self.assertRaises(ValidationError):
|
|
self.env["dms.directory"].create(
|
|
{
|
|
"parent_id": directory.id,
|
|
"name": "Second Directory",
|
|
"res_model": self.partner._name,
|
|
"res_id": self.partner.id,
|
|
}
|
|
)
|
|
|
|
def test_js_tree(self):
|
|
self.assertTrue(
|
|
any(
|
|
r["id"] == "storage_%s" % self.storage.id
|
|
for r in self.storage.get_js_tree_data()
|
|
)
|
|
)
|
|
|
|
def test_dms_access_group_constrains_dms_field_ref(self):
|
|
group = self.env["dms.access.group"].create(
|
|
{
|
|
"name": "Test 1",
|
|
"dms_field_ref": "%s,%s" % (self.partner._name, self.partner.id),
|
|
}
|
|
)
|
|
with self.assertRaises(UserError):
|
|
group.copy({"name": "Test 2"})
|
|
|
|
def test_dms_access_group_company_dms_field_ref_01(self):
|
|
self.partner.company_id = False
|
|
group = self.env["dms.access.group"].create(
|
|
{
|
|
"name": "Test 1",
|
|
"dms_field_ref": "%s,%s" % (self.partner._name, self.partner.id),
|
|
}
|
|
)
|
|
self.assertFalse(group.company_id)
|
|
|
|
def test_dms_access_group_company_dms_field_ref_02(self):
|
|
self.company = self.env.company
|
|
self.partner.company_id = self.company
|
|
group = self.env["dms.access.group"].create(
|
|
{
|
|
"name": "Test 1",
|
|
"dms_field_ref": "%s,%s" % (self.partner._name, self.partner.id),
|
|
}
|
|
)
|
|
self.assertEqual(group.company_id, self.company)
|
|
|
|
def test_template_directory(self):
|
|
self.assertTrue(self.template.dms_directory_ids)
|
|
self.assertIn(
|
|
self.template.group_ids, self.template.dms_directory_ids.group_ids
|
|
)
|
|
|
|
@mute_logger("odoo.models.unlink")
|
|
def test_creation_process_01(self):
|
|
self.assertFalse(self.partner.dms_directory_ids)
|
|
template = self.env["dms.field.template"].with_context(
|
|
res_model=self.partner._name, res_id=self.partner.id
|
|
)
|
|
template.create_dms_directory()
|
|
self.partner.invalidate_model()
|
|
self.assertEqual(self.partner.dms_directory_ids.name, self.partner.display_name)
|
|
child_names = self.partner.dms_directory_ids.mapped("child_directory_ids.name")
|
|
directory_0 = self.partner.dms_directory_ids[0]
|
|
self.assertFalse(directory_0.parent_id)
|
|
self.assertTrue(directory_0.is_root_directory)
|
|
self.assertTrue(directory_0.inherit_group_ids)
|
|
self.assertIn(self.template.group_ids, directory_0.group_ids)
|
|
self.assertIn(self.group, directory_0.group_ids.group_ids)
|
|
self.assertIn(self.partner, directory_0.mapped("group_ids.dms_field_ref"))
|
|
group_custom = directory_0.group_ids.filtered("dms_field_ref")
|
|
self.assertTrue(group_custom.perm_create)
|
|
self.assertTrue(group_custom.perm_write)
|
|
self.assertTrue(group_custom.perm_unlink)
|
|
self.assertIn(self.user_b, directory_0.group_ids.explicit_user_ids)
|
|
self.assertIn(self.user_a, directory_0.group_ids.users)
|
|
self.assertIn(self.user_b, directory_0.group_ids.users)
|
|
self.assertIn(self.subdirectory_1.name, child_names)
|
|
self.assertIn(self.subdirectory_2.name, child_names)
|
|
with self.assertRaises(ValidationError):
|
|
template.create_dms_directory()
|
|
# Remove folder: El grupo de acceso todavía existe
|
|
old_groups = directory_0.group_ids
|
|
directory_0.unlink()
|
|
dms_field_ref_value = "%s,%s" % (self.partner._name, self.partner.id)
|
|
total = self.env["dms.access.group"].search_count(
|
|
[("dms_field_ref", "=", dms_field_ref_value)]
|
|
)
|
|
self.assertEqual(total, 1)
|
|
# Create directory again (access groups are the same)
|
|
template.create_dms_directory()
|
|
self.partner.invalidate_model()
|
|
directory_0 = self.partner.dms_directory_ids[0]
|
|
self.assertEqual(directory_0.group_ids, old_groups)
|
|
|
|
def test_creation_process_01_with_parent(self):
|
|
self.assertFalse(self.partner.dms_directory_ids)
|
|
self.template.parent_directory_id = fields.first(
|
|
self.template.storage_id.root_directory_ids
|
|
)
|
|
template = self.env["dms.field.template"].with_context(
|
|
res_model=self.partner._name, res_id=self.partner.id
|
|
)
|
|
template.create_dms_directory()
|
|
self.partner.invalidate_model()
|
|
self.assertEqual(self.partner.dms_directory_ids.name, self.partner.display_name)
|
|
directory_0 = self.partner.dms_directory_ids[0]
|
|
self.assertEqual(directory_0.parent_id, self.template.parent_directory_id)
|
|
self.assertFalse(directory_0.is_root_directory)
|
|
self.assertFalse(directory_0.inherit_group_ids)
|
|
self.assertIn(self.template.group_ids, directory_0.group_ids)
|
|
self.assertIn(self.group, directory_0.group_ids.group_ids)
|
|
self.assertIn(self.user_b, directory_0.group_ids.explicit_user_ids)
|
|
self.assertIn(self.user_a, directory_0.group_ids.users)
|
|
self.assertIn(self.user_b, directory_0.group_ids.users)
|
|
|
|
def test_creation_process_02(self):
|
|
partner_1 = self.env["res.partner"].create({"name": "Test partner 1"})
|
|
partner_1.invalidate_model()
|
|
directory_1 = partner_1.dms_directory_ids[0]
|
|
self.assertFalse(directory_1.parent_id)
|
|
self.assertTrue(directory_1.is_root_directory)
|
|
self.assertTrue(directory_1.inherit_group_ids)
|
|
partner_2 = (
|
|
self.env["res.partner"]
|
|
.with_context(skip_track_dms_field_template=True)
|
|
.create({"name": "Test partner 2"})
|
|
)
|
|
partner_2.invalidate_model()
|
|
self.assertFalse(partner_2.dms_directory_ids)
|
|
|
|
def test_creation_process_02_with_parent(self):
|
|
self.template.parent_directory_id = fields.first(
|
|
self.template.storage_id.root_directory_ids
|
|
)
|
|
partner_1 = self.env["res.partner"].create({"name": "Test partner 1"})
|
|
partner_1.invalidate_model()
|
|
directory_1 = partner_1.dms_directory_ids[0]
|
|
self.assertEqual(directory_1.parent_id, self.template.parent_directory_id)
|
|
self.assertFalse(directory_1.is_root_directory)
|
|
self.assertFalse(directory_1.inherit_group_ids)
|
|
partner_2 = (
|
|
self.env["res.partner"]
|
|
.with_context(skip_track_dms_field_template=True)
|
|
.create({"name": "Test partner 2"})
|
|
)
|
|
partner_2.invalidate_model()
|
|
self.assertFalse(partner_2.dms_directory_ids)
|
|
|
|
def test_creation_process_03(self):
|
|
self.template.directory_format_name = "{{object.name}}-{{object.ref}}"
|
|
partner_1 = self.env["res.partner"].create(
|
|
{"name": "TEST-PARTNER1", "ref": "CUSTOM-REF"}
|
|
)
|
|
partner_1.invalidate_model()
|
|
self.assertEqual(
|
|
partner_1.dms_directory_ids.name, "%s-%s" % (partner_1.name, partner_1.ref)
|
|
)
|
|
|
|
def test_parents(self):
|
|
directory = self.env["dms.directory"].create(
|
|
self._create_directory_vals(self.partner)
|
|
)
|
|
self.assertEqual(
|
|
directory.search_read_parents([("id", "=", directory.id)], fields=["id"])[
|
|
0
|
|
],
|
|
{"id": directory.id},
|
|
)
|
|
self.assertEqual(
|
|
directory.search_read_parents(
|
|
[("id", "=", directory.id)], fields=["id", "name"]
|
|
)[0],
|
|
{"id": directory.id, "name": directory.name},
|
|
)
|
|
self.assertIn(
|
|
{"id": directory.id, "name": directory.name},
|
|
directory.search_read_parents(fields=["id", "name"]),
|
|
)
|