summaryrefslogtreecommitdiff
path: root/addons/account/tests
diff options
context:
space:
mode:
authorqdp-odoo <qdp@openerp.com>2014-09-04 11:32:16 +0200
committerqdp-odoo <qdp@openerp.com>2014-09-04 11:32:16 +0200
commitf4e350ca36668d13c9eb09fbf77c85df110ce40c (patch)
tree2e0c6e0ffbb74c736c6ec290665ab3c54d831d62 /addons/account/tests
parente833066b63db9a8270d770c3f0fc7f62d0a0b0a1 (diff)
[FIX] account: several fixes on the new bank statement reconciliation widget
Diffstat (limited to 'addons/account/tests')
-rw-r--r--addons/account/tests/__init__.py2
-rw-r--r--addons/account/tests/test_bank_stmt_reconciliation_widget_ui.py8
-rw-r--r--addons/account/tests/test_reconciliation.py162
3 files changed, 172 insertions, 0 deletions
diff --git a/addons/account/tests/__init__.py b/addons/account/tests/__init__.py
index 02e9677ae03..e09bcc6ee99 100644
--- a/addons/account/tests/__init__.py
+++ b/addons/account/tests/__init__.py
@@ -1,7 +1,9 @@
from . import test_tax
from . import test_search
+from . import test_reconciliation
fast_suite = [
test_tax,
test_search,
+ test_reconciliation,
]
diff --git a/addons/account/tests/test_bank_stmt_reconciliation_widget_ui.py b/addons/account/tests/test_bank_stmt_reconciliation_widget_ui.py
new file mode 100644
index 00000000000..fe3a84ffd6c
--- /dev/null
+++ b/addons/account/tests/test_bank_stmt_reconciliation_widget_ui.py
@@ -0,0 +1,8 @@
+import openerp.tests
+
+@openerp.tests.common.at_install(False)
+@openerp.tests.common.post_install(True)
+
+class TestUi(openerp.tests.HttpCase):
+ def test_01_admin_bank_statement_reconciliation(self):
+ self.phantom_js("/", "openerp.Tour.run('bank_statement_reconciliation', 'test')", "openerp.Tour.tours.bank_statement_reconciliation", login="admin") \ No newline at end of file
diff --git a/addons/account/tests/test_reconciliation.py b/addons/account/tests/test_reconciliation.py
new file mode 100644
index 00000000000..62d44198153
--- /dev/null
+++ b/addons/account/tests/test_reconciliation.py
@@ -0,0 +1,162 @@
+from openerp.tests.common import TransactionCase
+
+class TestReconciliation(TransactionCase):
+ """Tests for reconciliation (account.tax)
+
+ Test used to check that when doing a sale or purchase invoice in a different currency,
+ the result will be balanced.
+ """
+
+ def setUp(self):
+ super(TestReconciliation, self).setUp()
+ self.account_invoice_model = self.registry('account.invoice')
+ self.account_invoice_line_model = self.registry('account.invoice.line')
+ self.acc_bank_stmt_model = self.registry('account.bank.statement')
+ self.acc_bank_stmt_line_model = self.registry('account.bank.statement.line')
+
+ self.partner_agrolait_id = self.registry("ir.model.data").get_object_reference(self.cr, self.uid, "base", "res_partner_2")[1]
+ self.currency_swiss_id = self.registry("ir.model.data").get_object_reference(self.cr, self.uid, "base", "CHF")[1]
+ self.currency_usd_id = self.registry("ir.model.data").get_object_reference(self.cr, self.uid, "base", "USD")[1]
+ self.account_rcv_id = self.registry("ir.model.data").get_object_reference(self.cr, self.uid, "account", "a_recv")[1]
+ self.account_rsa_id = self.registry("ir.model.data").get_object_reference(self.cr, self.uid, "account", "rsa")[1]
+ self.product_id = self.registry("ir.model.data").get_object_reference(self.cr, self.uid, "product", "product_product_4")[1]
+
+ self.bank_journal_usd_id = self.registry("ir.model.data").get_object_reference(self.cr, self.uid, "account", "bank_journal_usd")[1]
+ self.account_usd_id = self.registry("ir.model.data").get_object_reference(self.cr, self.uid, "account", "usd_bnk")[1]
+
+ self.company_id = self.registry("ir.model.data").get_object_reference(self.cr, self.uid, "base", "main_company")[1]
+ #set expense_currency_exchange_account_id and income_currency_exchange_account_id to a random account
+ self.registry("res.company").write(self.cr, self.uid, [self.company_id], {'expense_currency_exchange_account_id': self.account_rsa_id, 'income_currency_exchange_account_id':self.account_rsa_id})
+
+ def test_balanced_customer_invoice(self):
+ cr, uid = self.cr, self.uid
+ #we create an invoice in CHF
+ invoice_id = self.account_invoice_model.create(cr, uid, {'partner_id': self.partner_agrolait_id,
+ 'reference_type': 'none',
+ 'currency_id': self.currency_swiss_id,
+ 'name': 'invoice to client',
+ 'account_id': self.account_rcv_id,
+ 'type': 'out_invoice'
+ })
+ self.account_invoice_line_model.create(cr, uid, {'product_id': self.product_id,
+ 'quantity': 1,
+ 'price_unit': 100,
+ 'invoice_id': invoice_id,
+ 'name': 'product that cost 100',})
+
+ #validate purchase
+ self.registry('account.invoice').signal_workflow(cr, uid, [invoice_id], 'invoice_open')
+ invoice_record = self.account_invoice_model.browse(cr, uid, [invoice_id])
+
+ #we pay half of it on a journal with currency in dollar (bank statement)
+ bank_stmt_id = self.acc_bank_stmt_model.create(cr, uid, {'journal_id': self.bank_journal_usd_id,})
+
+ bank_stmt_line_id = self.acc_bank_stmt_line_model.create(cr, uid, {'name': 'half payment',
+ 'statement_id': bank_stmt_id,
+ 'partner_id': self.partner_agrolait_id,
+ 'amount': 42,
+ 'amount_currency': 50,
+ 'currency_id': self.currency_swiss_id,})
+
+ #reconcile the payment with the invoice
+ for l in invoice_record.move_id.line_id:
+ if l.account_id.id == self.account_rcv_id:
+ line_id = l
+ break
+ self.acc_bank_stmt_line_model.process_reconciliation(cr, uid, bank_stmt_line_id, [
+ {'counterpart_move_line_id': line_id.id, 'credit':50, 'debit':0, 'name': line_id.name,}])
+
+ #we check that the line is balanced (bank statement line)
+ move_line_ids = self.acc_bank_stmt_model.browse(cr,uid,bank_stmt_id).move_line_ids
+
+ self.assertEquals(len(move_line_ids), 3)
+ checked_line = 0
+ for move_line in move_line_ids:
+ if move_line.account_id.id == self.account_usd_id:
+ self.assertEquals(move_line.debit, 27.47)
+ self.assertEquals(move_line.credit, 0.0)
+ self.assertEquals(move_line.amount_currency, 42)
+ self.assertEquals(move_line.currency_id.id, self.currency_usd_id)
+ checked_line += 1
+ continue
+ if move_line.account_id.id == self.account_rcv_id:
+ self.assertEquals(move_line.debit, 0.0)
+ self.assertEquals(move_line.credit, 38.21)
+ self.assertEquals(move_line.amount_currency, -50)
+ self.assertEquals(move_line.currency_id.id, self.currency_swiss_id)
+ checked_line += 1
+ continue
+ if move_line.account_id.id == self.account_rsa_id:
+ self.assertEquals(move_line.debit, 10.74)
+ self.assertEquals(move_line.credit, 0.0)
+ checked_line += 1
+ continue
+ self.assertEquals(checked_line, 3)
+
+
+
+ def test_balanced_supplier_invoice(self):
+ cr, uid = self.cr, self.uid
+ #we create a supplier invoice in CHF
+ invoice_id = self.account_invoice_model.create(cr, uid, {'partner_id': self.partner_agrolait_id,
+ 'reference_type': 'none',
+ 'currency_id': self.currency_swiss_id,
+ 'name': 'invoice to client',
+ 'account_id': self.account_rcv_id,
+ 'type': 'in_invoice'
+ })
+ self.account_invoice_line_model.create(cr, uid, {'product_id': self.product_id,
+ 'quantity': 1,
+ 'price_unit': 100,
+ 'invoice_id': invoice_id,
+ 'name': 'product that cost 100',})
+
+ #validate purchase
+ self.registry('account.invoice').signal_workflow(cr, uid, [invoice_id], 'invoice_open')
+ invoice_record = self.account_invoice_model.browse(cr, uid, [invoice_id])
+
+ #we pay half of it on a journal with currency in dollar (bank statement)
+ bank_stmt_id = self.acc_bank_stmt_model.create(cr, uid, {'journal_id': self.bank_journal_usd_id,})
+
+ bank_stmt_line_id = self.acc_bank_stmt_line_model.create(cr, uid, {'name': 'half payment',
+ 'statement_id': bank_stmt_id,
+ 'partner_id': self.partner_agrolait_id,
+ 'amount': -42,
+ 'amount_currency': -50,
+ 'currency_id': self.currency_swiss_id,})
+
+ #reconcile the payment with the invoice
+ for l in invoice_record.move_id.line_id:
+ if l.account_id.id == self.account_rcv_id:
+ line_id = l
+ break
+ self.acc_bank_stmt_line_model.process_reconciliation(cr, uid, bank_stmt_line_id, [
+ {'counterpart_move_line_id': line_id.id, 'credit':0, 'debit':50, 'name': line_id.name,}])
+
+ #we check that the line is balanced (bank statement line)
+ move_line_ids = self.acc_bank_stmt_model.browse(cr,uid,bank_stmt_id).move_line_ids
+
+ self.assertEquals(len(move_line_ids), 3)
+ checked_line = 0
+ for move_line in move_line_ids:
+ if move_line.account_id.id == self.account_usd_id:
+ self.assertEquals(move_line.debit, 0.0)
+ self.assertEquals(move_line.credit, 27.47)
+ self.assertEquals(move_line.amount_currency, -42)
+ self.assertEquals(move_line.currency_id.id, self.currency_usd_id)
+ checked_line += 1
+ continue
+ if move_line.account_id.id == self.account_rcv_id:
+ self.assertEquals(move_line.debit, 38.21)
+ self.assertEquals(move_line.credit, 0.0)
+ self.assertEquals(move_line.amount_currency, 50)
+ self.assertEquals(move_line.currency_id.id, self.currency_swiss_id)
+ checked_line += 1
+ continue
+ if move_line.account_id.id == self.account_rsa_id:
+ self.assertEquals(move_line.debit, 0.0)
+ self.assertEquals(move_line.credit, 10.74)
+ checked_line += 1
+ continue
+ self.assertEquals(checked_line, 3)
+