Files
Enofirm-Temp/addons/sale_management/tests/test_sale_order_template.py
2026-09-18 13:55:25 +07:00

152 lines
5.3 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.exceptions import UserError, ValidationError
from odoo.fields import Command
from odoo.tests import tagged
from odoo.addons.sale_management.tests.common import SaleManagementCommon
@tagged('-at_install', 'post_install')
class TestSaleOrderTemplate(SaleManagementCommon):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.branch_company, cls.other_company = cls.env['res.company'].create([
{
'name': "Branch company",
'parent_id': cls.company.id,
},
{'name': "Other Company"},
])
(
cls.parent_company_product,
cls.branch_company_product,
cls.other_company_product,
) = cls.env['product.product'].create([
{
'name': 'Parent company product',
'company_id': cls.company.id,
},
{
'name': 'Branch company product',
'company_id': cls.branch_company.id,
},
{
'name': 'Other company product',
'company_id': cls.other_company.id,
},
])
def test_no_restricted_product_on_shared_template(self):
self.empty_order_template.company_id = False
with self.assertRaises(UserError):
self.empty_order_template.sale_order_template_line_ids = [
Command.create({
'product_id': self.parent_company_product.id,
}),
]
with self.assertRaises(UserError):
self.empty_order_template.sale_order_template_option_ids = [
Command.create({
'product_id': self.parent_company_product.id,
}),
]
def test_template_cannot_use_unrelated_company_products(self):
# Access to products of other companies
with self.assertRaises(UserError):
self.empty_order_template.sale_order_template_line_ids = [
Command.create({
'product_id': self.other_company_product.id,
}),
]
with self.assertRaises(UserError):
self.empty_order_template.sale_order_template_option_ids = [
Command.create({
'product_id': self.other_company_product.id,
}),
]
def test_parent_template_cannot_use_branch_company_products(self):
with self.assertRaises(UserError):
self.empty_order_template.sale_order_template_line_ids = [
Command.create({
'product_id': self.branch_company_product.id,
}),
]
with self.assertRaises(UserError):
self.empty_order_template.sale_order_template_option_ids = [
Command.create({
'product_id': self.branch_company_product.id,
}),
]
def test_branch_template_can_use_parent_company_products(self):
self.assertFalse(self.product.company_id)
self.empty_order_template.company_id = self.branch_company.id
self.empty_order_template.write({
'sale_order_template_line_ids': [
Command.create({
'product_id': self.branch_company_product.id,
}),
Command.create({
'product_id': self.parent_company_product.id,
}),
Command.create({ # Shared product
'product_id': self.product.id,
}),
],
'sale_order_template_option_ids': [
Command.create({
'product_id': self.branch_company_product.id,
}),
Command.create({
'product_id': self.parent_company_product.id,
}),
Command.create({ # Shared product
'product_id': self.product.id,
}),
],
})
def test_company_changes_on_template(self):
"""Test `_check_company_id` constraint.
Since most multi-company issues are already catched by the automated `check_company` logic
(see other tests), we have to trigger issues the other way (through the template field) to
test the constraint.
"""
self.empty_order_template.write({
'company_id': self.company.id,
'sale_order_template_line_ids': [
Command.create({
'product_id': self.parent_company_product.id,
})
],
'sale_order_template_option_ids': [
Command.create({
'product_id': self.parent_company_product.id,
}),
],
})
# Branch company is allowed to use parent company products
self.empty_order_template.company_id = self.branch_company.id
# Cannot share template if contains restricted products
with self.assertRaises(ValidationError):
self.empty_order_template.company_id = False
# Template cannot hold products from other companies
with self.assertRaises(ValidationError):
self.empty_order_template.company_id = self.other_company.id