Files
Odoo-18.0-20251222/sale_invoice_blocking/tests/test_sale_invoice_blocking.py
tocmo0nlord adbe430761
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
Initial commit: Odoo 18.0-20251222 extra-addons
2026-03-13 20:43:25 +00:00

87 lines
2.9 KiB
Python
Executable File

from psycopg2.errors import UniqueViolation
from odoo.exceptions import UserError
from odoo.tests.common import TransactionCase, mute_logger
class TestSaleInvoiceBlocking(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.sale_order_model = cls.env["sale.order"]
cls.sale_order_line_model = cls.env["sale.order.line"]
# Data
product_ctg = cls._create_product_category()
cls.service_1 = cls._create_product("test_product1", product_ctg)
cls.service_2 = cls._create_product("test_product2", product_ctg)
cls.customer = cls._create_customer("Test Customer")
@classmethod
def _create_customer(cls, name):
"""Create a Partner."""
return cls.env["res.partner"].create(
{"name": name, "email": "example@yourcompany.com", "phone": 123456}
)
@classmethod
def _create_product_category(cls):
product_ctg = cls.env["product.category"].create({"name": "test_product_ctg"})
return product_ctg
@classmethod
def _create_product(cls, name, product_ctg):
product = cls.env["product.product"].create(
{
"name": name,
"categ_id": product_ctg.id,
"type": "service",
"invoice_policy": "order",
}
)
return product
@mute_logger("odoo.sql_db")
def test_duplicate_reason(self):
self.env["invoice.blocking.reason"].create({"name": "Test Reason"})
with self.assertRaises(UniqueViolation):
self.env["invoice.blocking.reason"].create({"name": "Test Reason"})
def test_sales_order_invoicing(self):
so = self.sale_order_model.create({"partner_id": self.customer.id})
sol1 = self.sale_order_line_model.create(
{"product_id": self.service_1.id, "product_uom_qty": 1, "order_id": so.id}
)
sol2 = self.sale_order_line_model.create(
{"product_id": self.service_2.id, "product_uom_qty": 2, "order_id": so.id}
)
# confirm quotation
so.action_confirm()
# update quantities delivered
sol1.qty_delivered = 1
sol2.qty_delivered = 2
self.assertEqual(
so.invoice_status, "to invoice", "The invoice status should be To Invoice"
)
so.invoice_blocking_reason_id = self.env["invoice.blocking.reason"].create(
{"name": "Test Reason"}
)
self.assertEqual(
so.invoice_status, "no", "The invoice status should be Nothing to Invoice"
)
with self.assertRaisesRegex(
UserError, "Cannot create an invoice. No items are available to invoice"
):
so._create_invoices()
so.invoice_blocking_reason_id = False
self.assertEqual(
so.invoice_status, "to invoice", "The invoice status should be To Invoice"
)
so._create_invoices()