Files
tradon/modules/account_tax_rule_country/tests/test_module.py
2026-03-14 09:42:12 +00:00

171 lines
6.2 KiB
Python

# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.modules.account.tests import create_chart
from trytond.modules.company.tests import (
CompanyTestMixin, create_company, set_company)
from trytond.pool import Pool
from trytond.tests.test_tryton import ModuleTestCase, with_transaction
class AccountTaxRuleCountryTestCase(CompanyTestMixin, ModuleTestCase):
'Test Account Tax Rule Country module'
module = 'account_tax_rule_country'
extras = ['account_invoice', 'sale', 'purchase', 'stock']
@with_transaction()
def test_account_chart(self):
'Test creation and update of minimal chart of accounts'
pool = Pool()
Account = pool.get('account.account')
UpdateChart = pool.get('account.update_chart', type='wizard')
company = create_company()
with set_company(company):
create_chart(company, tax=True)
root, = Account.search([('parent', '=', None)])
session_id, _, _ = UpdateChart.create()
update_chart = UpdateChart(session_id)
update_chart.start.account = root
update_chart.transition_update()
@classmethod
def _create_countries(cls):
pool = Pool()
Country = pool.get('country.country')
Subdivision = pool.get('country.subdivision')
country1 = Country(name="Country 1")
country1.save()
subdivision1 = Subdivision(
country=country1, name="Subdivision 1", code="SUB1",
type='province')
subdivision1.save()
subdivision11 = Subdivision(
country=country1, parent=subdivision1,
name="Sub-Subdivision 1", code="SUBSUB1", type='province')
subdivision11.save()
country2 = Country(name="Country 2")
country2.save()
subdivision2 = Subdivision(
country=country2, name="Subdivision 2", code="SUB2",
type='province')
subdivision2.save()
return [country1, country2]
def _get_taxes(cls):
pool = Pool()
Tax = pool.get('account.tax')
tax, = Tax.search([])
target_tax, = Tax.copy([tax])
return [tax, target_tax]
def _create_rule(cls, lines):
pool = Pool()
TaxRule = pool.get('account.tax.rule')
return TaxRule.create([{
'name': 'Test',
'kind': 'both',
'lines': [('create', lines)],
}])[0]
@with_transaction()
def test_tax_rule(self):
"Test tax rule"
country1, country2 = self._create_countries()[:2]
subdivision1 = country1.subdivisions[0]
subdivision2 = country2.subdivisions[0]
company = create_company()
with set_company(company):
create_chart(company, tax=True)
tax, target_tax = self._get_taxes()[:2]
tax_rule = self._create_rule([{
'from_country': country1.id,
'from_subdivision': subdivision1.id,
'to_country': country2.id,
'to_subdivision': subdivision2.id,
'origin_tax': tax.id,
'tax': target_tax.id,
}])
pattern = {
'from_country': country1.id,
'from_subdivision': subdivision1.id,
'to_country': country2.id,
'to_subdivision': subdivision2.id,
}
self.assertListEqual(tax_rule.apply(tax, pattern), [target_tax.id])
@with_transaction()
def test_tax_rule_children(self):
"Test tax rule with children subdivision"
country = self._create_countries()[0]
parent_subdivision = [
s for s in country.subdivisions if not s.parent][0]
subdivision = [
s for s in country.subdivisions
if s.parent == parent_subdivision][0]
company = create_company()
with set_company(company):
create_chart(company, tax=True)
tax, target_tax = self._get_taxes()[:2]
tax_rule = self._create_rule([{
'to_country': country.id,
'to_subdivision': parent_subdivision.id,
'origin_tax': tax.id,
'tax': target_tax.id,
}])
pattern = {
'to_country': country.id,
'to_subdivision': subdivision.id,
}
self.assertListEqual(tax_rule.apply(tax, pattern), [target_tax.id])
@with_transaction()
def test_tax_rule_no_subdivision(self):
"Test tax rule without subdivision"
country = self._create_countries()[0]
subdivision = country.subdivisions[0]
company = create_company()
with set_company(company):
create_chart(company, tax=True)
tax, target_tax = self._get_taxes()[:2]
tax_rule = self._create_rule([{
'to_country': country.id,
'origin_tax': tax.id,
'tax': target_tax.id,
}])
pattern = {
'to_country': country.id,
'to_subdivision': subdivision.id,
}
self.assertListEqual(tax_rule.apply(tax, pattern), [target_tax.id])
@with_transaction()
def test_tax_rule_no_subdivision_pattern(self):
"Test tax rule without subdivision in pattern"
country = self._create_countries()[0]
subdivision = country.subdivisions[0]
company = create_company()
with set_company(company):
create_chart(company, tax=True)
tax, target_tax = self._get_taxes()[:2]
tax_rule = self._create_rule([{
'to_country': country.id,
'to_subdivision': subdivision.id,
'origin_tax': tax.id,
'tax': target_tax.id,
}])
pattern = {
'to_country': country.id,
}
self.assertListEqual(tax_rule.apply(tax, pattern), [tax.id])
del ModuleTestCase