Files
odoo_source/addons/snailmail_account/tests/test_pingen_send.py
T
Laurent Smet 34d53ebc87 [REF] account: Add generic 'AccountTestInvoicingHttpCommon' class
Thanks to this setup, we will be able to run the tours independently to any demo data.
To do so, the HttpSavepointCase is born to do the same as HttpCase but with a setUpClass.

--task: 2290120
2020-08-06 11:20:27 +00:00

82 lines
3.0 KiB
Python

import requests
import json
import base64
import logging
from odoo.tests.common import HttpCase
from odoo.tests import tagged
_logger = logging.getLogger(__name__)
@tagged('post_install', '-at_install', '-standard', 'external')
class TestPingenSend(HttpCase):
def setUp(self):
super(TestPingenSend, self).setUp()
self.pingen_url = "https://stage-api.pingen.com/document/upload/token/30fc3947dbea4792eb12548b41ec8117/"
self.sample_invoice = self.create_invoice()
self.sample_invoice.partner_id.vat = "BE000000000"
self.letter = self.env['snailmail.letter'].create({
'partner_id': self.sample_invoice.partner_id.id,
'model': 'account.move',
'res_id': self.sample_invoice.id,
'user_id': self.env.user.id,
'company_id': self.sample_invoice.company_id.id,
'report_template': self.env.ref('account.account_invoices').id
})
self.data = {
'data': json.dumps({
'speed': 1,
'color': 1,
'duplex': 0,
'send': True,
})
}
def create_invoice(self):
""" Create a sample invoice """
invoice = self.env['account.move'].with_context(default_move_type='out_invoice').create({
'move_type': 'out_invoice',
'partner_id': self.env.ref("base.res_partner_2").id,
'currency_id': self.env.ref('base.EUR').id,
'invoice_date': '2018-12-11',
'invoice_line_ids': [(0, 0, {
'product_id': self.env.ref("product.product_product_4").id,
'quantity': 1,
'price_unit': 42,
})],
})
invoice.action_post()
return invoice
def render_and_send(self, report_name):
self.sample_invoice.company_id.external_report_layout_id = self.env.ref('web.' + report_name)
self.letter.attachment_id = False
attachment_id = self.letter.with_context(force_report_rendering=True)._fetch_attachment()
files = {
'file': ('pingen_test_%s.pdf' % report_name, base64.b64decode(attachment_id.datas), 'application/pdf'),
}
response = requests.post(self.pingen_url, data=self.data, files=files)
if 400 <= response.status_code <= 599:
msg = "%(code)s %(side)s Error: %(reason)s for url: %(url)s\n%(body)s" % {
'code': response.status_code,
'side': r"%s",
'reason': response.reason,
'url': self.pingen_url,
'body': response.text}
if response.status_code <= 499:
raise requests.HTTPError(msg % "Client")
else:
_logger.warning(msg % "Server")
def test_pingen_send_invoice(self):
self.render_and_send('external_layout_standard')
self.render_and_send('external_layout_background')
self.render_and_send('external_layout_boxed')
self.render_and_send('external_layout_clean')