2
0
account-financial-tools/account_chart_update_l10n_eu_oss_oca/tests/test_account_chart_update_l10n_eu_oss_oca.py

136 lines
5.0 KiB
Python

# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.tests import tagged
from odoo.addons.account.tests.common import AccountTestInvoicingCommon
@tagged("post_install", "-at_install")
class TestOSSCoA(AccountTestInvoicingCommon):
def _create_xml_id(self, record):
return self.env["ir.model.data"].create(
{
"module": "account_chart_update",
"name": "{}-{}".format(record._table, record.id),
"model": record._name,
"res_id": record.id,
}
)
def _create_tax_tmpl(self, name, chart_template):
record = self.env["account.tax.template"].create(
{
"name": name,
"amount": 0,
"chart_template_id": chart_template.id,
"tax_group_id": self.env.ref("account.tax_group_taxes").id,
"refund_repartition_line_ids": [
(0, 0, {"repartition_type": "base", "factor_percent": 100.0}),
(0, 0, {"repartition_type": "tax", "factor_percent": 100.0}),
(0, 0, {"repartition_type": "tax", "factor_percent": 100.0}),
],
"invoice_repartition_line_ids": [
(0, 0, {"repartition_type": "base", "factor_percent": 100.0}),
(0, 0, {"repartition_type": "tax", "factor_percent": 100.0}),
(0, 0, {"repartition_type": "tax", "factor_percent": 100.0}),
],
}
)
self._create_xml_id(record)
return record
# pylint: disable=W8106
@classmethod
def setUpClass(
cls, chart_template_ref="l10n_generic_coa.configurable_chart_template"
):
super().setUpClass(chart_template_ref=chart_template_ref)
cls.chart_template = cls.env.ref(chart_template_ref)
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.company = cls.env["res.company"].create(
{
"name": "Test account_chart_update company",
"currency_id": cls.chart_template.currency_id.id,
"country_id": cls.env.ref("base.es").id,
}
)
cls.env.user.write(
{
"company_ids": [
(6, 0, cls.env.user.company_ids.ids),
(4, cls.company.id),
],
"company_id": cls.company.id,
"groups_id": [
(6, 0, cls.env.user.groups_id.ids),
(4, cls.env.ref("account.group_account_user").id),
(4, cls.env.ref("account.group_account_invoice").id),
(4, cls.env.ref("base.group_multi_company").id),
],
}
)
cls.oss_wizard = cls.env["l10n.eu.oss.wizard"]
def setUp(self):
super().setUp()
# Create demo tax
self._create_tax_tmpl("Not OSS Demo tax", self.chart_template)
self.tax = self.env["account.tax"].create(
{
"name": "Not OSS Demo tax",
"amount": 10,
"amount_type": "percent",
"type_tax_use": "sale",
"country_id": self.env.ref("base.es").id,
"company_id": self.company.id,
"tax_group_id": self.env.ref("account.tax_group_taxes").id,
}
)
self.wizard_obj = self.env["wizard.update.charts.accounts"]
self.wizard_vals = {
"company_id": self.company.id,
"chart_template_id": self.chart_template.id,
"code_digits": 6,
"lang": "en_US",
}
@classmethod
def _oss_wizard_create(cls, extra_vals):
vals = cls.oss_wizard.default_get(list(cls.oss_wizard.fields_get()))
vals.update(extra_vals)
oss_wizard_id = cls.oss_wizard.create(vals)
return oss_wizard_id
def test_matching(self):
# Generate EU OSS taxes
oss_wizard_vals = {
"company_id": self.company.id,
"general_tax": self.tax.id,
}
oss_wizard = self._oss_wizard_create(oss_wizard_vals)
oss_wizard.generate_eu_oss_taxes()
wizard_vals = self.wizard_vals
wizard_vals.update(update_tax=True)
wizard = self.wizard_obj.create(wizard_vals)
wizard.action_find_records()
taxes_to_delete = wizard.tax_ids.filtered(lambda x: x.type == "deleted").mapped(
"update_tax_id"
)
oss_taxes = self.env["account.tax"].search(
[
("oss_country_id", "!=", False),
]
)
self.assertTrue(oss_taxes, "No OSS taxes found in the system")
for tax in oss_taxes:
self.assertNotIn(tax, taxes_to_delete)