Files
enterprise-addons/documents_spreadsheet/tests/test_spreadsheet_documents_sharing.py
T

126 lines
6.8 KiB
Python

from odoo.addons.documents.tests.test_documents_sharing import TestDocumentsSharingCommon
from odoo.tests import Form, users
class TestSpreadsheetDocumentsSharing(TestDocumentsSharingCommon):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.folder = cls.env["documents.document"].create({
"name": "Test folder",
"type": "folder",
"access_internal": "view",
"access_via_link": "view",
})
cls.frozen_spreadsheets = cls.env['documents.document'].create([
{'name': f'Frozen spreadsheet_{i}', 'handler': 'frozen_spreadsheet',
'folder_id': cls.folder.id, 'owner_id': cls.document_manager.id}
for i in range(2)
])
cls.spreadsheet = cls.env['documents.document'].create([
{'name': f'Spreadsheet_{i}', 'handler': 'spreadsheet',
'folder_id': cls.folder.id, 'owner_id': cls.document_manager.id}
for i in range(2)
])
cls.non_spreadsheet = cls.env['documents.document'].create([
{'name': f'Non_spreadsheet_{i}', 'folder_id': cls.folder.id, 'owner_id': cls.document_manager.id}
for i in range(2)
])
cls.docs = cls.frozen_spreadsheets | cls.spreadsheet | cls.non_spreadsheet
(cls.frozen_spreadsheets | cls.spreadsheet | cls.non_spreadsheet).action_update_access_rights(
partners={cls.doc_user.partner_id: ('view', False), cls.portal_user.partner_id: ('view', False)})
cls.partners = cls.frozen_spreadsheets[0].access_ids.partner_id
@staticmethod
def get_display_names(records):
return ', '.join(records.sorted('display_name').mapped('display_name'))
@users("dtdm")
def test_invite_frozen_edit_error(self):
with Form(self.create_documents_sharing(self.docs)) as form:
self.assertFalse(form.error_message_spreadsheet)
form.invite_partner_ids = self.doc_user.partner_id
form.invite_role = 'edit'
self.assertIn("Read only spreadsheet(s):", form.error_message_spreadsheet)
self.assertIn(self.get_display_names(self.frozen_spreadsheets), form.error_message_spreadsheet)
@users("dtdm")
def test_invite_to_non_internal_user_edit_error(self):
with Form(self.create_documents_sharing(self.spreadsheet | self.non_spreadsheet)) as form:
self.assertFalse(form.error_message_spreadsheet)
form.invite_partner_ids = (self.doc_user | self.portal_user).partner_id
form.invite_role = 'edit'
self.assertIn("You can not share spreadsheet(s) in edit mode", form.error_message_spreadsheet)
self.assertIn("to non-internal users.", form.error_message_spreadsheet)
self.assertIn(self.get_display_names(self.spreadsheet), form.error_message_spreadsheet)
self.assertIn(self.portal_user.partner_id.name, form.error_message_spreadsheet)
@users("dtdm")
def test_share_frozen_edit_error(self):
for operation, expected_partners in (
('set_doc_user_edit', self.doc_user.partner_id),
('set_access_internal_edit', self.env['res.partner']),
('set_access_via_link_edit', self.env['res.partner']),
):
with self.subTest(operation=operation), Form(self.create_documents_sharing(self.docs)) as form:
self.assertFalse(form.error_message_spreadsheet)
if operation == 'set_doc_user_edit':
with self.form_get_access_edit(form, self.doc_user.partner_id) as access_edit_form:
access_edit_form.role = 'edit'
elif operation == 'set_access_internal_edit':
form.access_internal = 'edit'
elif operation == 'set_access_via_link_edit':
form.access_via_link = 'edit'
self.assertIn('Read only spreadsheet(s):', form.error_message_spreadsheet)
self.assertIn(self.get_display_names(self.frozen_spreadsheets), form.error_message_spreadsheet)
self.assertIn(self.get_display_names(expected_partners), form.error_message_spreadsheet)
self.assertFalse(form.has_warning_link_with_more_rights)
@users("dtdm")
def test_share_to_non_internal_user_edit_error(self):
for operation, expected_errors, expected_partner_error in [
('set_portal_user_edit', ["You can not share spreadsheet(s) in edit mode", "to non-internal users"],
self.portal_user.partner_id),
('set_access_via_link_edit', ["You cannot share spreadsheet(s) via link in edit mode"],
self.env['res.partner']),
]:
with (self.subTest(operation=operation),
Form(self.create_documents_sharing(self.spreadsheet | self.non_spreadsheet)) as form):
self.assertFalse(form.error_message_spreadsheet)
if operation == 'set_portal_user_edit':
with self.form_get_access_edit(form, self.portal_user.partner_id) as access_form:
access_form.role = 'edit'
elif operation == 'set_access_via_link_edit':
form.access_via_link = 'edit'
for expected_error in expected_errors:
self.assertIn(expected_error, form.error_message_spreadsheet)
self.assertIn(self.get_display_names(self.spreadsheet), form.error_message_spreadsheet)
self.assertIn(self.get_display_names(expected_partner_error), form.error_message_spreadsheet)
@users("dtdm")
def test_removing_illegal_access_after_user_deactivation(self):
action = self.env["documents.sharing"].action_open(self.spreadsheet.ids)
doc_sharing = self.assert_open_wizard(action, self.spreadsheet)
with Form(doc_sharing) as form:
form.invite_partner_ids = (self.doc_user).partner_id
form.invite_role = "edit"
doc_sharing.action_invite_members()
self.doc_user.action_archive()
with Form(self.create_documents_sharing(self.spreadsheet)) as form:
self.assertIn(
"You can not share spreadsheet(s) in edit mode",
form.error_message_spreadsheet,
)
self.assertIn("to non-internal users.", form.error_message_spreadsheet)
self.assertIn(
self.get_display_names(self.spreadsheet), form.error_message_spreadsheet
)
self.assertIn(self.doc_user.partner_id.name, form.error_message_spreadsheet)
with self.form_get_access_edit(
form, self.doc_user.partner_id
) as access_edit_form:
access_edit_form.is_deleted = True
self.assertFalse(form.error_message_spreadsheet)
self.assertFalse(form.has_warning_partners_without_access)