@ -1,8 +1,10 @@
# Copyright 2018 Tecnativa - Jairo Llopis
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from contextlib import contextmanager
from odoo.exceptions import ValidationError
from odoo.tests.common import HttpCase
from odoo.tests.common import HttpCase , Form
class ActivityCase ( HttpCase ) :
@ -70,6 +72,37 @@ class ActivityCase(HttpCase):
" server_action_id " : self . sync_blacklist . id ,
} )
@contextmanager
def _patch_build ( self ) :
self . _built_messages = [ ]
IMS = self . env [ ' ir.mail_server ' ]
def _build_email (
_self ,
email_from ,
email_to ,
subject ,
body ,
* args ,
* * kwargs
) :
self . _built_messages . append ( body )
return _build_email . origin (
_self ,
email_from ,
email_to ,
subject ,
body ,
* args ,
* * kwargs ,
)
try :
IMS . _patch_method ( ' build_email ' , _build_email )
yield
finally :
IMS . _revert_method ( ' build_email ' )
def check_activity_auto_properly_sent ( self ) :
""" Check emails sent by ``self.activity_auto``. """
consents = self . env [ " privacy.consent " ] . search ( [
@ -81,8 +114,9 @@ class ActivityCase(HttpCase):
messages = consent . message_ids
self . assertEqual ( len ( messages ) , 2 )
# Check sent mails
self . cron_mail_queue . method_direct_trigger ( )
for consent in consents :
with self . _patch_build ( ) :
self . cron_mail_queue . method_direct_trigger ( )
for index , consent in enumerate ( consents ) :
good_email = " @ " in ( consent . partner_id . email or " " )
expected_messages = 3 if good_email else 2
self . assertEqual (
@ -119,6 +153,14 @@ class ActivityCase(HttpCase):
)
# Partner's is_blacklisted should be synced with default consent
self . assertFalse ( consent . partner_id . is_blacklisted )
# Check the sent message was built properly tokenized
accept_url , reject_url = map ( consent . _url , ( True , False ) )
for body in self . _built_messages :
if accept_url in body and reject_url in body :
self . _built_messages . remove ( body )
break
else :
raise AssertionError ( " Some message body should have these urls " )
def test_default_template ( self ) :
""" We have a good mail template by default. """
@ -182,19 +224,27 @@ class ActivityCase(HttpCase):
# Send one manual request
action = consents [ 0 ] . action_manual_ask ( )
self . assertEqual ( action [ " res_model " ] , " mail.compose.message " )
composer = self . env [ action [ " res_model " ] ] \
. with_context ( active_ids = consents [ 0 ] . ids ,
active_model = consents . _name ,
* * action [ " context " ] ) . create ( { } )
composer . onchange_template_id_wrapper ( )
composer . send_mail ( )
Composer = self . env [ action [ " res_model " ] ] . with_context (
active_ids = consents [ 0 ] . ids ,
active_model = consents . _name ,
* * action [ " context " ] ,
)
composer_wizard = Form ( Composer )
self . assertIn ( consents [ 0 ] . partner_id . name , composer_wizard . body )
composer_record = composer_wizard . save ( )
with self . _patch_build ( ) :
composer_record . send_mail ( )
# Check the sent message was built properly tokenized
body = self . _built_messages [ 0 ]
self . assertIn ( consents [ 0 ] . _url ( True ) , body )
self . assertIn ( consents [ 0 ] . _url ( False ) , body )
messages = consents . mapped ( " message_ids " ) - messages
self . assertEqual ( len ( messages ) , 2 )
self . assertEqual ( messages [ 0 ] . subtype_id , self . mt_consent_state_changed )
self . assertEqual ( consents . mapped ( " state " ) , [ " sent " , " draft " , " draft " ] )
self . assertEqual (
consents . mapped ( " partner_id.is_blacklisted " ) ,
[ False , False , False ] ,
[ Tru e, False , False ] ,
)
# Placeholder links should be logged
self . assertTrue ( " /privacy/consent/accept/ " in messages [ 1 ] . body )