iap/tests/common.py

153 lines
5.7 KiB
Python
Raw Permalink Normal View History

# -*- 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