[IMP] crm: add tests for assign / stage update dates
Just to see how it behaves currently, as we are going to fix some unwanted
changes. Notably
* setting user_id to the same value as before should not update the
date_open value;
* setting stage_id to the same value as before should not update the
last stage update value;
* triggers generate chain update of those fields (changing team_id
changes user_id that changes date_open, ...);
Task-3515225
X-original-commit: a1c72fff151524f636fae3f253d33b8228d0add9
Part-of: odoo/odoo#161918
This commit is contained in:
committed by
Thibault Delavallée
parent
050a17de3f
commit
7eeeb52f44
@@ -3,6 +3,7 @@
|
||||
|
||||
from datetime import datetime
|
||||
from freezegun import freeze_time
|
||||
from unittest.mock import patch
|
||||
|
||||
from odoo import fields
|
||||
from odoo.addons.base.tests.test_format_address_mixin import FormatAddressCase
|
||||
@@ -636,6 +637,96 @@ class TestCRMLead(TestCrmCommon):
|
||||
self.assertEqual(self.contact_company_1.email, 'broken')
|
||||
self.assertEqual(self.contact_company_1.phone, 'alsobroken')
|
||||
|
||||
@users('user_sales_manager')
|
||||
def test_crm_lead_update_dates(self):
|
||||
""" Test date_open / date_last_stage_update update, check those dates
|
||||
are not erased too often """
|
||||
first_now = datetime(2023, 11, 6, 8, 0, 0)
|
||||
with patch.object(self.env.cr, 'now', lambda: first_now), \
|
||||
freeze_time(first_now):
|
||||
leads = self.env['crm.lead'].create([
|
||||
{
|
||||
'email_from': 'testlead@customer.company.com',
|
||||
'name': 'Lead_1',
|
||||
'team_id': self.sales_team_1.id,
|
||||
'type': 'lead',
|
||||
'user_id': False,
|
||||
}, {
|
||||
'email_from': 'testopp@customer.company.com',
|
||||
'name': 'Opp_1',
|
||||
'type': 'opportunity',
|
||||
'user_id': self.user_sales_salesman.id,
|
||||
},
|
||||
])
|
||||
leads.flush_recordset()
|
||||
for lead in leads:
|
||||
self.assertEqual(lead.date_last_stage_update, first_now,
|
||||
"Stage updated at create time with default value")
|
||||
self.assertEqual(lead.stage_id, self.stage_team1_1)
|
||||
self.assertEqual(lead.team_id, self.sales_team_1)
|
||||
self.assertFalse(leads[0].date_open, "No user -> no assign date")
|
||||
self.assertFalse(leads[0].user_id)
|
||||
self.assertEqual(leads[1].date_open, first_now, "Default user assigned")
|
||||
self.assertEqual(leads[1].user_id, self.user_sales_salesman, "Default user assigned")
|
||||
|
||||
# changing user_id may change team_id / stage_id; update date_open and
|
||||
# maybe date_last_stage_update
|
||||
updated_time = datetime(2023, 11, 23, 8, 0, 0)
|
||||
with patch.object(self.env.cr, 'now', lambda: updated_time), \
|
||||
freeze_time(updated_time):
|
||||
leads.write({"user_id": self.user_sales_salesman.id})
|
||||
leads.flush_recordset()
|
||||
for lead in leads:
|
||||
self.assertEqual(lead.stage_id, self.stage_team1_1)
|
||||
self.assertEqual(lead.team_id, self.sales_team_1)
|
||||
self.assertEqual(
|
||||
leads[0].date_last_stage_update, updated_time,
|
||||
'FIXME: set same stage when changing user_id, should not update')
|
||||
self.assertEqual(
|
||||
leads[0].date_open, updated_time,
|
||||
'User assigned -> assign date updated')
|
||||
self.assertEqual(
|
||||
leads[1].date_last_stage_update, updated_time,
|
||||
'FIXME: set same stage when changing user_id, should not update')
|
||||
self.assertEqual(
|
||||
leads[1].date_open, updated_time,
|
||||
'FIXME: Should not update date_open, was already the same user_id')
|
||||
|
||||
# set won changes stage -> update date_last_stage_update
|
||||
newer_time = datetime(2023, 11, 26, 8, 0, 0)
|
||||
with patch.object(self.env.cr, 'now', lambda: newer_time), \
|
||||
freeze_time(newer_time):
|
||||
leads[1].action_set_won()
|
||||
leads[1].flush_recordset()
|
||||
self.assertEqual(
|
||||
leads[1].date_last_stage_update, newer_time,
|
||||
'Mark as won updates stage hence stage update date')
|
||||
self.assertEqual(leads[1].stage_id, self.stage_gen_won)
|
||||
|
||||
# merge may change user_id and then may change team_id / stage_id; in this
|
||||
# case no real value change is happening
|
||||
last_time = datetime(2023, 11, 29, 8, 0, 0)
|
||||
with patch.object(self.env.cr, 'now', lambda: last_time), \
|
||||
freeze_time(last_time):
|
||||
leads.merge_opportunity(
|
||||
user_id=self.user_sales_salesman.id,
|
||||
auto_unlink=False,
|
||||
)
|
||||
leads.flush_recordset()
|
||||
self.assertEqual(leads[0].date_last_stage_update, updated_time)
|
||||
self.assertEqual(leads[0].date_open, updated_time)
|
||||
self.assertEqual(leads[0].stage_id, self.stage_team1_1)
|
||||
self.assertEqual(leads[0].team_id, self.sales_team_1)
|
||||
self.assertEqual(
|
||||
leads[1].date_last_stage_update, last_time,
|
||||
'FIXME: should not rewrite when setting same stage')
|
||||
self.assertEqual(
|
||||
leads[1].date_open, last_time,
|
||||
'FIXME: should not rewrite when setting same user_id')
|
||||
self.assertEqual(leads[1].stage_id, self.stage_gen_won)
|
||||
self.assertEqual(leads[1].team_id, self.sales_team_1)
|
||||
self.assertEqual(leads[1].user_id, self.user_sales_salesman)
|
||||
|
||||
@users('user_sales_manager')
|
||||
def test_crm_team_alias(self):
|
||||
new_team = self.env['crm.team'].create({
|
||||
|
||||
Reference in New Issue
Block a user