from odoo.tests import TransactionCase, tagged @tagged('post_install', '-at_install') class TestDemoTemplates(TransactionCase): @classmethod def setUpClass(cls): super().setUpClass() cls.company = cls.env.company cls.partner = cls.env['res.partner'].create({'name': 'Demo Клиент'}) cls.journal_bank = cls.env['account.journal'].search( [('type', '=', 'bank'), ('company_id', '=', cls.company.id)], limit=1) def _tmpl(self, code): return self.env['rsbu.operation.template'].search([ ('code', '=', code), ('company_id', '=', self.company.id)], limit=1) def test_all_templates_loaded(self): codes = ['DEMO_SALE', 'DEMO_SALE_REFUND', 'DEMO_PURCHASE', 'DEMO_PURCHASE_REFUND', 'DEMO_PAY_CUSTOMER', 'DEMO_REFUND_CUSTOMER', 'DEMO_PAY_SUPPLIER', 'DEMO_REFUND_SUPPLIER'] for code in codes: self.assertTrue(self._tmpl(code), 'Нет шаблона %s' % code) def test_customer_payment_detects_template(self): pay = self.env['account.payment'].create({ 'payment_type': 'inbound', 'partner_type': 'customer', 'partner_id': self.partner.id, 'amount': 1000.0, 'journal_id': self.journal_bank.id, }) self.assertEqual(pay._rsbu_detect_template().code, 'DEMO_PAY_CUSTOMER') def test_supplier_payment_detects_template(self): pay = self.env['account.payment'].create({ 'payment_type': 'outbound', 'partner_type': 'supplier', 'partner_id': self.partner.id, 'amount': 500.0, 'journal_id': self.journal_bank.id, }) self.assertEqual(pay._rsbu_detect_template().code, 'DEMO_PAY_SUPPLIER') def test_supplier_refund_detects_template(self): # Входящий платёж от поставщика -> возврат от поставщика. pay = self.env['account.payment'].create({ 'payment_type': 'inbound', 'partner_type': 'supplier', 'partner_id': self.partner.id, 'amount': 200.0, 'journal_id': self.journal_bank.id, }) self.assertEqual(pay._rsbu_detect_template().code, 'DEMO_REFUND_SUPPLIER') def test_supplier_payment_full_flow(self): pay = self.env['account.payment'].create({ 'payment_type': 'outbound', 'partner_type': 'supplier', 'partner_id': self.partner.id, 'amount': 500.0, 'journal_id': self.journal_bank.id, }) pay.action_post() move = pay.rsbu_move_id self.assertTrue(move) self.assertEqual(move.state, 'posted') # Дт 60 — Кт 51 на 500 acc60 = self.env['rsbu.account'].search([ ('code', '=', '60'), ('company_id', '=', self.company.id)]) bal = acc60.get_balance(company_id=self.company.id) self.assertEqual(bal['debit'], 500.0)