Files
account-reconcile/account_reconciliation_widget/tests/test_reconciliation_widget.py
2020-12-17 01:21:57 +01:00

240 lines
7.9 KiB
Python

import logging
import time
import requests
import odoo.tests
from odoo.addons.account.tests.common import TestAccountReconciliationCommon
_logger = logging.getLogger(__name__)
@odoo.tests.tagged("post_install", "-at_install")
class TestUi(odoo.tests.HttpCase):
def test_01_admin_bank_statement_reconciliation(self):
bank_stmt_name = "BNK/%s/0001" % time.strftime("%Y")
bank_stmt_line = (
self.env["account.bank.statement"]
.search([("name", "=", bank_stmt_name)])
.mapped("line_ids")
)
if not bank_stmt_line:
_logger.info(
"Tour bank_statement_reconciliation skipped: bank statement %s "
"not found." % bank_stmt_name
)
return
admin = self.env.ref("base.user_admin")
# Tour can't be run if the setup if not the generic one.
generic_coa = self.env.ref(
"l10n_generic_coa.configurable_chart_template", raise_if_not_found=False
)
if (
not admin.company_id.chart_template_id
or admin.company_id.chart_template_id != generic_coa
):
_logger.info(
"Tour bank_statement_reconciliation skipped: generic coa not found."
)
return
# To be able to test reconciliation, admin user must have access to
# accounting features, so we give him the right group for that
admin.write({"groups_id": [(4, self.env.ref("account.group_account_user").id)]})
payload = {
"action": "bank_statement_reconciliation_view",
"statement_line_ids[]": bank_stmt_line.ids,
}
prep = requests.models.PreparedRequest()
prep.prepare_url(url="http://localhost/web#", params=payload)
self.start_tour(
prep.url.replace("http://localhost", "").replace("?", "#"),
"bank_statement_reconciliation",
login="admin",
)
@odoo.tests.tagged("post_install", "-at_install")
class TestReconciliationWidget(TestAccountReconciliationCommon):
@classmethod
def setUpClass(cls, chart_template_ref=None):
super().setUpClass(chart_template_ref=chart_template_ref)
cls.acc_bank_stmt_model = cls.env["account.bank.statement"]
cls.acc_bank_stmt_line_model = cls.env["account.bank.statement.line"]
def test_statement_suggestion_other_currency(self):
# company currency is EUR
# payment in USD
invoice = self.create_invoice(
invoice_amount=50, currency_id=self.currency_usd_id
)
# journal currency in USD
bank_stmt = self.acc_bank_stmt_model.create(
{
"journal_id": self.bank_journal_usd.id,
"date": time.strftime("%Y-07-15"),
"name": "payment %s" % invoice.name,
}
)
bank_stmt_line = self.acc_bank_stmt_line_model.create(
{
"payment_ref": "payment",
"statement_id": bank_stmt.id,
"partner_id": self.partner_agrolait_id,
"amount": 50,
"date": time.strftime("%Y-07-15"),
}
)
result = self.env["account.reconciliation.widget"].get_bank_statement_line_data(
bank_stmt_line.ids
)
self.assertEqual(
result["lines"][0]["reconciliation_proposition"][0]["amount_str"], "$ 50.00"
)
def test_filter_partner1(self):
inv1 = self.create_invoice(currency_id=self.currency_euro_id)
inv2 = self.create_invoice(currency_id=self.currency_euro_id)
partner = inv1.partner_id
receivable1 = inv1.line_ids.filtered(
lambda l: l.account_id.internal_type == "receivable"
)
receivable2 = inv2.line_ids.filtered(
lambda l: l.account_id.internal_type == "receivable"
)
bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_euro.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
}
)
bank_stmt_line = self.acc_bank_stmt_line_model.create(
{
"name": "testLine",
"statement_id": bank_stmt.id,
"amount": 100,
"date": time.strftime("%Y-07-15"),
"payment_ref": "test",
}
)
# This is like input a partner in the widget
mv_lines_rec = self.env[
"account.reconciliation.widget"
].get_move_lines_for_bank_statement_line(
bank_stmt_line.id,
partner_id=partner.id,
excluded_ids=[],
search_str=False,
mode="rp",
)
mv_lines_ids = [line["id"] for line in mv_lines_rec]
self.assertIn(receivable1.id, mv_lines_ids)
self.assertIn(receivable2.id, mv_lines_ids)
# With a partner set, type the invoice reference in the filter
mv_lines_rec = self.env[
"account.reconciliation.widget"
].get_move_lines_for_bank_statement_line(
bank_stmt_line.id,
partner_id=partner.id,
excluded_ids=[],
search_str=inv1.payment_reference,
mode="rp",
)
mv_lines_ids = [line["id"] for line in mv_lines_rec]
self.assertIn(receivable1.id, mv_lines_ids)
self.assertNotIn(receivable2.id, mv_lines_ids)
# Without a partner set, type "deco" in the filter
mv_lines_rec = self.env[
"account.reconciliation.widget"
].get_move_lines_for_bank_statement_line(
bank_stmt_line.id,
partner_id=False,
excluded_ids=[],
search_str="deco",
mode="rp",
)
mv_lines_ids = [line["id"] for line in mv_lines_rec]
self.assertIn(receivable1.id, mv_lines_ids)
self.assertIn(receivable2.id, mv_lines_ids)
# With a partner set, type "deco" in the filter and click on the first
# receivable
mv_lines_rec = self.env[
"account.reconciliation.widget"
].get_move_lines_for_bank_statement_line(
bank_stmt_line.id,
partner_id=partner.id,
excluded_ids=[receivable1.id],
search_str="deco",
mode="rp",
)
mv_lines_ids = [line["id"] for line in mv_lines_rec]
self.assertNotIn(receivable1.id, mv_lines_ids)
self.assertIn(receivable2.id, mv_lines_ids)
def test_partner_name_with_parent(self):
parent_partner = self.env["res.partner"].create(
{
"name": "test",
}
)
child_partner = self.env["res.partner"].create(
{
"name": "test",
"parent_id": parent_partner.id,
"type": "delivery",
}
)
self.create_invoice_partner(
currency_id=self.currency_euro_id, partner_id=child_partner.id
)
bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_euro.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
}
)
bank_stmt_line = self.acc_bank_stmt_line_model.create(
{
"name": "testLine",
"statement_id": bank_stmt.id,
"amount": 100,
"date": time.strftime("%Y-07-15"),
"payment_ref": "test",
"partner_name": "test",
}
)
bkstmt_data = self.env[
"account.reconciliation.widget"
].get_bank_statement_line_data(bank_stmt_line.ids)
self.assertEqual(len(bkstmt_data["lines"]), 1)
self.assertEqual(bkstmt_data["lines"][0]["partner_id"], parent_partner.id)