mirror of
https://github.com/OCA/report-print-send.git
synced 2025-02-16 07:11:31 +02:00
[MIG] pingen: Migration to 16.0
Standard migration, incl. changes proposed in https://github.com/OCA/report-print-send/pull/290/ Add unit test.
This commit is contained in:
208
pingen/tests/test_pingen.py
Normal file
208
pingen/tests/test_pingen.py
Normal file
@@ -0,0 +1,208 @@
|
||||
# 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")
|
||||
Reference in New Issue
Block a user