Skip to content
Snippets Groups Projects
Commit 87f2ced5 authored by diagnoza's avatar diagnoza Committed by diagnoza
Browse files

[FIX] mail: allow tracking values not loaded into registry


Use dict.get() instead of a subscriptable call. This way we let through
selection values that are not loaded into the registry, instead
of raising an error.

This is especially useful in the upgrade environment
where such values may be unavailable (because of being
lambda-defined in a custom module for instance).

closes odoo/odoo#92466

Signed-off-by: default avatarThibault Delavallee (tde) <tde@openerp.com>
parent f8da6280
No related branches found
No related tags found
No related merge requests found
......@@ -64,7 +64,7 @@ class MailTracking(models.Model):
})
elif col_info['type'] == 'selection':
values.update({
'old_value_char': initial_value and dict(col_info['selection'])[initial_value] or '',
'old_value_char': initial_value and dict(col_info['selection']).get(initial_value, initial_value) or '',
'new_value_char': new_value and dict(col_info['selection'])[new_value] or ''
})
elif col_info['type'] == 'many2one':
......
......@@ -24,3 +24,12 @@ class MailTestFieldType(models.Model):
if not self._context.get('default_type'):
self = self.with_context(default_type='first')
return super(MailTestFieldType, self).create(vals_list)
class MailTestSelectionTracking(models.Model):
""" Test tracking for selection fields """
_description = 'Test Selection Tracking'
_name = 'mail.test.track.selection'
_inherit = ['mail.thread']
name = fields.Char()
type = fields.Selection([('first', 'First'), ('second', 'Second')], tracking=True)
......@@ -20,3 +20,5 @@ access_mail_test_cc_portal,mail.test.cc.portal,model_mail_test_cc,base.group_por
access_mail_test_cc_user,mail.test.cc.user,model_mail_test_cc,base.group_user,1,1,1,1
access_mail_test_multi_company_user,mail.test.multi.company.user,model_mail_test_multi_company,base.group_user,1,1,1,1
access_mail_test_multi_company_portal,mail.test.multi.company.portal,model_mail_test_multi_company,base.group_portal,1,0,0,0
access_mail_test_track_selection_portal,mail.test.track.selection.portal,model_mail_test_track_selection,base.group_portal,0,0,0,0
access_mail_test_track_selection_user,mail.test.track.selection.user,model_mail_test_track_selection,base.group_user,1,1,1,1
......@@ -203,6 +203,34 @@ class TestTracking(common.BaseFunctionalTest, common.MockEmails):
self.assertTrue(new_partner)
self.assertEqual(new_partner.company_id, company1)
def test_track_invalid_selection(self):
# Test: Check that initial invalid selection values are allowed when tracking
# Create a record with an initially invalid selection value
invalid_value = 'I love writing tests!'
record = self.env['mail.test.track.selection'].create({
'name': 'Test Invalid Selection Values',})
record.flush()
self.env.cr.execute(
"""
UPDATE mail_test_track_selection
SET type = %s
WHERE id = %s
""", [invalid_value, record.id]
)
record.invalidate_cache()
# Write a valid selection value
record.write({
'type': 'first',
})
tracking_value = self.env['mail.tracking.value'].search([
('mail_message_id', 'in', record.message_ids.ids),
('field', '=', 'type')])
self.assertEqual(tracking_value.old_value_char, invalid_value)
def test_track_template(self):
# Test: Check that default_* keys are not taken into account in _message_track_post_template
magic_code = 'Up-Up-Down-Down-Left-Right-Left-Right-Square-Triangle'
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment