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: -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 ; 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 -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 similarity index 53% rename from addons/crm/tests/test_lead2opportunity.py rename to 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 similarity index 100% rename from addons/crm/tests/test_new_lead_notification.py rename to addons/crm/tests/test_crm_lead_notification.py