Files
account-financial-tools/account_permanent_lock_move/tests/test_permanent_lock.py
2016-10-17 09:35:52 +02:00

141 lines
5.0 KiB
Python

# -*- coding: utf-8 -*-
# © 2016 Camptocamp SA (Matthieu Dietrich)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import datetime
from odoo import fields, tools
from odoo.modules import get_module_resource
from odoo.tests import common
from odoo.exceptions import UserError
class PermanentLock(common.TransactionCase):
def setUp(self):
super(PermanentLock, self).setUp()
tools.convert_file(self.cr, 'account',
get_module_resource('account', 'test',
'account_minimal_test.xml'),
{}, 'init', False, 'test')
self.account_move_obj = self.env["account.move"]
self.account_move_line_obj = \
self.env["account.move.line"]
self.company_id = self.ref('base.main_company')
self.partner = self.browse_ref("base.res_partner_12")
self.account_id = self.ref("account.a_recv")
self.account_id2 = self.ref("account.a_expense")
self.journal_id = self.ref("account.bank_journal")
self.wizard_obj = self.env["permanent.lock.date.wizard"]
def test_name_completion(self):
"""Test complete partner_id from statement line label
Test the automatic completion of the partner_id based if the name of
the partner appears in the statement line label
"""
# Create a move
self.move = self.account_move_obj.create({
'date': fields.Date.today(),
'journal_id': self.journal_id,
'line_ids': [(0, 0, {
'account_id': self.account_id,
'credit': 1000.0,
'name': 'Credit line',
}), (0, 0, {
'account_id': self.account_id2,
'debit': 1000.0,
'name': 'Debit line',
})]
})
# Call lock wizard on entry
raised_lock_error = False
try:
self.wizard = self.wizard_obj.create({
'company_id': self.company_id,
'lock_date': fields.Date.today()
})
self.wizard.confirm_date()
except UserError as ue:
if 'entries are still unposted' in ue.name:
raised_lock_error = True
self.assertTrue(raised_lock_error,
"Permanent lock done even with unposted entry.")
# Post entry and lock
self.move.post()
moves = self.env['account.move'].search(
[('company_id', '=', self.company_id),
('date', '<=', fields.Date.today()),
('state', '=', 'draft')])
moves.post()
self.wizard = self.wizard_obj.create({
'company_id': self.company_id,
'lock_date': fields.Date.today()
})
self.wizard.confirm_date()
# Try to lock the day before
raised_lock_error = False
try:
yesterday = fields.Date.to_string(
fields.Date.from_string(
fields.Date.today()) +
datetime.timedelta(days=-1))
self.wizard = self.wizard_obj.create({
'company_id': self.company_id,
'lock_date': yesterday
})
self.wizard.confirm_date()
except UserError as ue:
if 'permanent lock date in the past' in ue.name:
raised_lock_error = True
self.assertTrue(raised_lock_error,
"Permanent lock set the day before.")
# Test that the move cannot be created, written, or cancelled
raised_create_error = False
raised_write_error = False
raised_cancel_error = False
try:
self.move2 = self.account_move_obj.create({
'date': fields.Date.today(),
'journal_id': self.journal_id,
'line_ids': [(0, 0, {
'account_id': self.account_id,
'credit': 1000.0,
'name': 'Credit line',
}), (0, 0, {
'account_id': self.account_id2,
'debit': 1000.0,
'name': 'Debit line',
})]
})
except UserError as ue:
if 'permanent lock date' in ue.name:
raised_create_error = True
self.assertTrue(raised_create_error,
"Journal Entry could be created after locking!")
try:
self.move.write({'name': 'TEST'})
except UserError as ue:
if 'permanent lock date' in ue.name:
raised_write_error = True
self.assertTrue(raised_write_error,
"Journal Entry could be modified after locking!")
try:
self.move.button_cancel()
except UserError as ue:
if 'permanent lock date' in ue.name:
raised_cancel_error = True
self.assertTrue(raised_cancel_error,
"Journal Entry could be cancelled after locking!")