Initial commit: Odoo 18.0-20251222 extra-addons
Some checks failed
pre-commit / pre-commit (push) Has been cancelled
tests / Detect unreleased dependencies (push) Has been cancelled
tests / test with OCB (push) Has been cancelled
tests / test with Odoo (push) Has been cancelled

This commit is contained in:
tocmo0nlord
2026-03-13 20:43:25 +00:00
parent 36e847a7df
commit adbe430761
9472 changed files with 1265727 additions and 0 deletions

View File

@@ -0,0 +1,4 @@
# Copyright 2016 Antonio Espinosa <antonio.espinosa@tecnativa.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import test_invoice_refund_link

View File

@@ -0,0 +1,154 @@
# Copyright 2016 Tecnativa - Antonio Espinosa
# Copyright 2014-2023 Tecnativa - Pedro M. Baeza
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import Command
from odoo.tests.common import TransactionCase
from .. import post_init_hook
class TestInvoiceRefundLinkBase(TransactionCase):
is_modify = False
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.env = cls.env(
context=dict(
cls.env.context,
mail_create_nolog=True,
mail_create_nosubscribe=True,
mail_notrack=True,
no_reset_password=True,
tracking_disable=True,
)
)
cls.partner = cls.env["res.partner"].create({"name": "Test partner"})
default_line_account = cls.env["account.account"].create(
{
"name": "TESTACC",
"code": "TESTACC",
"account_type": "income",
"deprecated": False,
"company_ids": [Command.link(cls.env.user.company_id.id)],
}
)
cls.journal = cls.env["account.journal"].create(
{
"name": "Journal 1",
"code": "J1",
"type": "sale",
"company_id": cls.env.user.company_id.id,
}
)
cls.invoice_lines = [
(
0,
False,
{
"name": "Test section",
"display_type": "line_section",
},
),
(
0,
False,
{
"name": "Test description #1",
"account_id": default_line_account.id,
"quantity": 1.0,
"price_unit": 100.0,
},
),
(
0,
False,
{
"name": "Test description #2",
"account_id": default_line_account.id,
"quantity": 2.0,
"price_unit": 25.0,
},
),
]
cls.invoice = cls.env["account.move"].create(
{
"partner_id": cls.partner.id,
"move_type": "out_invoice",
"invoice_line_ids": cls.invoice_lines,
}
)
cls.invoice.action_post()
cls.refund_reason = "The refund reason"
cls.env["account.move.reversal"].with_context(
active_ids=cls.invoice.ids, active_model="account.move"
).create(
{
"reason": cls.refund_reason,
"journal_id": cls.journal.id,
}
).reverse_moves(is_modify=cls.is_modify)
def _test_refund_link(self):
self.assertTrue(self.invoice.refund_invoice_ids)
refund = self.invoice.refund_invoice_ids[0]
ref = f"Reversal of: {self.invoice.name}, {self.refund_reason}"
self.assertEqual(refund.ref, ref)
self.assertEqual(len(self.invoice.invoice_line_ids), len(self.invoice_lines))
self.assertEqual(len(refund.invoice_line_ids), len(self.invoice_lines))
# We're checking only the 2nd and 3rd lines because the first is a line section
self.assertTrue(refund.invoice_line_ids[1].origin_line_id)
self.assertEqual(
self.invoice.invoice_line_ids[1], refund.invoice_line_ids[1].origin_line_id
)
self.assertTrue(refund.invoice_line_ids[2].origin_line_id)
self.assertEqual(
self.invoice.invoice_line_ids[2], refund.invoice_line_ids[2].origin_line_id
)
class TestInvoiceRefundLink(TestInvoiceRefundLinkBase):
@classmethod
def setUpClass(cls):
super().setUpClass()
def test_post_init_hook(self):
self.assertTrue(self.invoice.refund_invoice_ids)
refund = self.invoice.refund_invoice_ids[0]
refund.invoice_line_ids.write({"origin_line_id": False})
self.assertFalse(refund.mapped("invoice_line_ids.origin_line_id"))
post_init_hook(self.env)
self.refund_reason = "The refund reason"
self._test_refund_link()
def test_refund_link(self):
self._test_refund_link()
def test_invoice_copy(self):
refund = self.invoice.refund_invoice_ids[0]
self.invoice.copy()
self.assertEqual(
refund.invoice_line_ids.origin_line_id, self.invoice.invoice_line_ids
)
def test_refund_copy(self):
refund = self.invoice.refund_invoice_ids[0]
refund.copy()
self.assertEqual(
self.invoice.invoice_line_ids, refund.invoice_line_ids.origin_line_id
)
class TestInvoiceRefundNoModifyLink(TestInvoiceRefundLinkBase):
is_modify = False
def test_refund_link(self):
self._test_refund_link()
class TestInvoiceRefundModifyLink(TestInvoiceRefundLinkBase):
is_modify = True
def test_refund_link(self):
self._test_refund_link()