From 21060ec1a7b1890d1a8bd3541eb0e08a63bbf6a3 Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Fri, 11 Oct 2019 10:53:46 +0200 Subject: [PATCH] [IMP] mis_builder_cash_flow: Add tests --- mis_builder_cash_flow/tests/__init__.py | 1 + mis_builder_cash_flow/tests/test_cash_flow.py | 130 ++++++++++++++++++ 2 files changed, 131 insertions(+) create mode 100644 mis_builder_cash_flow/tests/__init__.py create mode 100644 mis_builder_cash_flow/tests/test_cash_flow.py diff --git a/mis_builder_cash_flow/tests/__init__.py b/mis_builder_cash_flow/tests/__init__.py new file mode 100644 index 00000000..97acbd25 --- /dev/null +++ b/mis_builder_cash_flow/tests/__init__.py @@ -0,0 +1 @@ +from . import test_cash_flow diff --git a/mis_builder_cash_flow/tests/test_cash_flow.py b/mis_builder_cash_flow/tests/test_cash_flow.py new file mode 100644 index 00000000..a6c2f071 --- /dev/null +++ b/mis_builder_cash_flow/tests/test_cash_flow.py @@ -0,0 +1,130 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from datetime import timedelta + +from odoo.exceptions import ValidationError +from odoo.fields import Date +from odoo.tools import mute_logger +from odoo.tests.common import TransactionCase, post_install, at_install + + +@at_install(False) +@post_install(True) +class TestCashFlow(TransactionCase): + + def setUp(self): + super().setUp() + self.company = self.env['res.company'].create({ + 'name': 'TEST' + }) + self.report = self.browse_ref( + 'mis_builder_cash_flow.mis_instance_cash_flow') + self.report.company_id = self.company + self.bank_account = self.env['account.account'].create({ + "company_id": self.company.id, + "code": "TEST1", + "name": "Bank account 01", + "user_type_id": self.browse_ref( + "account.data_account_type_liquidity" + ).id, + }) + self.bank_account_hide = self.env['account.account'].create({ + "company_id": self.company.id, + "code": "TEST2", + "name": "Bank account 02", + "user_type_id": self.browse_ref( + "account.data_account_type_liquidity" + ).id, + "hide_in_cash_flow": True, + }) + self.account = self.env['account.account'].create({ + "company_id": self.company.id, + "code": "TEST3", + "name": "Account", + "user_type_id": self.browse_ref( + "account.data_account_type_receivable" + ).id, + "reconcile": True, + }) + self.journal = self.env["account.journal"].create({ + "name": "Journal", + "code": "JOURNAL", + "company_id": self.company.id, + "type": "general", + }) + + def test_company_constrain(self): + with self.assertRaises(ValidationError): + self.env['mis.cash_flow.forecast_line'].create({ + 'account_id': self.account.id, + 'date': Date.today(), + 'balance': 1000, + }) + + def test_report_instance(self): + self.check_matrix() + move = self.env['account.move'].create({ + 'name': 'Move', + 'journal_id': self.journal.id, + 'company_id': self.company.id, + 'line_ids': [(0, 0, { + 'account_id': self.bank_account.id, + 'debit': 1500, + 'credit': 0, + 'company_id': self.company.id, + }), (0, 0, { + 'account_id': self.bank_account_hide.id, + 'debit': 500, + 'credit': 0, + 'company_id': self.company.id, + }), (0, 0, { + 'account_id': self.account.id, + 'debit': 0, + 'credit': 2000, + 'company_id': self.company.id, + })] + }) + move.post() + self.check_matrix(args=[ + ('liquidity', 'Current', 1500), + ('balance', 'Current', 1500), + ('in_receivable', 'Current', -2000), + ], ignore_rows=['balance', 'period_balance', 'in_total'], + ) + date = Date.from_string(Date.today()) + timedelta(weeks=8) + self.env['mis.cash_flow.forecast_line'].create({ + 'account_id': self.account.id, + 'date': Date.to_string(date), + 'balance': 1000, + 'company_id': self.company.id, + }) + self.check_matrix([ + ('liquidity', 'Current', 1500), + ('balance', 'Current', 1500), + ('in_receivable', 'Current', -2000), + ('in_forecast', '+8w', 1000), + ], ignore_rows=['balance', 'period_balance', 'in_total']) + + def check_matrix(self, args=False, ignore_rows=False): + if not args: + args = [] + if not ignore_rows: + ignore_rows = [] + with mute_logger('odoo.addons.mis_builder.models.kpimatrix'): + matrix = self.report._compute_matrix() + for row in matrix.iter_rows(): + if row.kpi.name in ignore_rows: + continue + for cell in row.iter_cells(): + if not cell: + continue + found = False + label = cell.subcol.col.label + for exp in args: + if exp[0] == row.kpi.name and exp[1] == label: + found = True + self.assertEqual(cell.val, exp[2]) + break + if not found: + self.assertEqual(cell.val, 0)