1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
|
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from contextlib import contextmanager
from unittest.mock import patch
from odoo import exceptions
from odoo.addons.iap.tools import iap_tools
from odoo.addons.iap.models.iap_enrich_api import IapEnrichAPI
from odoo.tests import common
class MockIAPEnrich(common.TransactionCase):
@classmethod
def setUpClass(cls):
super(MockIAPEnrich, cls).setUpClass()
cls._init_iap_mock()
@contextmanager
def mockIAPEnrichGateway(self, default_data=None, email_data=None, sim_error=None, failing_emails=None):
def _contact_iap(local_endpoint, params):
sim_result = {
'name': 'Simulator INC',
'location': 'Simulator Street',
'city': 'SimCity',
'postal_code': '9876',
'country_code': 'BE',
'clearbit_id': 'idontknow',
'phone_numbers': ['+3269001122', '+32456001122'],
'twitter': 'testtwitter',
'facebook': 'testfacebook',
}
if default_data:
sim_result.update(default_data)
# mock single sms sending
if local_endpoint == '/iap/clearbit/1/lead_enrichment_email':
result = {}
for lead_id, email in params['domains'].items():
if sim_error and sim_error == 'credit':
raise iap_tools.InsufficientCreditError('InsufficientCreditError')
elif sim_error and sim_error == 'jsonrpc_exception':
raise exceptions.AccessError(
'The url that this service requested returned an error. Please contact the author of the app. The url it tried to contact was ' + local_endpoint
)
result[str(lead_id)] = dict(sim_result)
if email_data and email_data.get(email):
result[str(lead_id)].update(email_data[email])
return result
try:
with patch.object(IapEnrichAPI, '_contact_iap', side_effect=_contact_iap) as contact_iap_mock:
yield
finally:
pass
@classmethod
def _init_iap_mock(cls):
cls.base_de = cls.env.ref('base.de')
cls.de_state_st = cls.env['res.country.state'].create({
'name': 'DE ST State',
'code': 'st',
'country_id': cls.base_de.id
})
cls.base_be = cls.env.ref('base.be')
cls.be_state_bw = cls.env['res.country.state'].create({
'name': 'Béwééé dis',
'code': 'bw',
'country_id': cls.base_be.id
})
def _get_iap_company_data(self, base_name, service=None, add_values=None):
return {
'domain': '%s.de' % base_name,
'clearbit_id': '123_ClearbitID_%s' % base_name,
# Company Info
'name': '%s GmbH' % base_name,
'legal_name': '%s GmbH legal_name' % base_name,
'description': '%s GmbH description' % base_name,
'founded_year': '1930',
'logo': 'https://logo.clearbit.com/%slogo.com' % base_name,
'company_type': 'private',
# Contacts
'phone_numbers': ['+4930499193937', '+4930653376208'],
'email': [
'info@%s.example.com' % base_name,
'info2@%s.example.com' % base_name
],
# Timezone
'timezone': 'Europe/Berlin',
'timezone_url': 'https://time.is/Berlin',
# Social
'facebook': "%s Facebook Handle" % base_name,
'linkedin': "%s Linkedin Handle" % base_name,
'crunchbase': "organization/%s" % base_name,
# Twitter
'twitter': '%s Twitter Handle' % base_name,
'twitter_bio': '%s Twitter Bio' % base_name,
'twitter_followers': 1250,
'twitter_location': 'Berlin',
# Metrics
'estimated_annual_revenue': '1000000',
'employees': 3.14,
'market_cap': 6.28,
'raised': 15000,
'annual_revenue': 1000000,
# Category
'sector': '%s sector' % base_name,
'sector_primary': '%s sector_primary' % base_name,
'industry': '%s industry' % base_name,
'industry_group': '%s industry_group' % base_name,
'sub_industry': '%s sub_industry' % base_name,
'tag': ['Automation', 'Construction'],
'tech': ['3d_cart', 'nginx'],
# Site
'website_title': '%s Website Title' % base_name,
# GEO Data
'location': 'Mennrather Str. 123456',
'street_number': '123456',
'street_name': 'Mennrather Str.',
'sub_premise': 'sub premise',
'postal_code': '41179',
'city': 'Mönchengladbach',
'state_code': self.de_state_st.code,
'state_name': self.de_state_st.name,
'country_code': self.base_de.code,
'country_name': self.base_de.name,
}
def _get_iap_contact_data(self, base_name, service=None, add_values=None):
people_data = []
for index in range(2):
payload = {
'full_name': 'Contact %s %s' % (base_name, index),
'email': 'test.contact.%s@%s.example.com' % (index, base_name),
'phone': '+49 30 548406496',
'seniority': 'manager',
'title': 'Doing stuff',
'role': 'health_professional',
}
people_data.append(payload)
return people_data
|