78 lines
3.0 KiB
Python
78 lines
3.0 KiB
Python
from odoo.tests import TransactionCase, tagged
|
||
from odoo.exceptions import ValidationError, UserError
|
||
from psycopg2 import IntegrityError
|
||
from odoo.tools import mute_logger
|
||
|
||
|
||
@tagged('post_install', '-at_install')
|
||
class TestRsbuAccount(TransactionCase):
|
||
|
||
@classmethod
|
||
def setUpClass(cls):
|
||
super().setUpClass()
|
||
cls.Account = cls.env['rsbu.account']
|
||
cls.company = cls.env.company
|
||
cls.company2 = cls.env['res.company'].create({'name': 'RSBU Co2'})
|
||
|
||
def _make(self, code, name='Счёт', kind='active', parent=None, **kw):
|
||
vals = {'code': code, 'name': name, 'account_kind': kind}
|
||
if parent:
|
||
vals['parent_id'] = parent.id
|
||
vals.update(kw)
|
||
return self.Account.create(vals)
|
||
|
||
def test_code_unique_per_company(self):
|
||
self._make('T01')
|
||
with self.assertRaises(IntegrityError), mute_logger('odoo.sql_db'):
|
||
self._make('T01')
|
||
|
||
def test_code_reused_across_companies(self):
|
||
a = self._make('T02')
|
||
b = self._make('T02', company_id=self.company2.id)
|
||
self.assertNotEqual(a.id, b.id)
|
||
|
||
def test_no_cycle(self):
|
||
a = self._make('T10')
|
||
b = self._make('T11', parent=a)
|
||
# Рекурсию ловит ядро parent_store (UserError "Recursion Detected")
|
||
# ещё до нашего @api.constrains.
|
||
with self.assertRaises(UserError):
|
||
a.parent_id = b.id
|
||
a.flush_recordset()
|
||
|
||
def test_unlink_with_children_forbidden(self):
|
||
a = self._make('T20')
|
||
self._make('T21', parent=a)
|
||
with self.assertRaises(ValidationError):
|
||
a.unlink()
|
||
|
||
def test_required_subconto(self):
|
||
a = self._make('T30', subconto_partner=True, subconto_employee=True)
|
||
self.assertEqual(set(a.get_required_subconto()), {'partner', 'employee'})
|
||
|
||
def test_aggregation_zero_without_postings(self):
|
||
a = self._make('T40')
|
||
bal = a.get_balance()
|
||
self.assertEqual(bal['debit'], 0.0)
|
||
self.assertEqual(bal['credit'], 0.0)
|
||
self.assertEqual(bal['balance'], 0.0)
|
||
|
||
def test_subtree_ids(self):
|
||
a = self._make('T50', is_group=True)
|
||
b = self._make('T50.1', parent=a)
|
||
c = self._make('T50.2', parent=a)
|
||
ids = a._get_subtree_account_ids()
|
||
self.assertIn(a.id, ids)
|
||
self.assertIn(b.id, ids)
|
||
self.assertIn(c.id, ids)
|
||
|
||
def test_chart_loaded_for_company(self):
|
||
# post_init_hook должен был загрузить типовой план для компании.
|
||
acc51 = self.Account.search([
|
||
('code', '=', '51'), ('company_id', '=', self.company.id)])
|
||
self.assertTrue(acc51, 'Счёт 51 должен быть загружен из типового плана')
|
||
acc62av = self.Account.search([
|
||
('code', '=', '62.АВ'), ('company_id', '=', self.company.id)])
|
||
self.assertTrue(acc62av, 'Субсчёт 62.АВ должен быть загружен')
|
||
self.assertEqual(acc62av.parent_id.code, '62')
|