mirror of
https://github.com/OCA/report-print-send.git
synced 2025-02-16 07:11:31 +02:00
Standard migration, incl. changes proposed in https://github.com/OCA/report-print-send/pull/290/ Add unit test.
209 lines
8.8 KiB
Python
209 lines
8.8 KiB
Python
# Copyright 2012-2023 Camptocamp SA
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
|
|
|
|
import base64
|
|
import json
|
|
import logging
|
|
from os.path import dirname, join
|
|
from unittest.mock import patch
|
|
|
|
from freezegun import freeze_time
|
|
from vcr import VCR
|
|
|
|
from odoo.tests import tagged
|
|
from odoo.tests.common import HttpCase
|
|
|
|
from odoo.addons.website.tools import MockRequest
|
|
|
|
from ..controllers.main import PingenController
|
|
|
|
vcr_pingen = VCR(
|
|
record_mode="once",
|
|
cassette_library_dir=join(dirname(__file__), "fixtures/cassettes"),
|
|
path_transformer=VCR.ensure_suffix(".yaml"),
|
|
match_on=("method", "uri"),
|
|
decode_compressed_response=True,
|
|
)
|
|
|
|
logging.basicConfig()
|
|
vcr_log = logging.getLogger("vcr")
|
|
vcr_log.setLevel(logging.INFO)
|
|
|
|
|
|
@tagged("post_install", "-at_install")
|
|
class TestPingen(HttpCase):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
cls.company = cls.env.user.company_id
|
|
cls.company.pingen_clientid = "1234"
|
|
cls.company.pingen_client_secretid = "1234567893"
|
|
cls.company.pingen_organization = "4c08c24e-65f8-47cf-b280-518ee76e3437"
|
|
cls.company.pingen_staging = True
|
|
|
|
cls.pc = PingenController()
|
|
|
|
# flake8: noqa: B950
|
|
def get_request_json(self, uuid):
|
|
return json.dumps(
|
|
{
|
|
"data": {
|
|
"type": "webhook_issues",
|
|
"id": "735582d1-ccdf-423a-b493-1b3a6935df29",
|
|
"attributes": {
|
|
"reason": "Validation failed",
|
|
"url": r"https:\/\/36f4-2a02-1210-3497-c400-296e-3b7-6940-e38b.ngrok-free.app\/\/pingen\/letter_issues",
|
|
"created_at": "2023-05-19T09:35:01+0200",
|
|
},
|
|
"relationships": {
|
|
"organisation": {
|
|
"links": {
|
|
"related": r"https:\/\/identity-staging.pingen.com\/organisations\/4c08c24e-65f8-47cf-b280-518ee76e3437"
|
|
},
|
|
"data": {
|
|
"type": "organisations",
|
|
"id": "4c08c24e-65f8-47cf-b280-518ee76e3437",
|
|
},
|
|
},
|
|
"letter": {
|
|
"links": {
|
|
"related": r"https:\/\/identity-staging.pingen.com\/organisations\/4c08c24e-65f8-47cf-b280-518ee76e3437\/letters\/ddd105d8-42f6-4357-a103-9b2449bbd8e2"
|
|
},
|
|
"data": {
|
|
"type": "letters",
|
|
"id": uuid,
|
|
},
|
|
},
|
|
"event": {
|
|
"data": {
|
|
"type": "letters_events",
|
|
"id": "a9612d08-81c0-4259-8b0a-648c85377f71",
|
|
}
|
|
},
|
|
},
|
|
},
|
|
"included": [
|
|
{
|
|
"type": "organisations",
|
|
"id": "4c08c24e-65f8-47cf-b280-518ee76e3437",
|
|
"attributes": {
|
|
"name": "c2c",
|
|
"status": "active",
|
|
"plan": "free",
|
|
"billing_mode": "prepaid",
|
|
"billing_currency": "CHF",
|
|
"billing_balance": 199995.56,
|
|
"default_country": "CH",
|
|
"default_address_position": "right",
|
|
"data_retention_addresses": 6,
|
|
"data_retention_pdf": 1,
|
|
"color": "#0758FF",
|
|
"created_at": "2022-10-19T16:08:17+0200",
|
|
"updated_at": "2023-02-24T14:06:17+0100",
|
|
},
|
|
"links": {
|
|
"self": r"https:\/\/identity-staging.pingen.com\/organisations\/4c08c24e-65f8-47cf-b280-518ee76e3437"
|
|
},
|
|
},
|
|
{
|
|
"type": "letters",
|
|
"id": "ddd105d8-42f6-4357-a103-9b2449bbd8e2",
|
|
"attributes": {
|
|
"status": "action_required",
|
|
"file_original_name": "in_invoice_yourcompany_demo.pdf",
|
|
"file_pages": 1,
|
|
"address": "405 Pushp Business Campus\n,\nhmedabad, Gujarat, 382418\nnfo@azureinterior.com\n+92 7405987125",
|
|
"address_position": "left",
|
|
"country": "CH",
|
|
"delivery_product": "cheap",
|
|
"print_mode": "simplex",
|
|
"print_spectrum": "grayscale",
|
|
"price_currency": False,
|
|
"price_value": False,
|
|
"paper_types": ["normal"],
|
|
"fonts": [
|
|
{
|
|
"name": "LiberationSans",
|
|
"is_embedded": True,
|
|
},
|
|
{
|
|
"name": "Tibetan_Machine_Uni",
|
|
"is_embedded": True,
|
|
},
|
|
{
|
|
"name": "Chandas",
|
|
"is_embedded": True,
|
|
},
|
|
{
|
|
"name": "DejaVuSans-Bold",
|
|
"is_embedded": True,
|
|
},
|
|
{
|
|
"name": "DejaVuSans",
|
|
"is_embedded": True,
|
|
},
|
|
],
|
|
"source": "api",
|
|
"tracking_number": False,
|
|
"submitted_at": False,
|
|
"created_at": "2023-05-19T09:34:31+0200",
|
|
"updated_at": "2023-05-19T09:34:33+0200",
|
|
},
|
|
"links": {
|
|
"self": r"https:\/\/identity-staging.pingen.com\/organisations\/4c08c24e-65f8-47cf-b280-518ee76e3437\/letters\/ddd105d8-42f6-4357-a103-9b2449bbd8e2"
|
|
},
|
|
},
|
|
{
|
|
"type": "letters_events",
|
|
"id": "a9612d08-81c0-4259-8b0a-648c85377f71",
|
|
"attributes": {
|
|
"code": "content_failed_inspection",
|
|
"name": "Validation failed",
|
|
"producer": "Pingen",
|
|
"location": "",
|
|
"has_image": False,
|
|
"data": [],
|
|
"emitted_at": "2023-05-19T09:34:33+0200",
|
|
"created_at": "2023-05-19T09:34:33+0200",
|
|
"updated_at": "2023-05-19T09:34:33+0200",
|
|
},
|
|
},
|
|
],
|
|
}
|
|
)
|
|
|
|
@vcr_pingen.use_cassette
|
|
@freeze_time("2023-05-19")
|
|
def test_pingen_push_document(self):
|
|
attachment = self.env["ir.attachment"].create(
|
|
{
|
|
"name": "in_invoice_yourcompany_demo.pdf",
|
|
"datas": base64.b64encode(bytes("", "utf8")),
|
|
"type": "binary",
|
|
}
|
|
)
|
|
attachment.write({"send_to_pingen": True})
|
|
pingen_document = attachment.pingen_document_ids
|
|
pingen_document.push_to_pingen()
|
|
self.assertEqual(pingen_document.state, "pushed")
|
|
|
|
# as the demo invoice report does not meet pingen requirements,
|
|
# pingen will notify us about it on letter_issues webhook
|
|
|
|
with patch(
|
|
"odoo.addons.pingen.controllers.main.PingenController._get_request_content"
|
|
) as mocked_function, MockRequest(self.env) as mock_request:
|
|
mocked_function.return_value = self.get_request_json(
|
|
pingen_document.pingen_uuid
|
|
)
|
|
mock_request.httprequest.method = "POST"
|
|
# avoid checking signature when calling webhooks
|
|
with patch(
|
|
"odoo.addons.pingen.controllers.main.PingenController._verify_signature"
|
|
) as mocked_verify_sign:
|
|
mocked_verify_sign.return_value = True
|
|
self.pc.letter_issues()
|
|
|
|
self.assertEqual(pingen_document.state, "pingen_error")
|
|
self.assertEqual(pingen_document.last_error_message, "Validation failed")
|