[TEST] automated action rule tests
bzr revid: api@openerp.com-20121127090755-03sfycnz8nw9ldnv
This commit is contained in:
parent
f295939edc
commit
a8f3510297
|
@ -1,111 +0,0 @@
|
|||
import tools
|
||||
from openerp.tests import common
|
||||
|
||||
class myLead(orm.Model):
|
||||
|
||||
_name = name('base_action_rule.myLead')
|
||||
|
||||
_columns = {
|
||||
'partner_id': fields.many2one('res.partner', 'Partner', ondelete='set null',
|
||||
select=True, help="Linked partner (optional). Usually created when converting the lead."),
|
||||
'id': fields.integer('ID', readonly=True),
|
||||
'name': fields.char('Subject', size=64, required=True, select=1),
|
||||
'active': fields.boolean('Active', required=False),
|
||||
'date_action_last': fields.datetime('Last Action', readonly=1),
|
||||
'date_action_next': fields.datetime('Next Action', readonly=1),
|
||||
'email_from': fields.char('Email', size=128, help="Email address of the contact", select=1),
|
||||
'section_id': fields.many2one('crm.case.section', 'Sales Team', \
|
||||
select=True, help='When sending mails, the default email address is taken from the sales team.'),
|
||||
'create_date': fields.datetime('Creation Date' , readonly=True),
|
||||
'email_cc': fields.text('Global CC', size=252 , help="These email addresses will be added to the CC field of all inbound and outbound emails for this record before being sent. Separate multiple email addresses with a comma"),
|
||||
'description': fields.text('Notes'),
|
||||
'write_date': fields.datetime('Update Date' , readonly=True),
|
||||
'categ_ids': fields.many2many('crm.case.categ', 'crm_lead_category_rel', 'lead_id', 'category_id', 'Categories', \
|
||||
domain="['|',('section_id','=',section_id),('section_id','=',False), ('object_id.model', '=', 'crm.lead')]"),
|
||||
'type_id': fields.many2one('crm.case.resource.type', 'Campaign', \
|
||||
domain="['|',('section_id','=',section_id),('section_id','=',False)]", help="From which campaign (seminar, marketing campaign, mass mailing, ...) did this contact come from?"),
|
||||
'channel_id': fields.many2one('crm.case.channel', 'Channel', help="Communication channel (mail, direct, phone, ...)"),
|
||||
'contact_name': fields.char('Contact Name', size=64),
|
||||
'partner_name': fields.char("Customer Name", size=64,help='The name of the future partner company that will be created while converting the lead into opportunity', select=1),
|
||||
'opt_out': fields.boolean('Opt-Out', oldname='optout', help="If opt-out is checked, this contact has refused to receive emails or unsubscribed to a campaign."),
|
||||
'type':fields.selection([ ('lead','Lead'), ('opportunity','Opportunity'), ],'Type', help="Type is used to separate Leads and Opportunities"),
|
||||
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority', select=True),
|
||||
'date_closed': fields.datetime('Closed', readonly=True),
|
||||
'stage_id': fields.many2one('crm.case.stage', 'Stage',
|
||||
domain="['&', ('fold', '=', False), '&', '|', ('section_ids', '=', section_id), ('case_default', '=', True), '|', ('type', '=', type), ('type', '=', 'both')]"),
|
||||
'user_id': fields.many2one('res.users', 'Salesperson'),
|
||||
'referred': fields.char('Referred By', size=64),
|
||||
'date_open': fields.datetime('Opened', readonly=True),
|
||||
'day_open': fields.function(_compute_day, string='Days to Open', \
|
||||
multi='day_open', type="float", store=True),
|
||||
'day_close': fields.function(_compute_day, string='Days to Close', \
|
||||
multi='day_close', type="float", store=True),
|
||||
'state': fields.related('stage_id', 'state', type="selection", store=True,
|
||||
selection=crm.AVAILABLE_STATES, string="Status", readonly=True,
|
||||
help='The Status is set to \'Draft\', when a case is created. If the case is in progress the Status is set to \'Open\'. When the case is over, the Status is set to \'Done\'. If the case needs to be reviewed then the Status is set to \'Pending\'.'),
|
||||
|
||||
# Only used for type opportunity
|
||||
'probability': fields.float('Success Rate (%)',group_operator="avg"),
|
||||
'planned_revenue': fields.float('Expected Revenue'),
|
||||
'ref': fields.reference('Reference', selection=crm._links_get, size=128),
|
||||
'ref2': fields.reference('Reference 2', selection=crm._links_get, size=128),
|
||||
'phone': fields.char("Phone", size=64),
|
||||
'date_deadline': fields.date('Expected Closing', help="Estimate of the date on which the opportunity will be won."),
|
||||
'date_action': fields.date('Next Action Date', select=True),
|
||||
'title_action': fields.char('Next Action', size=64),
|
||||
'color': fields.integer('Color Index'),
|
||||
'partner_address_name': fields.related('partner_id', 'name', type='char', string='Partner Contact Name', readonly=True),
|
||||
'partner_address_email': fields.related('partner_id', 'email', type='char', string='Partner Contact Email', readonly=True),
|
||||
'company_currency': fields.related('company_id', 'currency_id', type='many2one', string='Currency', readonly=True, relation="res.currency"),
|
||||
'user_email': fields.related('user_id', 'email', type='char', string='User Email', readonly=True),
|
||||
'user_login': fields.related('user_id', 'login', type='char', string='User Login', readonly=True),
|
||||
|
||||
# Fields for address, due to separation from crm and res.partner
|
||||
'street': fields.char('Street', size=128),
|
||||
'street2': fields.char('Street2', size=128),
|
||||
'zip': fields.char('Zip', change_default=True, size=24),
|
||||
'city': fields.char('City', size=128),
|
||||
'state_id': fields.many2one("res.country.state", 'State'),
|
||||
'country_id': fields.many2one('res.country', 'Country'),
|
||||
'phone': fields.char('Phone', size=64),
|
||||
'fax': fields.char('Fax', size=64),
|
||||
'mobile': fields.char('Mobile', size=64),
|
||||
'function': fields.char('Function', size=128),
|
||||
'title': fields.many2one('res.partner.title', 'Title'),
|
||||
'company_id': fields.many2one('res.company', 'Company', select=1),
|
||||
'payment_mode': fields.many2one('crm.payment.mode', 'Payment Mode', \
|
||||
domain="[('section_id','=',section_id)]"),
|
||||
'planned_cost': fields.float('Planned Costs'),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'active': 1,
|
||||
'type': 'lead',
|
||||
'user_id': lambda s, cr, uid, c: s._get_default_user(cr, uid, c),
|
||||
'email_from': lambda s, cr, uid, c: s._get_default_email(cr, uid, c),
|
||||
'stage_id': lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c),
|
||||
'section_id': lambda s, cr, uid, c: s._get_default_section_id(cr, uid, c),
|
||||
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.lead', context=c),
|
||||
'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0],
|
||||
'color': 0,
|
||||
}
|
||||
|
||||
|
||||
class base_action_rule_test(common.TransactionCase):
|
||||
|
||||
def setUp(self):
|
||||
"""*****setUp*****"""
|
||||
super(base_action_rule_test, self).setUp()
|
||||
cr, uid = self.cr, self.uid
|
||||
|
||||
"""********TeamCreation******"""
|
||||
self.team_pool = self.pool.get('crm.case.section')
|
||||
self.team_1_id = self.team_pool.create(cr, uid, {
|
||||
|
||||
}, context=None)
|
||||
|
||||
self.myLead_pool = self.pool.get('base_action_rule.myLead')
|
||||
self.new_myLead_id = self.myLead_pool.create(cr, uid, {
|
||||
'name' : "my_first_lead",
|
||||
'section_id' :
|
||||
}, context=None)
|
|
@ -0,0 +1,27 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Business Applications
|
||||
# Copyright (c) 2012-TODAY OpenERP S.A. <http://openerp.com>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
from . import base_action_rule_test
|
||||
|
||||
checks = [
|
||||
base_action_rule_test,
|
||||
]
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,69 @@
|
|||
import tools
|
||||
from openerp.tests import common
|
||||
|
||||
class base_action_rule_test(common.TransactionCase):
|
||||
|
||||
def setUp(self):
|
||||
"""*****setUp*****"""
|
||||
super(base_action_rule_test, self).setUp()
|
||||
cr, uid = self.cr, self.uid
|
||||
|
||||
"""*****TeamCreation******"""
|
||||
self.team_pool = self.registry('crm.case.section')
|
||||
self.team_1_id = self.team_pool.create(cr, uid, {
|
||||
'name' : "Team 1",
|
||||
'active' : 1,
|
||||
'user_id' : uid,
|
||||
'complete_name' : "Test / Team 1",
|
||||
}, context=None)
|
||||
self.team_2_id = self.team_pool.create(cr, uid, {
|
||||
'name' : "Team 2",
|
||||
'active' : 1,
|
||||
'user_id' : uid,
|
||||
'complete_name' : "Test / Team 2",
|
||||
}, context=None)
|
||||
|
||||
def create_rule_1(self, cr, uid, context=None):
|
||||
"""
|
||||
The "Rule 1" says that when a lead goes to the 'open' state, the team responsible for that lead changes to "Team 1"
|
||||
"""
|
||||
self.action_pool = self.registry('base.action.rule')
|
||||
self.rule_1_id = self.action_pool.create(cr,uid,{
|
||||
'name' : "Rule 1",
|
||||
'model_id' : self.registry('ir.model').search(cr, uid, [('model','=','crm.lead')], context=context)[0],
|
||||
'active' : 1,
|
||||
'trg_state_to' : 'open',
|
||||
'trg_date_type' : 'none',
|
||||
'act_section_id' : self.team_1_id,
|
||||
}, context=context)
|
||||
|
||||
def create_rule_2(self, cr, uid, context=None):
|
||||
"""
|
||||
The "Rule 2" says that when a lead goes from 'open' state to 'done' state, the team responsible for that lead changes to "Team 2"
|
||||
"""
|
||||
self.action_pool = self.registry('base.action.rule')
|
||||
self.rule_2_id = self.action_pool.create(cr,uid,{
|
||||
'name' : "Rule 2",
|
||||
'model_id' : self.registry('ir.model').search(cr, uid, [('model','=','crm.lead')], context=context)[0],
|
||||
'active' : 1,
|
||||
'trg_state_to' : 'done',
|
||||
'trg_state_from' : 'open',
|
||||
'trg_date_type' : 'none',
|
||||
'act_section_id' : self.team_2_id,
|
||||
}, context=context)
|
||||
|
||||
def test_00_check_to_state_draft(self):
|
||||
"""
|
||||
This test check that the team change when the state is open but doesn't change when the state is different
|
||||
"""
|
||||
cr, uid = self.cr, self.uid
|
||||
context = {}
|
||||
#First we need to create the Rule 1
|
||||
self.create_rule_1(cr, uid, context)
|
||||
#Once it is done, we can create a new lead (with a state = 'draft')
|
||||
#first we get our team 1
|
||||
self.team_1 = self.team_pool.browse(cr,uid,self.team_1_id,context=context)
|
||||
#We get a lead
|
||||
self.lead_1 = self.registry('ir.model.data').get_object_reference(cr, uid, 'crm', 'crm_case_1')
|
||||
#We change the team of crm_case_1
|
||||
|
Loading…
Reference in New Issue