Odoo18-Base/addons/l10n_de/tests/test_audit_trail.py
2025-01-06 10:57:38 +07:00

107 lines
4.2 KiB
Python

import logging
from odoo import Command
from odoo.addons.account.tests.common import AccountTestInvoicingCommon, AccountTestInvoicingHttpCommon
from odoo.exceptions import UserError
from odoo.tests.common import tagged
_logger = logging.getLogger(__name__)
@tagged('post_install_l10n', 'post_install', '-at_install')
class TestAuditTrailDE(AccountTestInvoicingHttpCommon):
@classmethod
@AccountTestInvoicingCommon.setup_chart_template('de_skr03')
def setUpClass(cls):
super().setUpClass()
cls.document_installed = 'documents_account' in cls.env['ir.module.module']._installed()
if cls.document_installed:
cls.env.user.company_id.documents_account_settings = True
folder_test = cls.env['documents.document'].create({
'name': 'folder_test',
'type': 'folder',
})
cls.env['documents.account.folder.setting'].create({
'folder_id': folder_test.id,
'journal_id': cls.company_data['default_journal_sale'].id,
})
def _send_and_print(self, invoice):
return self.env['account.move.send'].with_context(
force_report_rendering=True,
)._generate_and_send_invoices(invoice)
def test_audit_trail_de(self):
invoice = self.env['account.move'].create([{
'move_type': 'out_invoice',
'partner_id': self.partner_a.id,
'invoice_line_ids': [Command.create({
'name': 'product',
'quantity': 1,
'price_unit': 100,
})],
}])
invoice.action_post()
self.assertFalse(invoice.message_main_attachment_id)
# Print the invoice for the first time
first_attachment = self._send_and_print(invoice)
self.assertTrue(first_attachment)
# Remove the attachment, it should only archive it instead of deleting it
first_attachment.unlink()
self.assertTrue(first_attachment.exists())
# But we cannot entirely remove it
with self.assertRaisesRegex(UserError, "remove parts of the audit trail"):
first_attachment.unlink()
# Print a second time the invoice, it generates a new attachment
invoice.invalidate_recordset()
second_attachment = self._send_and_print(invoice)
self.assertNotEqual(first_attachment, second_attachment)
# Make sure we can browse all the attachments in the UI (as it changes the main attachment)
first_attachment.register_as_main_attachment()
self.assertEqual(invoice.message_main_attachment_id, first_attachment)
second_attachment.register_as_main_attachment()
self.assertEqual(invoice.message_main_attachment_id, second_attachment)
if self.document_installed:
# Make sure we can change the version history of the document
document = self.env['documents.document'].search([
('res_model', '=', 'account.move'),
('res_id', '=', invoice.id),
('name', '=ilike', '%.pdf'),
])
self.assertTrue(document)
document.attachment_id = first_attachment
document.attachment_id = second_attachment
else:
_logger.runbot("Documents module is not installed, skipping part of the test")
def test_audit_trail_write(self):
invoice = self.env['account.move'].create([{
'move_type': 'out_invoice',
'partner_id': self.partner_a.id,
'invoice_line_ids': [Command.create({
'name': 'product',
'quantity': 1,
'price_unit': 100,
})],
}])
invoice.action_post()
self.assertFalse(invoice.message_main_attachment_id)
# Print the invoice for the first time
self._send_and_print(invoice)
attachment = invoice.message_main_attachment_id
with self.assertRaisesRegex(UserError, "remove parts of the audit trail"):
attachment.write({
'res_id': self.env.user.id,
'res_model': self.env.user._name,
})
with self.assertRaisesRegex(UserError, "remove parts of the audit trail"):
attachment.datas = b'new data'