diff options
| author | Thibault Delavallée <tde@odoo.com> | 2020-01-06 16:32:24 +0000 |
|---|---|---|
| committer | Thibault Delavallée <tde@odoo.com> | 2020-01-10 16:06:44 +0000 |
| commit | ff6b35f759c64e49db787775e5df150ce0f53f9a (patch) | |
| tree | c721d7327a7b58c7c979fc597f4f6ff7126a44e0 /addons/crm/tests | |
| parent | a04b209ce611d0c1212f2093d0017f5dc955544f (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__.py | 4 | ||||
| -rw-r--r-- | addons/crm/tests/customer_request.eml | 30 | ||||
| -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 |
