Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions poweremail_signaturit/__terp__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
'base',
'base_extended',
'poweremail_certificat',
'giscedata_signatura_documents_signaturit',
],
"init_xml": [],
"demo_xml": [],
Expand Down
38 changes: 36 additions & 2 deletions poweremail_signaturit/poweremail_core.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,40 @@ class PoweremailCore(osv.osv):

_inherit = 'poweremail.core_accounts'

def get_signaturit_client(self, cursor, uid, poweremail_account_id, context=None):
"""
:param cursor:
:param uid:
:param poweremail_account_id: ID de poweremail.core_accounts
:param context:
:return: Retorna les credencials de signaturit a utilitzar per enviar el poweremail_id. Per saber quines
credencials utilitzar es revisa el compte de poweremail vinculat al poweremail_id i s'obté la seva compañia.
Llavors es busca la conta de signaturit donada d'alta per aquella companyia.
No pot haver-hi més de un compte per companyia, per tant nomes hauria de haer-hi un resultat.
"""
if isinstance(poweremail_account_id, (list, tuple)):
poweremail_account_id = poweremail_account_id[0]
# Compatibilitat enrera: si no existeix el model "giscedata.signature.provider.account" vol dir que el
# refactor de Signaturit no està instalat al ERP, per tant continuarem funcionant com abans.
refactor_signaturit_disponible = self.pool.get('giscedata.signature.provider.account')
if refactor_signaturit_disponible:
# El import el fem aqui perque si el refactor no esta instalat fallarà
from giscedata_signatura_documents_signaturit.giscedata_signature_clients import SignatureFactory
pro_obj = self.pool.get('giscedata.signatura.process')
provider = "signaturit" # De moment nomes tenim emails certificats amb signaturit
company_id = 1
if 'company_id' in self._columns.keys():
info = self.read(cursor, uid, poweremail_account_id, ['company_id'], context=context)
if info['company_id']:
company_id = info['company_id'][0]
signature_account_id = pro_obj.get_signature_account_id(cursor, uid, company_id, provider, context=context)
sclient = SignatureFactory.instantiate_signature(cursor, provider=provider, account_id=signature_account_id)
client = sclient.get_client()
else:
# Legacy, quan tots els ERPs estiguin a la v25.9 es podrar eliminar
client = get_signaturit_client()
return client

def send_mail_certificat(self, cr, uid, ids, addresses, subject='', body=None, payload=None, context=None):
"""
:return: 'True' si s'ha pogut enviar el email, altrament un missatge de error
Expand All @@ -36,7 +70,7 @@ def parse_body_html(pem_body_html, pem_body_text):
html = html.replace('\n', '<br/>')
return html

client = get_signaturit_client()
client = self.get_signaturit_client(cr, uid, ids, context=context)
if body is None:
body = {}
if context is None:
Expand Down Expand Up @@ -124,7 +158,7 @@ def get_mail_audit_trail(self, cr, uid, ids, audit_trail_id, context=None):
context = {}

res = False
client = get_signaturit_client()
client = self.get_signaturit_client(cr, uid, ids, context=context)
mail_json = client.get_email(audit_trail_id)
certificates = []
if mail_json:
Expand Down
8 changes: 7 additions & 1 deletion poweremail_signaturit/poweremail_mailbox.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@ class PoweremailMailbox(osv.osv):

_inherit = 'poweremail.mailbox'

def get_signaturit_client(self, cursor, uid, pw_id, context=None):
if isinstance(pw_id, (list, tuple)):
pw_id = pw_id[0]
pem_account_id = self.read(cursor, uid, pw_id, ['pem_account_id'], context=context)['pem_account_id'][0]
return self.pool.get("poweremail.core_accounts").get_signaturit_client(cursor, uid, pem_account_id, context=context)

def update_poweremail_certificate(
self, cursor, uid, pe_id, final_certificat_state, context=None):
if context is None:
Expand All @@ -30,7 +36,7 @@ def update_poweremail_certificate(
poweremail_info = cursor.dictfetchone()
except LockNotAvailable:
return False
client = get_signaturit_client()
client = self.get_signaturit_client(cursor, uid, pe_id, context=context)
res = client.get_email(poweremail_info['certificat_signature_id'])
if "id" not in res:
return False
Expand Down
43 changes: 3 additions & 40 deletions poweremail_signaturit/tests/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,41 +14,11 @@

class TestPoweremailSignaturit(testing.OOTestCaseWithCursor):

signaturit_sandbox_token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

def get_sandbox_client(self):
client = SignaturitClient(self.signaturit_sandbox_token, False)
return client

def test_POST_email_simple(self):
cursor = self.cursor
uid = self.uid
pool = self.openerp.pool
#client = self.get_sandbox_client()

# He comentat el test per no fer una crida sempre que es facin els tests, pero ho deixo per veure com es pot cridar la api

# res = client.create_email(
# files=[],
# recipients=[{'name': 'Eduard', 'email': 'eberloso@gisce.net'}],
# subject="Email Certificat Simple",
# body="Aixo es un email <b>certificat</b>",
# params={'type': "open_email"}
# )
# self.assertTrue(res['id'])
# self.assertEqual(res['certificates'][0]['status'], u'in_queue')
# self.assertEqual(res['certificates'][0]['name'], u'Eduard')
# self.assertEqual(res['certificates'][0]['email'], u'eberloso@gisce.net')

@mock.patch("signaturit_sdk.signaturit_client.SignaturitClient.get_email")
@mock.patch("poweremail_signaturit.poweremail_core.get_signaturit_client")
def test_update_poweremail_certificat_state(self, mocked_get_signaturit_client, mocked):
def test_update_poweremail_certificat_state(self, mocked):
cursor = self.cursor
uid = self.uid
pool = self.openerp.pool
client = self.get_sandbox_client()
config['signaturit_token'] = 'RANDOM_RANDOM'
mocked_get_signaturit_client.return_value = client

poweracc_o = pool.get("poweremail.core_accounts")
poweremail_o = pool.get("poweremail.mailbox")
Expand Down Expand Up @@ -108,17 +78,13 @@ def test_update_poweremail_certificat_state(self, mocked_get_signaturit_client,
self.assertEqual(poweremail_o.read(cursor, uid, pwid, ['certificat_state'])['certificat_state'], "document_opened")

@mock.patch("signaturit_sdk.signaturit_client.SignaturitClient.create_email")
@mock.patch("poweremail_signaturit.poweremail_core.get_signaturit_client")
def test_send_mail_certificat_fails_and_returns_false(self, mocked_get_signaturit_client, mock_create_email):
def test_send_mail_certificat_fails_and_returns_false(self, mock_create_email):
cursor = self.cursor
uid = self.uid
pool = self.openerp.pool
poweracc_o = pool.get("poweremail.core_accounts")
poweremail_o = pool.get("poweremail.mailbox")

client = self.get_sandbox_client()
mocked_get_signaturit_client.return_value = client

ids = [
poweracc_o.create(cursor, uid, {
'email_id': "algunmail@gisce.net",
Expand Down Expand Up @@ -148,17 +114,14 @@ def test_send_mail_certificat_fails_and_returns_false(self, mocked_get_signaturi
)
self.assertFalse(res)

@mock.patch("poweremail_signaturit.poweremail_core.get_signaturit_client")
@mock.patch("signaturit_sdk.signaturit_client.SignaturitClient.create_email")
def test_send_mail_certificat_ok_and_returns_true(self, mocked_create_email, mocked_get_signaturit_client):
def test_send_mail_certificat_ok_and_returns_true(self, mocked_create_email):
cursor = self.cursor
uid = self.uid
pool = self.openerp.pool
poweracc_o = pool.get("poweremail.core_accounts")
poweremail_o = pool.get("poweremail.mailbox")

client = self.get_sandbox_client()
mocked_get_signaturit_client.return_value = client
# Per evitar anar enviant emails, fem un mock id espres validem que es crida com esperem
mocked_create_email.return_value = {'id': "123456789"}

Expand Down