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': """
Button
""", }) cls.campaign = cls.env['card.campaign'].with_user(cls.marketing_card_user).create({ 'name': 'Test 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(), '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(), })