import base64
from contextlib import contextmanager
from unittest.mock import patch
from odoo.tests import BaseCase, TransactionCase
from odoo.addons.base.models.ir_actions_report import IrActionsReport
from odoo.addons.mail.tests.common import mail_new_test_user
VALID_JPEG = base64.b64decode('/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/yQALCAABAAEBAREA/8wABgAQEAX/2gAIAQEAAD8A0s8g/9k=')
def mock_image_render(func):
def patched(self, *args, **kwargs):
with self.mock_image_renderer(collect_params=False):
return func(self, *args, **kwargs)
return patched
class MockImageRender(BaseCase):
@contextmanager
def mock_image_renderer(self, collect_params=True):
self._wkhtmltoimage_bodies = []
def _ir_actions_report_build_run_wkhtmltoimage(model, bodies, width, height, image_format="jpg"):
if collect_params:
self._wkhtmltoimage_bodies.extend(bodies)
return [VALID_JPEG] * len(bodies)
with patch.object(IrActionsReport, '_run_wkhtmltoimage', _ir_actions_report_build_run_wkhtmltoimage):
yield
class MarketingCardCommon(TransactionCase, MockImageRender):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.company = cls.env['res.company'].create({
'country_id': cls.env.ref("base.be").id,
'email': 'your.company@example.',
'name': 'YourTestCompany',
})
cls.marketing_card_manager = mail_new_test_user(
cls.env,
company_id=cls.company.id,
email='manager.marketing.card@example.com',
login='marketing_card_manager',
groups='marketing_card.marketing_card_group_manager',
name='Marketing Card Manager',
)
cls.marketing_card_user = mail_new_test_user(
cls.env,
company_id=cls.company.id,
email='user.marketing.card@example.com',
login='marketing_card_user',
groups='marketing_card.marketing_card_group_user',
name='Marketing Card User',
)
cls.marketing_card_user_2 = cls.marketing_card_user.copy({
'email': 'user2.marketing.card@example.com',
'login': 'marketing_card_user_2',
'name': 'Marketing Card User 2',
})
cls.system_admin = mail_new_test_user(
cls.env,
company_id=cls.company.id,
email='system.marketing.card@example.com',
login='marketing_card_system_admin',
groups='base.group_system,marketing_card.marketing_card_group_manager',
name='System Admin',
)
cls.partners = cls.env['res.partner'].create([
{'name': 'John', 'email': 'john93@trombino.scope'},
{'name': 'Bob', 'email': 'bob@justbob.me',
'phone': '+32 123 446 789', 'image_1920': base64.b64encode(VALID_JPEG),
},
])
cls.card_template = cls.env['card.template'].create({
'name': 'Test Template',
'body': """
Thanks for sharing!
""", 'reward_target_url': f"{cls.env['card.campaign'].get_base_url()}/share-rewards/2039-sharer-badge/", 'target_url': cls.env['card.campaign'].get_base_url(), 'content_section': 'Contact', 'content_sub_header_dyn': True, 'content_sub_header_path': 'name', 'content_sub_section1_dyn': True, 'content_sub_section1_path': 'email', 'content_sub_section2_dyn': True, 'content_sub_section2_path': 'phone', 'content_image1_path': 'user_ids.image_256', 'content_image2_path': 'image_256', }) cls.static_campaign = cls.env['card.campaign'].with_user(cls.marketing_card_user).create({ 'name': 'Simple Campaign', 'card_template_id': cls.card_template.id, 'post_suggestion': 'Come see my show!', 'preview_record_ref': f'{cls.partners._name},{cls.partners[0].id}', 'reward_message': """Thanks for sharing!
""", 'reward_target_url': f"{cls.env['card.campaign'].get_base_url()}/share-rewards/2039-sharer-badge/", 'target_url': cls.env['card.campaign'].get_base_url(), })