diff --git a/contract_sale_generation/tests/__init__.py b/contract_sale_generation/tests/__init__.py index 87f76cff7..ea35715b0 100644 --- a/contract_sale_generation/tests/__init__.py +++ b/contract_sale_generation/tests/__init__.py @@ -1,3 +1 @@ -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - from . import test_contract_sale diff --git a/contract_sale_generation/tests/common.py b/contract_sale_generation/tests/common.py new file mode 100644 index 000000000..dc2fe000f --- /dev/null +++ b/contract_sale_generation/tests/common.py @@ -0,0 +1,134 @@ +# © 2016 Carlos Dauden +# Copyright 2017 Pesol () +# Copyright 2017 Angel Moya +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from freezegun import freeze_time + +from odoo import fields +from odoo.tests import Form + + +def to_date(date): + return fields.Date.to_date(date) + + +class ContractSaleCommon: + # Use case : Prepare some data for current test case + + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) + cls.analytic_account = cls.env["account.analytic.account"].create( + { + "name": "Contracts", + } + ) + contract_date = "2020-01-15" + cls.pricelist = cls.env["product.pricelist"].create( + { + "name": "pricelist for contract test", + } + ) + cls.partner = cls.env["res.partner"].create( + { + "name": "partner test contract", + "property_product_pricelist": cls.pricelist.id, + } + ) + cls.product_1 = cls.env.ref("product.product_product_1") + cls.product_1.taxes_id += cls.env["account.tax"].search( + [("type_tax_use", "=", "sale")], limit=1 + ) + cls.product_1.description_sale = "Test description sale" + cls.line_template_vals = { + "product_id": cls.product_1.id, + "name": "Test Contract Template", + "quantity": 1, + "uom_id": cls.product_1.uom_id.id, + "price_unit": 100, + "discount": 50, + "recurring_rule_type": "yearly", + "recurring_interval": 1, + } + cls.template_vals = { + "name": "Test Contract Template", + "contract_type": "sale", + "contract_line_ids": [ + (0, 0, cls.line_template_vals), + ], + } + cls.template = cls.env["contract.template"].create(cls.template_vals) + # For being sure of the applied price + cls.env["product.pricelist.item"].create( + { + "pricelist_id": cls.partner.property_product_pricelist.id, + "product_id": cls.product_1.id, + "compute_price": "formula", + "base": "list_price", + } + ) + cls.contract = cls.env["contract.contract"].create( + { + "name": "Test Contract", + "partner_id": cls.partner.id, + "pricelist_id": cls.partner.property_product_pricelist.id, + "generation_type": "sale", + "sale_autoconfirm": False, + "group_id": cls.analytic_account.id, + } + ) + cls.line_vals = { + # "contract_id": cls.contract.id, + # "product_id": cls.product_1.id, + "name": "Services from #START# to #END#", + "quantity": 1, + # "uom_id": cls.product_1.uom_id.id, + "price_unit": 100, + "discount": 50, + "recurring_rule_type": "monthly", + "recurring_interval": 1, + "date_start": "2020-01-01", + "recurring_next_date": "2020-01-15", + } + with Form(cls.contract) as contract_form, freeze_time(contract_date): + contract_form.contract_template_id = cls.template + with contract_form.contract_line_ids.new() as line_form: + line_form.product_id = cls.product_1 + line_form.name = "Services from #START# to #END#" + line_form.quantity = 1 + line_form.price_unit = 100.0 + line_form.discount = 50 + line_form.recurring_rule_type = "monthly" + line_form.recurring_interval = 1 + line_form.date_start = "2020-01-15" + line_form.recurring_next_date = "2020-01-15" + cls.contract_line = cls.contract.contract_line_ids[1] + + cls.contract2 = cls.env["contract.contract"].create( + { + "name": "Test Contract 2", + "generation_type": "sale", + "partner_id": cls.partner.id, + "pricelist_id": cls.partner.property_product_pricelist.id, + "contract_type": "purchase", + "contract_line_ids": [ + ( + 0, + 0, + { + "product_id": cls.product_1.id, + "name": "Services from #START# to #END#", + "quantity": 1, + "uom_id": cls.product_1.uom_id.id, + "price_unit": 100, + "discount": 50, + "recurring_rule_type": "monthly", + "recurring_interval": 1, + "date_start": "2018-02-15", + "recurring_next_date": "2018-02-22", + }, + ) + ], + } + ) diff --git a/contract_sale_generation/tests/test_contract_sale.py b/contract_sale_generation/tests/test_contract_sale.py index 32892361d..51ae1ee90 100644 --- a/contract_sale_generation/tests/test_contract_sale.py +++ b/contract_sale_generation/tests/test_contract_sale.py @@ -2,138 +2,19 @@ # Copyright 2017 Pesol () # Copyright 2017 Angel Moya # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from freezegun import freeze_time from odoo import fields from odoo.exceptions import ValidationError -from odoo.tests import Form from odoo.tests.common import SavepointCase +from .common import ContractSaleCommon + def to_date(date): return fields.Date.to_date(date) -class TestContractSale(SavepointCase): - # Use case : Prepare some data for current test case - - @classmethod - def setUpClass(cls): - super().setUpClass() - cls.analytic_account = cls.env["account.analytic.account"].create( - { - "name": "Contracts", - } - ) - contract_date = "2020-01-15" - cls.pricelist = cls.env["product.pricelist"].create( - { - "name": "pricelist for contract test", - } - ) - cls.partner = cls.env["res.partner"].create( - { - "name": "partner test contract", - "property_product_pricelist": cls.pricelist.id, - } - ) - cls.product_1 = cls.env.ref("product.product_product_1") - cls.product_1.taxes_id += cls.env["account.tax"].search( - [("type_tax_use", "=", "sale")], limit=1 - ) - cls.product_1.description_sale = "Test description sale" - cls.line_template_vals = { - "product_id": cls.product_1.id, - "name": "Test Contract Template", - "quantity": 1, - "uom_id": cls.product_1.uom_id.id, - "price_unit": 100, - "discount": 50, - "recurring_rule_type": "yearly", - "recurring_interval": 1, - } - cls.template_vals = { - "name": "Test Contract Template", - "contract_type": "sale", - "contract_line_ids": [ - (0, 0, cls.line_template_vals), - ], - } - cls.template = cls.env["contract.template"].create(cls.template_vals) - # For being sure of the applied price - cls.env["product.pricelist.item"].create( - { - "pricelist_id": cls.partner.property_product_pricelist.id, - "product_id": cls.product_1.id, - "compute_price": "formula", - "base": "list_price", - } - ) - cls.contract = cls.env["contract.contract"].create( - { - "name": "Test Contract", - "partner_id": cls.partner.id, - "pricelist_id": cls.partner.property_product_pricelist.id, - "generation_type": "sale", - "sale_autoconfirm": False, - "group_id": cls.analytic_account.id, - } - ) - cls.line_vals = { - # "contract_id": cls.contract.id, - # "product_id": cls.product_1.id, - "name": "Services from #START# to #END#", - "quantity": 1, - # "uom_id": cls.product_1.uom_id.id, - "price_unit": 100, - "discount": 50, - "recurring_rule_type": "monthly", - "recurring_interval": 1, - "date_start": "2020-01-01", - "recurring_next_date": "2020-01-15", - } - with Form(cls.contract) as contract_form, freeze_time(contract_date): - contract_form.contract_template_id = cls.template - with contract_form.contract_line_ids.new() as line_form: - line_form.product_id = cls.product_1 - line_form.name = "Services from #START# to #END#" - line_form.quantity = 1 - line_form.price_unit = 100.0 - line_form.discount = 50 - line_form.recurring_rule_type = "monthly" - line_form.recurring_interval = 1 - line_form.date_start = "2020-01-15" - line_form.recurring_next_date = "2020-01-15" - cls.contract_line = cls.contract.contract_line_ids[1] - - cls.contract2 = cls.env["contract.contract"].create( - { - "name": "Test Contract 2", - "generation_type": "sale", - "partner_id": cls.partner.id, - "pricelist_id": cls.partner.property_product_pricelist.id, - "contract_type": "purchase", - "contract_line_ids": [ - ( - 0, - 0, - { - "product_id": cls.product_1.id, - "name": "Services from #START# to #END#", - "quantity": 1, - "uom_id": cls.product_1.uom_id.id, - "price_unit": 100, - "discount": 50, - "recurring_rule_type": "monthly", - "recurring_interval": 1, - "date_start": "2018-02-15", - "recurring_next_date": "2018-02-22", - }, - ) - ], - } - ) - +class TestContractSale(ContractSaleCommon, SavepointCase): def test_check_discount(self): with self.assertRaises(ValidationError): self.contract_line.write({"discount": 120})