125 lines
4.8 KiB
Python
125 lines
4.8 KiB
Python
import base64
|
|
|
|
from odoo import Command
|
|
from odoo.exceptions import AccessError
|
|
from odoo.tests.common import TransactionCase
|
|
|
|
GIF = b"R0lGODdhAQABAIAAAP///////ywAAAAAAQABAAACAkQBADs="
|
|
TEXT = base64.b64encode(b"TEST")
|
|
WEBP = b"UklGRjoAAABXRUJQVlA4IC4AAAAwAQCdASoBAAEAAUAmJaAAA3AA/u/uY//8s//2W/7LeM///5Bj/dl/pJxGAAAA"
|
|
|
|
|
|
class TransactionCaseDocuments(TransactionCase):
|
|
def _assert_no_members(self, documents):
|
|
self.assertFalse(documents.access_ids.filtered('role'),
|
|
"There shouldn't be any access records with role for these documents.")
|
|
|
|
def _assert_raises_check_access_rule(self, document, operation=None, msg=None):
|
|
operations = [operation] if operation else ('read', 'write')
|
|
for operation in operations:
|
|
with self.subTest(operation=operation, msg=msg):
|
|
with self.assertRaises(AccessError):
|
|
document.check_access(operation)
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
cls.document_manager, cls.doc_user, cls.internal_user, cls.portal_user, cls.public_user, = cls.env['res.users'].create([
|
|
{
|
|
'email': "dtdm@yourcompany.com",
|
|
'group_ids': [Command.link(cls.env.ref('documents.group_documents_manager').id)],
|
|
'login': "dtdm",
|
|
'name': "Documents Manager",
|
|
}, {
|
|
'email': 'documents@example.com',
|
|
'group_ids': [Command.link(cls.env.ref('documents.group_documents_user').id)],
|
|
'login': 'documents@example.com',
|
|
'name': 'Documents User',
|
|
}, {
|
|
'login': 'internal_user',
|
|
'group_ids': [Command.link(cls.env.ref('base.group_user').id)],
|
|
'name': 'Internal user'
|
|
}, {
|
|
'login': 'portal_user',
|
|
'group_ids': [Command.link(cls.env.ref('base.group_portal').id)],
|
|
'name': 'Portal user'
|
|
}, {
|
|
'login': 'public_user',
|
|
'group_ids': [Command.link(cls.env.ref('base.group_public').id)],
|
|
'name': 'Public user',
|
|
},
|
|
])
|
|
cls.folder_a, cls.folder_b = cls.env['documents.document'].create([
|
|
{
|
|
'type': 'folder',
|
|
'name': f'folder {letter}',
|
|
'owner_id': cls.doc_user.id,
|
|
'access_internal': 'view',
|
|
} for letter in ('A', 'B')
|
|
])
|
|
cls.folder_a_a = cls.env['documents.document'].create({
|
|
'type': 'folder',
|
|
'name': 'folder A - A',
|
|
'folder_id': cls.folder_a.id,
|
|
'owner_id': cls.doc_user.id,
|
|
})
|
|
cls.tag_b = cls.env['documents.tag'].create({
|
|
'name': "categ_b > tag_b",
|
|
})
|
|
cls.tag_a, cls.tag_a_a = cls.env['documents.tag'].create([
|
|
{'name': 'tag_a'},
|
|
{'name': 'tag_a_a'},
|
|
])
|
|
cls.document_gif = cls.env['documents.document'].create({
|
|
'type': 'binary',
|
|
'datas': GIF,
|
|
'name': 'file.gif',
|
|
'mimetype': 'image/gif',
|
|
'folder_id': cls.folder_b.id,
|
|
'owner_id': cls.doc_user.id,
|
|
})
|
|
cls.document_txt = cls.env['documents.document'].create({
|
|
'type': 'binary',
|
|
'datas': TEXT,
|
|
'name': 'file.txt',
|
|
'mimetype': 'text/plain',
|
|
'folder_id': cls.folder_b.id,
|
|
'owner_id': cls.doc_user.id,
|
|
})
|
|
cls.document_txt.access_via_link = "view"
|
|
|
|
cls.company_root_folder, cls.company_sub_folder, cls.company_root_document = cls.env['documents.document'].create([
|
|
{
|
|
'type': 'folder',
|
|
'name': 'Company Root Folder',
|
|
'owner_id': False,
|
|
'folder_id': False,
|
|
'access_internal': 'view',
|
|
}, {
|
|
'type': 'folder',
|
|
'name': 'Company Sub Folder',
|
|
'owner_id': False,
|
|
'folder_id': False,
|
|
'access_internal': 'view',
|
|
}, {
|
|
'type': 'binary',
|
|
'name': 'Company Root Document',
|
|
'owner_id': False,
|
|
'folder_id': False,
|
|
'access_internal': 'view',
|
|
},
|
|
])
|
|
cls.company_sub_folder.folder_id = cls.company_root_folder.id
|
|
|
|
cls.server_action = cls.env['ir.actions.server'].create({
|
|
'name': 'Add tag_a',
|
|
'model_id': cls.env.ref('documents.model_documents_document').id,
|
|
'type': 'ir.actions.server',
|
|
'group_ids': cls.env.ref('base.group_user').ids,
|
|
'update_path': 'tag_ids',
|
|
'usage': 'ir_actions_server',
|
|
'state': 'object_write',
|
|
'update_m2m_operation': 'add',
|
|
'resource_ref': f'documents.tag,{cls.tag_a.id}',
|
|
})
|