summaryrefslogtreecommitdiff
path: root/addons/crm/tests
diff options
context:
space:
mode:
authorThibault Delavallée <tde@odoo.com>2020-01-06 16:32:24 +0000
committerThibault Delavallée <tde@odoo.com>2020-01-10 16:06:44 +0000
commitff6b35f759c64e49db787775e5df150ce0f53f9a (patch)
treec721d7327a7b58c7c979fc597f4f6ff7126a44e0 /addons/crm/tests
parenta04b209ce611d0c1212f2093d0017f5dc955544f (diff)
[IMP] crm: clean and improve tests for lead2opportunity converters
PURPOSE As crm will soon evolve (onchange -> compute, code improvements, addition of new features) cleaning and improving tests is necessary to help avoid issues. SPECIFICATIONS In this commit we add tests for the lead 2 opportunity converters. Indeed it is strange that such a critical wizard has so few tests. Notably the use of single-lead / multi-lead mode is more tested, allowing to see that code is somewhat oldish. LINKS Side effect of Task ID 2056759 (remove crm.partner.binding mixin) Side effect of Task ID 2088565 (crm onchange -> compute) Community PR #43127 Enterprise PR odoo/enterprise#7656
Diffstat (limited to 'addons/crm/tests')
-rw-r--r--addons/crm/tests/__init__.py4
-rw-r--r--addons/crm/tests/customer_request.eml30
-rw-r--r--addons/crm/tests/test_crm_lead_convert.py (renamed from addons/crm/tests/test_lead2opportunity.py)157
-rw-r--r--addons/crm/tests/test_crm_lead_notification.py (renamed from addons/crm/tests/test_new_lead_notification.py)0
4 files changed, 146 insertions, 45 deletions
diff --git a/addons/crm/tests/__init__.py b/addons/crm/tests/__init__.py
index 2897d0b277f..dfcb9be62a3 100644
--- a/addons/crm/tests/__init__.py
+++ b/addons/crm/tests/__init__.py
@@ -1,8 +1,8 @@
# -*- coding: utf-8 -*-
from . import test_crm_lead
-from . import test_new_lead_notification
-from . import test_lead2opportunity
+from . import test_crm_lead_notification
+from . import test_crm_lead_convert
from . import test_crm_activity
from . import test_crm_ui
from . import test_crm_pls
diff --git a/addons/crm/tests/customer_request.eml b/addons/crm/tests/customer_request.eml
deleted file mode 100644
index 2c6c5e8110d..00000000000
--- a/addons/crm/tests/customer_request.eml
+++ /dev/null
@@ -1,30 +0,0 @@
-Return-Path: <info@customer.com>
-X-Original-To: info@customer.com
-Delivered-To: sales@my.com
-Received: by mail.my.com (Postfix, from userid xxx)
- id 822ECBFB67; Mon, 24 Oct 2011 07:36:51 +0200 (CEST)
-X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.my.com
-X-Spam-Level:
-X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED autolearn=ham
- version=3.3.1
-Received: from [192.168.1.146]
- (Authenticated sender: info@mail.customer.com)
- by mail.customer.com (Postfix) with ESMTPSA id 07A30BFAB4
- for <sales@my.com>; Mon, 24 Oct 2011 07:36:50 +0200 (CEST)
-Message-ID: <4EA4F95D.904@customer.com>
-Date: Mon, 24 Oct 2011 11:06:29 +0530
-From: Mr. John Right <info@customer.com>
-User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.14) Gecko/20110223 Lightning/1.0b2 Thunderbird/3.1.8
-MIME-Version: 1.0
-To: sales@my.com
-Subject: Fournir votre devis avec le meilleur prix.
-Content-Type: text/plain; charset=ISO-8859-1; format=flowed
-Content-Transfer-Encoding: 8bit
-
-Bonjour l'équipe de vente,
-
-Je veux acheter vos produits et services.
-
-S'il vous plaît fournir votre cotation avec le meilleur prix.
-
-Merci
diff --git a/addons/crm/tests/test_lead2opportunity.py b/addons/crm/tests/test_crm_lead_convert.py
index 8e69b2a4a4d..c4f85fd6f1e 100644
--- a/addons/crm/tests/test_lead2opportunity.py
+++ b/addons/crm/tests/test_crm_lead_convert.py
@@ -1,13 +1,144 @@
# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from .common import TestCrmCommon
+from unittest.mock import patch
+from odoo.addons.crm.tests.common import TestCrmCommon
+from odoo.fields import Datetime
+from odoo.tests.common import tagged, users
-class TestLead2opportunity2win(TestCrmCommon):
+
+@tagged('lead_manage')
+class TestLeadConvertCommon(TestCrmCommon):
+
+ @classmethod
+ def setUpClass(cls):
+ super(TestLeadConvertCommon, cls).setUpClass()
+
+ cls.sales_team_convert = cls.env['crm.team'].create({
+ 'name': 'Convert Sales Team',
+ 'alias_name': False,
+ 'use_leads': True,
+ 'use_opportunities': True,
+ 'company_id': False,
+ 'user_id': cls.user_sales_manager.id,
+ 'member_ids': [(4, cls.user_sales_salesman.id)],
+ })
+ cls.lead_1.write({'date_open': Datetime.from_string('2020-01-15 11:30:00')})
+
+ cls.crm_lead_dt_patcher = patch('odoo.addons.crm.models.crm_lead.fields.Datetime', wraps=Datetime)
+ cls.crm_lead_dt_mock = cls.crm_lead_dt_patcher.start()
+
+ @classmethod
+ def tearDownClass(cls):
+ cls.crm_lead_dt_patcher.stop()
+ super(TestLeadConvertCommon, cls).tearDownClass()
+
+ def create_duplicates(self):
+ self.lead_1_dup1 = self.env['crm.lead'].create({
+ 'name': 'Duplicate1',
+ 'type': 'lead',
+ 'user_id': False,
+ 'team_id': self.lead_1.team_id.id,
+ 'contact_name': 'Amy Wong Duplicate',
+ 'email_from': self.lead_1.email_from,
+ })
+ self.lead_1_dup2 = self.env['crm.lead'].create({
+ 'name': 'Duplicate2',
+ 'type': 'lead',
+ 'user_id': False,
+ 'team_id': self.lead_1.team_id.id,
+ 'contact_name': 'Amy Wong Duplicate Two',
+ 'email_from': self.lead_1.email_from,
+ })
+
+
+class TestLeadConvert(TestLeadConvertCommon):
+
+ @users('user_sales_manager')
+ def test_lead_convert_convert(self):
+ date = Datetime.from_string('2020-01-20 16:00:00')
+ self.crm_lead_dt_mock.now.return_value = date
+
+ self.assertFalse(self.lead_1.date_conversion)
+ self.assertEqual(self.lead_1.date_open, Datetime.from_string('2020-01-15 11:30:00'))
+
+ convert = self.env['crm.lead2opportunity.partner'].with_context({
+ 'active_model': 'crm.lead',
+ 'active_id': self.lead_1.id,
+ 'active_ids': self.lead_1.ids,
+ }).create({})
+
+ # test internals of convert wizard
+ # self.assertEqual(convert.lead_id, self.lead_1)
+ self.assertEqual(convert.user_id, self.lead_1.user_id)
+ self.assertEqual(convert.team_id, self.lead_1.team_id)
+ self.assertFalse(convert.partner_id)
+ self.assertEqual(convert.name, 'convert')
+ self.assertEqual(convert.action, 'create')
+
+ convert.write({'user_id': self.user_sales_salesman.id})
+ convert._onchange_user()
+ self.assertEqual(convert.user_id, self.user_sales_salesman)
+ self.assertEqual(convert.team_id, self.sales_team_convert)
+
+ convert.action_apply()
+ self.assertEqual(self.lead_1.type, 'opportunity')
+
+ @users('user_sales_manager')
+ def test_lead_convert_merge(self):
+ self.create_duplicates()
+ date = Datetime.from_string('2020-01-20 16:00:00')
+ self.crm_lead_dt_mock.now.return_value = date
+
+ self.assertFalse(self.lead_1.date_conversion)
+ self.assertEqual(self.lead_1.date_open, Datetime.from_string('2020-01-15 11:30:00'))
+
+ convert = self.env['crm.lead2opportunity.partner'].with_context({
+ 'active_model': 'crm.lead',
+ 'active_id': self.lead_1.id,
+ 'active_ids': self.lead_1.ids,
+ }).create({})
+
+ # test internals of convert wizard
+ self.assertEqual(convert.opportunity_ids, self.lead_1 | self.lead_1_dup1 | self.lead_1_dup2)
+ self.assertEqual(convert.user_id, self.lead_1.user_id)
+ self.assertEqual(convert.team_id, self.lead_1.team_id)
+ self.assertFalse(convert.partner_id)
+ self.assertEqual(convert.name, 'merge')
+ self.assertEqual(convert.action, 'create')
+
+ convert.write({'user_id': self.user_sales_salesman.id})
+ convert._onchange_user()
+ self.assertEqual(convert.user_id, self.user_sales_salesman)
+ self.assertEqual(convert.team_id, self.sales_team_convert)
+
+ convert.action_apply()
+ self.assertEqual(self.lead_1.type, 'opportunity')
+
+ @users('user_sales_manager')
+ def test_lead_convert_various(self):
+ self.lead_1.write({'contact_name': False})
+
+ convert = self.env['crm.lead2opportunity.partner'].with_context({
+ 'active_model': 'crm.lead',
+ 'active_id': self.lead_1.id,
+ }).create({})
+ self.assertEqual(convert.action, 'nothing')
+
+ self.lead_1.write({'partner_id': self.contact_1.id})
+
+ convert = self.env['crm.lead2opportunity.partner'].with_context({
+ 'active_model': 'crm.lead',
+ 'active_id': self.lead_1.id,
+ }).create({})
+ self.assertEqual(convert.action, 'exist')
+
+
+class TestLeadConvertMass(TestLeadConvertCommon):
def test_lead2opportunity2win(self):
""" Tests for Test Lead 2 opportunity 2 win """
- CrmLead2OpportunityPartnerMass = self.env['crm.lead2opportunity.partner.mass']
default_stage_id = self.stage_gen_1.id
crm_case_2 = self.env['crm.lead'].create({
@@ -40,14 +171,12 @@ class TestLead2opportunity2win(TestCrmCommon):
self.assertEqual(crm_case_3.partner_id.id, self.contact_2.id, 'Partner mismatch!')
self.assertEqual(crm_case_3.stage_id.id, default_stage_id, 'Stage of opportunity is incorrect!')
- # Now I schedule meeting with customer.
- crm_case_3.action_schedule_meeting()
-
- # After communicated with customer, I put some notes with contract details.
- crm_case_3.message_post(subject='Test note', body='Détails envoyés par le client sur ​​le FAX pour la qualité')
-
# I convert mass lead into opportunity customer.
- mass = CrmLead2OpportunityPartnerMass.with_user(self.user_sales_manager).with_context({'active_model': 'crm.lead', 'active_ids': [crm_case_13.id, crm_case_2.id], 'active_id': crm_case_13.id}).create({
+ mass = self.env['crm.lead2opportunity.partner.mass'].with_user(self.user_sales_manager).with_context({
+ 'active_model': 'crm.lead',
+ 'active_ids': [crm_case_13.id, crm_case_2.id],
+ 'active_id': crm_case_13.id}
+ ).create({
'user_ids': [(6, 0, self.env.ref('base.user_root').ids)],
'team_id': self.env.ref("sales_team.team_sales_department").id
})
@@ -73,7 +202,6 @@ class TestLead2opportunity2win(TestCrmCommon):
def test_lead2opportunity_assign_salesmen(self):
""" Tests for Test Lead2opportunity Assign Salesmen """
- CrmLead2OpportunityPartnerMass = self.env['crm.lead2opportunity.partner.mass']
LeadSaleman = self.env['crm.lead'].with_user(self.user_sales_manager)
default_stage_id = self.stage_gen_1.id
@@ -137,8 +265,11 @@ class TestLead2opportunity2win(TestCrmCommon):
salesmen_ids = [test_res_user_01.id, test_res_user_02.id, test_res_user_03.id, test_res_user_04.id]
# Salesman create a mass convert wizard and convert all the leads.
- additionnal_context = {'active_model': 'crm.lead', 'active_ids': lead_ids, 'active_id': test_crm_lead_01.id}
- mass = CrmLead2OpportunityPartnerMass.with_user(self.user_sales_manager).with_context(**additionnal_context).create({
+ mass = self.env['crm.lead2opportunity.partner.mass'].with_user(self.user_sales_manager).with_context({
+ 'active_model': 'crm.lead',
+ 'active_ids': lead_ids,
+ 'active_id': test_crm_lead_01.id}
+ ).create({
'user_ids': [(6, 0, salesmen_ids)],
'team_id': self.env.ref("sales_team.team_sales_department").id,
'deduplicate': False,
diff --git a/addons/crm/tests/test_new_lead_notification.py b/addons/crm/tests/test_crm_lead_notification.py
index 2e6e646da85..2e6e646da85 100644
--- a/addons/crm/tests/test_new_lead_notification.py
+++ b/addons/crm/tests/test_crm_lead_notification.py