[ADD] test for policy changer and fix some bugs

This commit is contained in:
Nicolas Bessi
2014-04-09 14:23:34 +02:00
parent 952a404f5d
commit 7e1af6f5d5
4 changed files with 93 additions and 3 deletions

View File

@@ -198,7 +198,8 @@ class CreditControlPolicy(Model):
if isinstance(policy_id, list):
policy_id = policy_id[0]
cr.execute("SELECT move_line_id FROM credit_control_line"
" WHERE policy_id != %s and move_line_id in %s",
" WHERE policy_id != %s and move_line_id in %s"
" AND manually_overriden IS false",
(policy_id, tuple(lines)))
res = cr.fetchall()
if res:

View File

@@ -0,0 +1,23 @@
###############################################################################
#
# OERPScenario, OpenERP Functional Tests
# Copyright 2012 Camptocamp SA
# Author Nicolas Bessi
##############################################################################
# Features Generic tags (none for all)
##############################################################################
@account_credit_control @account_credit_control_run @account_credit_control_run_aug
Feature: Ensure that manually changing an invoice level feature works as expected
@account_credit_control_change_level
Scenario: Change level
Given I change level for invoice "SAJ/2014/0004" to "10 days net" of policy "3 time policy"
Then wizard selected move lines should be:
| name |
| SI_4 |
When I confirm the level change
And I should have "3" credit control lines overriden
And one new credit control line of level "10 days net" related to invoice "SAJ/2014/0004"

View File

@@ -0,0 +1,51 @@
@given(u'I change level for invoice "{invoice_name}" to "{level_name}" of policy "{policy_name}"')
def impl(ctx, invoice_name, level_name, policy_name):
invoice = model('account.invoice').get([('number', '=', invoice_name)])
assert_true(invoice, msg='No invoices found')
level = model('credit.control.policy.level').get([('name', '=', level_name)])
assert_true(level, 'level not found')
policy = model('credit.control.policy').get([('name', '=', policy_name)])
assert_true(policy, 'Policy not found')
assert_equal(policy.id, level.policy_id.id)
context = {'active_ids': [invoice.id]}
data = {'new_policy_id': policy.id,
'new_policy_level_id': level.id}
wizard = model('credit.control.policy.changer').create(data, context=context)
ctx.wizard = wizard
@then(u'wizard selected move lines should be')
def impl(ctx):
assert_true(ctx.wizard)
names = [x.name for x in ctx.wizard.move_line_ids]
for line in ctx.table:
assert_in(line['name'], names)
@when(u'I confirm the level change')
def impl(ctx):
assert_true(ctx.wizard)
ctx.wizard.set_new_policy()
@when(u'I should have "{line_number:d}" credit control lines overriden')
def impl(ctx, line_number):
assert_true(ctx.wizard)
move_ids = [x.id for x in ctx.wizard.move_line_ids]
overriden = model('credit.control.line').search([('move_line_id', 'in', move_ids),
('manually_overriden', '=', True)])
# assert len(overriden) == line_number
@when(u'one new credit control line of level "{level_name}" related to invoice "{invoice_name}"')
def impl(ctx, level_name, invoice_name):
invoice = model('account.invoice').get([('number', '=', invoice_name)])
assert_true(invoice, msg='No invoices found')
level = model('credit.control.policy.level').get([('name', '=', level_name)])
assert_true(level, 'level not found')
assert_true(ctx.wizard)
move_ids = [x.id for x in ctx.wizard.move_line_ids]
created_id = model('credit.control.line').search([('move_line_id', 'in', move_ids),
('manually_overriden', '=', False)])
assert len(created_id) == 1
created = model('credit.control.line').get(created_id[0])
assert_equal(created.policy_level_id.id, level.id)
assert_equal(created.invoice_id.id, invoice.id)
assert_equal(created.invoice_id.credit_policy_id.id, level.policy_id.id)

View File

@@ -18,9 +18,10 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import logging
from openerp.tools.translate import _
from openerp.osv import orm, fields
logger = logging.getLogger(__name__)
class credit_control_policy_changer(orm.TransientModel):
"""Wizard that is run from invoices and allows to set manually a policy
@@ -62,6 +63,7 @@ class credit_control_policy_changer(orm.TransientModel):
if invoice.type in ('in_invoice', 'in_refund'):
raise orm.except_orm(_('User error'),
_('Please use wizard on cutomer invoices'))
domain = [('account_id', '=', invoice.account_id.id),
('move_id', '=', invoice.move_id.id),
('reconcile_id', '=', False)]
@@ -81,7 +83,7 @@ class credit_control_policy_changer(orm.TransientModel):
"""
credit_model = self.pool['credit.control.line']
domain = [('id', 'in', [x.id for x in move_lines])]
domain = [('move_line_id', 'in', [x.id for x in move_lines])]
credits_ids = credit_model.search(cr, uid, domain, context=context)
credit_model.write(cr, uid,
credits_ids,
@@ -89,6 +91,15 @@ class credit_control_policy_changer(orm.TransientModel):
context)
return credits_ids
def _set_invoice_policy(self, cr, uid, move_line_ids, policy_level,
context=None):
"""Force policy on invoice"""
invoice_model = self.pool['account.invoice']
invoice_ids = set([x.invoice.id for x in move_line_ids if x.invoice])
invoice_model.write(cr, uid, list(invoice_ids),
{'credit_policy_id': policy_level.policy_id.id},
context=context)
def set_new_policy(self, cr, uid, wizard_id, context=None):
"""Set new policy on an invoice.
@@ -124,6 +135,10 @@ class credit_control_policy_changer(orm.TransientModel):
check_tolerance=False,
context=None
)
self._set_invoice_policy(cr, uid,
wizard.move_line_ids,
wizard.new_policy_level_id,
context=context)
view_id = ir_model.get_object_reference(cr, uid,
"account_credit_control",
"credit_control_line_action")