171 lines
6.2 KiB
Python
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
|